Inhaltsverzeichnis:

Wiederherstellen eines falsch konfigurierten HC-06 Bluetooth-Moduls - Gunook
Wiederherstellen eines falsch konfigurierten HC-06 Bluetooth-Moduls - Gunook

Video: Wiederherstellen eines falsch konfigurierten HC-06 Bluetooth-Moduls - Gunook

Video: Wiederherstellen eines falsch konfigurierten HC-06 Bluetooth-Moduls - Gunook
Video: LDmicro 13: HC-05 Управление через приложение Bluetooth для телефона (программирование ПЛК микроконтроллера с помощью LDmicro) 2024, Juli
Anonim
Wiederherstellen eines falsch konfigurierten HC-06 Bluetooth-Moduls
Wiederherstellen eines falsch konfigurierten HC-06 Bluetooth-Moduls

Aus purem Maximalismus habe ich mein HC-06 Bluetooth (Slave) Modul mit dem AT+BAUDC Befehl auf eine Baudrate von 1.382.400 Baud konfiguriert. Seitdem das daran angeschlossene Arduino das Modul nicht mit der SoftwareSerial-Bibliothek verwenden konnte. Ich habe versucht, die Baudrate mit Arduinos serieller Hardware (Pins 0 und 1) ohne Glück wiederherzustellen.

Ich habe auch versucht, das Thema zu googeln, ohne eine passable Lösung zu finden. Vielleicht hätte die Verwendung des eingebauten seriellen Ports eines Computers eine Lösung sein können (mit 12V zu 3V3-Logikpegelverschiebung), aber mein Computer hat diesen veralteten Port nicht, also musste ich eine andere Lösung finden.

Schritt 1: Was Sie brauchen

Was wirst du brauchen
Was wirst du brauchen
  • Arudino/Genuino-Board mit der standardmäßigen Atmel ATMEGA328P-PU-MCU (@16MHz).
  • Ein HC-06 Bluetooth-Modul, das auf 1.382.400 Baud. hört
  • Grundlegende Arduino-IDE von

Schritt 2: Die Lösung

Die Lösung
Die Lösung
Die Lösung
Die Lösung

Bitte beachten Sie, dass dieses Instructable und die Lösung für ein Szenario mit 1, 382, 400 Baud (AT + BAUDC) erstellt wurden. Für andere Baudraten funktioniert die Lösung nicht. Um andere Fälle zu behandeln, lesen Sie bitte die Schritte ab Schritt 3.

Die Lösung ist wirklich einfach.

  1. Verbinden Sie den VCC-Pin des HC-06 mit dem 5V-Pin von Arduino.
  2. Verbinden Sie den GND-Pin des HC-06 mit dem GND-Pin von Arduino.
  3. Verbinden Sie den RXD-Pin des HC-06 mit Pin 2 von Arduino.
  4. Lassen Sie den TXD-Pin des HC-06 unbeschaltet (oder verbinden Sie ihn mit Pin 8).
  5. Laden Sie die hc06reset.ino-Skizze hoch.
  6. Das Programm setzt den HC-06 in den 115, 200 Baud Modus (AT+BAUD8).
  7. Verwenden Sie Ihr wiederhergestelltes HC-06-Modul wie zuvor.

Schritt 3: Hinter den Kulissen…

Hinter den Kulissen…
Hinter den Kulissen…
Hinter den Kulissen…
Hinter den Kulissen…

Die mit Arduino IDE gelieferte SoftwareSerial-Bibliothek kann maximal 115.200 Bit/Sekunde übertragen, ist also nicht schnell genug, um mit der gewünschten Baudrate von 1.382.400 zu kommunizieren. Angesichts der Tatsache, dass ein Standard-Arduino-Board mit 16 MHz läuft, beträgt die theoretische unkomprimierte maximale Bitrate 16.000.000 Bit/s. Uns geht es soweit gut!

Basierend auf meinem Verständnis von SoftwareSerial.cpp erfolgt die seial-Kommunikation durch Setzen eines Ausgangspins auf High (=1) oder Low (=0) in Bezug auf eine Verzögerung (die von der Baudrate kommt) zwischen den Änderungen.

  • Der Ausgangspin ist standardmäßig hoch (bedeutet keine Daten), dann
  • ein Startbit wird übertragen (was den Pin auf Low zieht), dann
  • 8 Bit Daten übertragen von LSB zu MSB, (+5V wenn Bit 1 und sonst 0) dann
  • ein Stopbit wird übertragen (was den Pin hoch zieht)

Auf diese Weise wird 1 Byte mit 10 Bit übertragen.

Die Nachricht, die wir senden müssen, ist AT+BAUD8 (ohne \n, \r am Ende). Dieser Befehl setzt den HC-06 auf 115, 200 Baudrate zurück, die von regulären Bibliotheken verarbeitet werden kann.

Um Bits mit einer Geschwindigkeit von 1, 382, 400 Bit/s zu senden, haben wir für jedes Bit 1/1, 382, 400 Sekunden Zeit (das sind ungefähr 723,38 ns) für jedes Bit. Arduino läuft mit 16 000 000 Mhz, so dass jeder Zyklus 1/16 000 000 Sekunden dauert - das sind 62,5 ns pro Zyklus.

Mit dem AVR-Assembly-Code können wir den OUT-Befehl verwenden, um den Ausgangspin auf High oder Low zu setzen und NOP, um genau einen CPU-Zyklus zu warten. Beide Befehle verbrauchen genau 1 CPU-Zyklus. Auf diese Weise kann die Bitzeit von 723,38 ns durch 11 bis 12 Arduino-Befehle pro übertragenem Bit abgedeckt werden. Eines ist zu beachten: Der OUT-Befehl setzt ein ganzes Byte auf einmal, daher müssen wir einen PORTx auswählen, bei dem dies kein Problem darstellt. Die Verwendung von ATMEGA328P-PU zum Beispiel PORTD (Arduino Pins 0-7) ist für diese Bedingung perfekt. Nach dem Setzen des Bits muss nur noch die richtige Zeit verstreichen, die von 10 bis 11 NOPs erledigt wird und das war's.

Berechnungsdetails finden Sie in der folgenden Excel-Datei. Diese Datei generierte die erforderlichen Montageanweisungen für das Programm. Nach dem Einfügen des generierten Codes mussten nur wenige Ersetzungen vorgenommen werden.

Schritt 4: Weiterführende Lektüre/Verbesserungsmöglichkeiten

  • Vielleicht kann eine schnellere SoftwareSerial-Bibliothek erstellt werden, indem die im vorherigen Schritt beschriebene Technik verwendet wird.
  • FedericoK2 hat ein großartiges Tool entwickelt, das den HC-06-Wiederherstellungscode für jede mögliche Bitrate generiert. Greifen Sie hier auf die Website zu: https://tools.krum.com.ar/save_your_hc-06/ Danke FedericoK2

Empfohlen: