Inhoudsopgave:

Herstel verkeerd geconfigureerde HC-06 Bluetooth-module - Ajarnpa
Herstel verkeerd geconfigureerde HC-06 Bluetooth-module - Ajarnpa

Video: Herstel verkeerd geconfigureerde HC-06 Bluetooth-module - Ajarnpa

Video: Herstel verkeerd geconfigureerde HC-06 Bluetooth-module - Ajarnpa
Video: LDmicro 13: HC-05 Bluetooth Phone App Control (Microcontroller PLC Ladder Programming with LDmicro) 2024, November
Anonim
Herstel verkeerd geconfigureerde HC-06 Bluetooth-module
Herstel verkeerd geconfigureerde HC-06 Bluetooth-module

Uit puur maximalisme heb ik mijn HC-06 Bluetooth (slave)-module geconfigureerd op een baudrate van 1, 382, 400 baud met het AT+BAUDC-commando. Sinds de Arduino erop was aangesloten, kon de module niet worden gebruikt met de SoftwareSerial-bibliotheek. Ik probeerde de baudrate te herstellen met Arduino's hardware seriële (pins 0 & 1) zonder geluk.

Ik heb ook geprobeerd het onderwerp te Googlen zonder een acceptabele oplossing te vinden. Misschien was het gebruik van de ingebouwde seriële poort van een computer een oplossing geweest (met 12V naar 3V3 logische niveauverschuiving), maar mijn computer heeft deze verouderde poort niet, dus ik moest met een andere oplossing komen.

Stap 1: Wat heb je nodig?

Wat je nodig zult hebben
Wat je nodig zult hebben
  • Arudino/Genuino-bord met de standaard Atmel ATMEGA328P-PU MCU (@16MHz).
  • Een HC-06 Bluetooth-module die luistert op 1, 382, 400 baud
  • Basis arduino IDE van

Stap 2: De oplossing

De oplossing
De oplossing
De oplossing
De oplossing

Houd er rekening mee dat deze Instructable en de oplossing is gemaakt voor een scenario van 1, 382, 400 baud (AT+BAUDC). De oplossing werkt niet voor andere baudrates. Raadpleeg de stappen vanaf stap 3 om andere gevallen af te handelen.

De oplossing is heel simpel.

  1. Sluit de VCC-pin van de HC-06 aan op de 5V-pin van Arduino.
  2. Verbind de GND-pin van de HC-06 met de GND-pin van Arduino.
  3. Sluit de RXD-pin van de HC-06 aan op pin 2 van Arduino.
  4. Laat de TXD-pin van de HC-06 niet aangesloten (of maak verbinding met pin 8).
  5. Upload hc06reset.ino schets.
  6. Het programma stelt de HC-06 in op 115, 200 baud-modus (AT+BAUD8).
  7. Gebruik uw herstelde HC-06-module zoals voorheen.

Stap 3: Achter de schermen…

Achter de schermen…
Achter de schermen…
Achter de schermen…
Achter de schermen…

De SoftwareSerial-bibliotheek die bij Arduino IDE wordt geleverd, kan maximaal 115.200 bits/seconde verzenden, dus het is niet snel genoeg om op de gewenste baudrate van 1, 382, 400 te communiceren. Aangezien een standaard Arduino-bord op 16 MHz draait, is de theoretische niet-gecomprimeerde maximale bitrate 16 000, 000 bits/sec. We zitten goed tot nu toe!

Gebaseerd op mijn begrip van SoftwareSerial.cpp, wordt de seial-communicatie gedaan door een output-pin High (=1) of Low (=0) in te stellen met betrekking tot een vertraging (die afkomstig is van de baudrate) tussen de wijzigingen.

  • De uitvoerpin is standaard hoog (betekent geen gegevens), dan
  • een startbit wordt verzonden (die de pin laag trekt), dan
  • 8 bits gegevens verzonden van LSB naar MSB, (+5V wanneer de bit 1 en 0 anders) dan
  • er wordt een stopbit verzonden (die de pin hoog trekt)

Op deze manier wordt 1 byte verzonden met 10 bits.

Het bericht dat we moeten sturen is AT+BAUD8 (zonder \n, \r aan het einde). Dit commando zet de HC-06 terug naar 115, 200 baudrate die door reguliere bibliotheken kan worden afgehandeld.

Om bits met een snelheid van 1, 382, 400 bits/sec te verzenden, hebben we voor elke bit 1/1, 382, 400 seconden tijd (dat is ongeveer 723,38 ns) voor elke bit. Arduino draait op 16 000 000 Mhz, dus elke cyclus duurt 1/16 000 000 seconden - dat is 62,5 ns per cyclus.

Met behulp van AVR-assemblagecode kunnen we het OUT-commando gebruiken om de uitvoerpin hoog of laag in te stellen en NOP om precies één CPU-cyclus te wachten. Beide commando's nemen precies 1 cpu-cyclus in beslag. Op deze manier kan de 723,38 ns bittijd worden gedekt door 11 tot 12 arduino-instructies per verzonden bit. Een ding om te overwegen: het OUT-commando stelt een hele byte in één keer in, dus we moeten een PORTx selecteren waar dit geen probleem is. Het gebruik van ATMEGA328P-PU bijvoorbeeld PORTD (arduino-pinnen 0-7) is perfect voor deze situatie. Na het instellen van de bit hoeft alleen de juiste tijd te verstrijken, wat wordt gedaan door 10 tot 11 NOP's en dat is alles.

Berekeningsdetails vindt u in onderstaand Excel-bestand. Dit bestand genereerde de vereiste montage-instructies voor het programma. Na het plakken van de gegenereerde code hoefden slechts enkele vervangingen te worden uitgevoerd.

Stap 4: Verdere lees-/verbeteringsmogelijkheden

  • Misschien kan een snellere SoftwareSerial-bibliotheek worden gemaakt met behulp van de techniek die in de vorige stap is beschreven.
  • FedericoK2 heeft een geweldige tool gemaakt die de HC-06 herstelcode genereert voor elke mogelijke bitrate. Ga hier naar de site: https://tools.krum.com.ar/save_your_hc-06/ Bedankt FedericoK2

Aanbevolen: