Cuprins:

Recuperați modulul HC-06 Bluetooth neconfigurat: 4 pași
Recuperați modulul HC-06 Bluetooth neconfigurat: 4 pași

Video: Recuperați modulul HC-06 Bluetooth neconfigurat: 4 pași

Video: Recuperați modulul HC-06 Bluetooth neconfigurat: 4 pași
Video: LDmicro 20: I2C Liquid Crystal Display Resolved(Microcontroller PLC Ladder Programming with LDmicro) 2024, Iulie
Anonim
Recuperați modulul HC-06 Bluetooth neconfigurat
Recuperați modulul HC-06 Bluetooth neconfigurat

Din pur maximism, mi-am configurat modulul HC-06 Bluetooth (slave) la o rată de baud de 1, 382, 400 baud cu comanda AT + BAUDC. De când Arduino s-a conectat la acesta nu a mai putut utiliza modulul cu biblioteca SoftwareSerial. Am încercat să restabilesc rata de transmisie cu serialul hardware al lui Arduino (pinii 0 și 1) fără noroc.

De asemenea, am încercat să Google subiectul fără să găsesc o soluție acceptabilă. Poate că folosirea unui port serial încorporat al unui computer ar fi putut fi o soluție (cu schimbarea nivelului logic de 12V la 3V3), dar computerul meu nu are acest port învechit, așa că a trebuit să vin cu o altă soluție.

Pasul 1: De ce veți avea nevoie

Ce vei avea nevoie
Ce vei avea nevoie
  • Placă Arudino / Genuino cu MCU Atmel ATMEGA328P-PU implicit (@ 16MHz).
  • Un modul HC-06 Bluetooth care ascultă pe 1, 382, 400 baud
  • IDE de bază arduino de la

Pasul 2: Soluția

Soluția
Soluția
Soluția
Soluția

Vă rugăm să rețineți că acest instructabil și soluția sunt făcute pentru scenariul de 1, 382, 400 baud (AT + BAUDC). Soluția nu va funcționa pentru alte rate de transmisie. Pentru a gestiona alte cazuri, vă rugăm să consultați pașii care încep de la Pasul 3.

Soluția este foarte simplă.

  1. Conectați pinul VCC al HC-06 la pinul 5V al Arduino.
  2. Conectați pinul GND al HC-06 la pinul GND al Arduino.
  3. Conectați pinul RXD al lui HC-06 la pinul 2 al Arduino.
  4. Lăsați pinul TXD HC-06 neconectat (sau conectați-l la pinul 8).
  5. Încărcați schița hc06reset.ino.
  6. Programul va seta HC-06 în modul 115, 200 baud (AT + BAUD8).
  7. Utilizați modulul HC-06 recuperat ca înainte.

Pasul 3: În culise …

În spatele scenelor…
În spatele scenelor…
În spatele scenelor…
În spatele scenelor…

Biblioteca SoftwareSerial care vine cu Arduino IDE este capabilă să transmită cel mult 115, 200 de biți / secundă, deci nu este suficient de rapidă pentru a comunica pe rata de 1, 382, 400 baud dorită. Având în vedere că o placă Arduino implicită rulează pe 16 MHz, rata de biți maximă teoretică necomprimată este de 16, 000, 000 biți / sec. Suntem buni până acum!

Pe baza înțelegerii mele despre SoftwareSerial.cpp, comunicarea seial se face prin setarea unui pin de ieșire High (= 1) sau Low (= 0) în ceea ce privește o întârziere (care provine din rata de transmisie) între modificări.

  • Pinul de ieșire este ridicat în mod implicit (înseamnă că nu există date)
  • se transmite un bit Start (care trage pinul jos), apoi
  • 8 biți de date transmise de la LSB la MSB, (+ 5V când bitul 1 și 0 altfel) atunci
  • se transmite un bit de oprire (care trage știftul în sus)

În acest fel, 1 octet este transmis folosind 10 biți.

Mesajul pe care trebuie să-l trimitem este AT + BAUD8 (fără / n, / r la final). Această comandă setează HC-06 înapoi la 115, 200 baud rate care pot fi gestionate de bibliotecile obișnuite.

Pentru a trimite biți cu viteză de 1, 382, 400 biți / sec, pentru fiecare bit avem timp de 1/1, 382, 400 secunde (adică aproximativ 723,38 ns) pentru fiecare bit. Arduino rulează pe 16 000 000 Mhz, deci fiecare ciclu durează 1/16 000 000 secunde - adică 62,5 ns pe ciclu.

Folosind codul de asamblare AVR putem folosi comanda OUT pentru a seta pinul de ieșire ridicat sau scăzut și NOP pentru a aștepta exact un ciclu CPU. Ambele comenzi consumă exact 1 ciclu de procesor. În acest fel, timpul de 723,38 ns bit poate fi acoperit de 11 până la 12 instrucțiuni arduino pe fiecare bit transmis. Un lucru de luat în considerare: comanda OUT setează un întreg octet simultan, deci trebuie să selectăm un PORTx în cazul în care aceasta nu este o problemă. Utilizarea ATMEGA328P-PU de exemplu PORTD (pinii arduino 0-7) este perfectă pentru această condiție. După setarea bitului, trebuie să treacă doar timpul adecvat, ceea ce se face de la 10 la 11 NOP-uri și atât.

Puteți găsi detalii de calcul în fișierul Excel de mai jos. Acest fișier a generat instrucțiunile necesare adunării pentru program. Doar câteva înlocuiri trebuiau făcute după lipirea codului generat.

Pasul 4: Posibilități suplimentare de lectură / îmbunătățire

  • Poate că o bibliotecă SoftwareSerial mai rapidă poate fi realizată utilizând tehnica descrisă în pasul anterior.
  • FedericoK2 a făcut un instrument excelent care generează codul de recuperare HC-06 pentru fiecare bitrate posibil. Accesați site-ul aici: https://tools.krum.com.ar/save_your_hc-06/ Mulțumesc FedericoK2

Recomandat: