Sommario:

Recuperare il modulo Bluetooth HC-06 configurato in modo errato: 4 passaggi
Recuperare il modulo Bluetooth HC-06 configurato in modo errato: 4 passaggi

Video: Recuperare il modulo Bluetooth HC-06 configurato in modo errato: 4 passaggi

Video: Recuperare il modulo Bluetooth HC-06 configurato in modo errato: 4 passaggi
Video: Router CNC from scratch - Software part 3: Bluetooth 2024, Novembre
Anonim
Recupera il modulo Bluetooth HC-06 configurato in modo errato
Recupera il modulo Bluetooth HC-06 configurato in modo errato

Per puro massimalismo, ho configurato il mio modulo Bluetooth (slave) HC-06 su una velocità di trasmissione di 1, 382, 400 baud con il comando AT+BAUDC. Da quando l'Arduino connesso ad esso non è stato in grado di utilizzare il modulo con la libreria SoftwareSerial. Ho provato a ripristinare la velocità di trasmissione con il seriale hardware di Arduino (pin 0 e 1) senza fortuna.

Ho anche provato a Google l'argomento senza trovare una soluzione accettabile. Forse usare la porta seriale integrata di un computer avrebbe potuto essere una soluzione (con lo spostamento del livello logico da 12V a 3V3), ma il mio computer non ha questa porta obsoleta, quindi ho dovuto trovare un'altra soluzione.

Passaggio 1: cosa ti servirà

Cosa ti servirà
Cosa ti servirà
  • Scheda Arudino/Genuino con l'MCU Atmel ATMEGA328P-PU predefinito (@16MHz).
  • Un modulo Bluetooth HC-06 in ascolto su 1, 382, 400 baud
  • IDE arduino di base da

Passaggio 2: la soluzione

La soluzione
La soluzione
La soluzione
La soluzione

Si noti che questo Instructable e la soluzione sono realizzati per uno scenario da 1, 382, 400 baud (AT+BAUDC). La soluzione non funzionerà per nessun altro baud rate. Per gestire altri casi, fare riferimento ai passaggi a partire dal passaggio 3.

La soluzione è davvero semplice.

  1. Collega il pin VCC di HC-06 al pin 5V di Arduino.
  2. Collega il pin GND di HC-06 al pin GND di Arduino.
  3. Collega il pin RXD di HC-06 al pin 2 di Arduino.
  4. Lasciare scollegato il pin TXD dell'HC-06 (o collegarlo al pin 8).
  5. Carica lo schizzo hc06reset.ino.
  6. Il programma imposterà HC-06 in modalità 115, 200 baud (AT+BAUD8).
  7. Usa il tuo modulo HC-06 recuperato come prima.

Passaggio 3: dietro le quinte…

Dietro le quinte…
Dietro le quinte…
Dietro le quinte…
Dietro le quinte…

La libreria SoftwareSerial fornita con Arduino IDE è in grado di trasmettere al massimo 115, 200 bit/secondo, quindi non è abbastanza veloce per comunicare con la velocità di 1, 382, 400 baud desiderata. Dato che una scheda Arduino predefinita funziona a 16 MHz, il bitrate massimo teorico non compresso è di 16.000.000 bit/sec. Siamo a posto finora!

In base alla mia comprensione di SoftwareSerial.cpp, la comunicazione seial viene eseguita impostando un pin di uscita High (=1) o Low (=0) rispetto a un ritardo (che deriva dalla velocità di trasmissione) tra le modifiche.

  • Il pin di uscita è alto per impostazione predefinita (significa nessun dato), quindi
  • viene trasmesso un bit di Start (che abbassa il pin), quindi
  • 8 bit di dati trasmessi da LSB a MSB, (+5V quando il bit 1 e 0 altrimenti) quindi
  • viene trasmesso uno Stop bit (che porta il pin in alto)

In questo modo viene trasmesso 1 byte utilizzando 10 bit.

Il messaggio che dobbiamo inviare è AT+BAUD8 (senza \n, \r alla fine). Questo comando riporta l'HC-06 a 115, 200 baud rate che può essere gestito dalle normali librerie.

Per inviare bit con velocità 1, 382, 400 bit/sec, per ogni bit abbiamo un tempo di 1/1, 382, 400 secondi (che è circa 723,38 ns) per ogni bit. Arduino funziona su 16.000.000 Mhz, quindi ogni ciclo dura 1/16.000.000 secondi, ovvero 62,5 ns per ciclo.

Usando il codice assembly AVR possiamo usare il comando OUT per impostare il pin di uscita alto o basso e NOP per aspettare esattamente un ciclo della CPU. Entrambi i comandi consumano esattamente 1 ciclo di CPU. In questo modo il tempo di 723.38 ns bit può essere coperto da 11-12 istruzioni arduino per bit trasmesso. Una cosa da considerare: il comando OUT imposta un intero byte in una volta, quindi dobbiamo selezionare una PORTx dove questo non è un problema. L'utilizzo di ATMEGA328P-PU ad esempio PORTD (pin 0-7) di Arduino è perfetto per questa condizione. Dopo aver impostato il bit, deve trascorrere solo il tempo corretto che viene eseguito da 10 a 11 NOP e il gioco è fatto.

Puoi trovare i dettagli di calcolo nel file Excel sottostante. Questo file ha generato le istruzioni di montaggio richieste per il programma. Dopo aver incollato il codice generato, è stato necessario effettuare solo alcune sostituzioni.

Passaggio 4: ulteriori possibilità di lettura/miglioramento

  • Forse è possibile creare una libreria SoftwareSerial più veloce utilizzando la tecnica descritta nel passaggio precedente.
  • FedericoK2 ha realizzato un ottimo strumento che genera il codice di ripristino HC-06 per ogni possibile bitrate. Accedi al sito qui: https://tools.krum.com.ar/save_your_hc-06/ Grazie FedericoK2

Consigliato: