Spisu treści:

Odzyskaj źle skonfigurowany moduł Bluetooth HC-06: 4 kroki
Odzyskaj źle skonfigurowany moduł Bluetooth HC-06: 4 kroki

Wideo: Odzyskaj źle skonfigurowany moduł Bluetooth HC-06: 4 kroki

Wideo: Odzyskaj źle skonfigurowany moduł Bluetooth HC-06: 4 kroki
Wideo: Jak odzyskać kod do Radia każdej marki za darmo !!! 2024, Listopad
Anonim
Odzyskaj nieprawidłowo skonfigurowany moduł Bluetooth HC-06
Odzyskaj nieprawidłowo skonfigurowany moduł Bluetooth HC-06

Z czystego maksymalizmu skonfigurowałem mój moduł Bluetooth HC-06 (slave) na szybkość transmisji 1,382,400 bodów za pomocą polecenia AT + BAUDC. Odkąd Arduino do niego podłączone nie było w stanie korzystać z modułu z biblioteką SoftwareSerial. Próbowałem przywrócić szybkość transmisji za pomocą szeregowego sprzętu Arduino (piny 0 i 1) bez powodzenia.

Próbowałem też wygooglować temat bez znalezienia zadowalającego rozwiązania. Być może rozwiązaniem byłoby użycie wbudowanego portu szeregowego komputera (z przełączaniem poziomów logicznych 12V na 3V3), ale mój komputer nie ma tego przestarzałego portu, więc musiałem wymyślić inne rozwiązanie.

Krok 1: Czego będziesz potrzebować

Czego będziesz potrzebować
Czego będziesz potrzebować
  • Płyta Arudino/Genuino z domyślnym mikrokontrolerem Atmel ATMEGA328P-PU (@16MHz).
  • Moduł Bluetooth HC-06 nasłuchujący na 1,382,400 bodach
  • Podstawowe IDE arduino z

Krok 2: Rozwiązanie

Rozwiązanie
Rozwiązanie
Rozwiązanie
Rozwiązanie

Należy pamiętać, że ta instrukcja i rozwiązanie jest przeznaczone dla scenariusza 1,382,400 bodów (AT + BAUDC). Rozwiązanie nie będzie działać dla innych szybkości transmisji. Aby poradzić sobie z innymi przypadkami, zapoznaj się z krokami zaczynając od kroku 3.

Rozwiązanie jest naprawdę proste.

  1. Podłącz pin VCC HC-06 do pinu 5V Arduino.
  2. Połącz pin GND HC-06 z pinem GND Arduino.
  3. Podłącz pin RXD HC-06 do pinu 2 Arduino.
  4. Pozostaw pin TXD HC-06 niepodłączony (lub podłącz do pinu 8).
  5. Prześlij szkic hc06reset.ino.
  6. Program ustawi HC-06 w tryb 115, 200 bodów (AT+BAUD8).
  7. Użyj odzyskanego modułu HC-06 jak poprzednio.

Krok 3: Za kulisami…

Za kulisami…
Za kulisami…
Za kulisami…
Za kulisami…

Biblioteka SoftwareSerial dostarczana z Arduino IDE jest w stanie przesyłać maksymalnie 115, 200 bitów na sekundę, więc nie jest wystarczająco szybka, aby komunikować się z pożądaną szybkością 1,382, 400 bodów. Biorąc pod uwagę, że domyślna płyta Arduino działa na 16 MHz, teoretyczna maksymalna nieskompresowana przepływność wynosi 16 000 000 bitów na sekundę. Jak dotąd jesteśmy dobrzy!

Opierając się na moim zrozumieniu SoftwareSerial.cpp, komunikacja seial odbywa się poprzez ustawienie pinu wyjściowego High (=1) lub Low (=0) w odniesieniu do opóźnienia (wynikającego z szybkości transmisji) między zmianami.

  • Pin wyjściowy jest domyślnie wysoki (oznacza brak danych), a następnie
  • bit startowy jest przesyłany (co obniża pin), a następnie
  • 8 bitów danych przesyłanych z LSB do MSB (+5V gdy bit 1 i 0 inaczej) wtedy
  • przesyłany jest bit stopu (który podnosi pin w górę)

W ten sposób 1 bajt jest przesyłany za pomocą 10 bitów.

Wiadomość, którą musimy wysłać, to AT+BAUD8 (bez \n, \r na końcu). To polecenie ustawia HC-06 z powrotem na 115, 200 bodów, które mogą być obsługiwane przez zwykłe biblioteki.

Aby wysłać bity z prędkością 1,382,400 bitów/s, na każdy bit mamy czas 1/1,382,400 sekund (czyli w przybliżeniu 723,38 ns) na każdy bit. Arduino działa na 16 000 000 MHz, więc każdy cykl trwa 1/16 000 000 sekund - czyli 62,5 ns na cykl.

Używając kodu asemblera AVR, możemy użyć polecenia OUT, aby ustawić pin wyjściowy na wysoki lub niski, a NOP, aby odczekać dokładnie jeden cykl procesora. Obie komendy pochłaniają dokładnie 1 cykl procesora. W ten sposób czas bitowy 723,38 ns może być pokryty przez 11 do 12 instrukcji arduino na transmitowany bit. Jedna rzecz do rozważenia: polecenie OUT ustawia cały bajt na raz, więc musimy wybrać PORTx, gdzie nie stanowi to problemu. Zastosowanie ATMEGA328P-PU na przykład PORTD (piny arduino 0-7) jest idealne do tego stanu. Po ustawieniu bitu musi upłynąć tylko odpowiedni czas, który jest wykonywany od 10 do 11 NOP-ów i tyle.

Szczegóły obliczeń znajdziesz w pliku Excel poniżej. Ten plik wygenerował wymagane instrukcje montażu dla programu. Wystarczyło tylko kilka podmian po wklejeniu wygenerowanego kodu.

Krok 4: Dalsze czytanie/Możliwości doskonalenia

  • Być może można stworzyć szybszą bibliotekę SoftwareSerial przy użyciu techniki opisanej w poprzednim kroku.
  • FedericoK2 stworzył świetne narzędzie, które generuje kod odzyskiwania HC-06 dla każdego możliwego bitrate. Wejdź na stronę tutaj: https://tools.krum.com.ar/save_your_hc-06/ Dziękuję FedericoK2

Zalecana: