Sisällysluettelo:
2025 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2025-01-13 06:57
Puhtaasta maksimalismista johtuen määritin HC-06 Bluetooth (slave) -moduulini siirtonopeudeksi 1, 382, 400 baudia AT+BAUDC-komennolla. Siitä lähtien, kun siihen liitetty Arduino ei voinut käyttää moduulia SoftwareSerial -kirjaston kanssa. Yritin palauttaa baudinopeuden Arduinon laitteistosarjalla (nastat 0 ja 1) ilman onnea.
Yritin myös googlettaa aiheen löytämättä hyväksyttävää ratkaisua. Ehkä tietokoneen sisäänrakennetun sarjaportin käyttäminen olisi voinut olla ratkaisu (12V - 3V3 loogisen tason siirto), mutta tietokoneessani ei ole tätä vanhentunutta porttia, joten minun piti keksiä toinen ratkaisu.
Vaihe 1: Mitä tarvitset
- Arudino/Genuino -kortti, jossa on oletusarvoinen Atmel ATMEGA328P-PU MCU (@16MHz).
- HC-06 Bluetooth-moduuli kuuntelee 1, 382, 400 baudia
- Perus arduino IDE osoitteesta
Vaihe 2: Ratkaisu
Huomaa, että tämä ohje ja ratkaisu on tehty 1, 382, 400 baudin (AT+BAUDC) skenaarioon. Ratkaisu ei toimi muilla tiedonsiirtonopeuksilla. Jos haluat käsitellä muita tapauksia, katso vaiheesta 3 alkavat vaiheet.
Ratkaisu on todella yksinkertainen.
- Liitä HC-06: n VCC-nasta 5 V: n Arduinon napaan.
- Liitä HC-06: n GND-nasta Arduinon GND-nastaan.
- Liitä HC-06: n RXD-nasta Arduinon nastaan 2.
- Jätä HC-06: n TXD-nasta kytkemättä (tai liitä nastaan 8).
- Lataa hc06reset.ino -luonnos.
- Ohjelma asettaa HC-06: n 115, 200 baudin tilaan (AT+BAUD8).
- Käytä palautettua HC-06-moduulia kuten ennenkin.
Vaihe 3: Kulissien takana…
Arduino IDE: n mukana toimitettu SoftwareSerial -kirjasto pystyy lähettämään enintään 115 200 bittiä sekunnissa, joten se ei ole tarpeeksi nopea kommunikoimaan halutulla 1, 382, 400 baudin nopeudella. Koska oletusarvoinen Arduino -kortti toimii 16 MHz: llä, teoreettinen pakkaamaton maksimi bittinopeus on 16 000 000 bittiä sekunnissa. Meillä on toistaiseksi hyvä!
SoftwareSerial.cpp -käsitykseni mukaan sarjaviestintä tapahtuu asettamalla lähtönastaksi Korkea (= 1) tai Matala (= 0) suhteessa viiveeseen (joka johtuu siirtonopeudesta) muutosten välillä.
- Lähtötappi on oletusarvoisesti korkea (eli ei dataa)
- a Aloitusbitti lähetetään (joka vetää tapin matalalle) ja sitten
- 8 bittiä dataa, joka lähetetään LSB: ltä MSB: lle, (+5 V, kun bitti 1 ja 0 muuten)
- a Stop -bitti lähetetään (joka vetää tapin korkealle)
Tällä tavalla 1 tavu lähetetään käyttämällä 10 bittiä.
Meidän on lähetettävä viesti AT+BAUD8 (ilman / n, lopussa). Tämä komento asettaa HC-06: n takaisin 115, 200 baudinopeuteen, jota tavalliset kirjastot voivat käsitellä.
Jotta voidaan lähettää bittejä nopeudella 1, 382, 400 bittiä sekunnissa, kullakin bitillä on 1/1, 382, 400 sekunnin aika (eli suunnilleen 723,38 ns) kullekin bitille. Arduino toimii 16 000 000 MHz: llä, joten jokainen sykli kestää 1/16 000 000 sekuntia - eli 62,5 ns jaksoa kohden.
Käyttämällä AVR -kokoonpanokoodia voimme käyttää OUT -komentoa asettaaksesi lähtönastan korkealle tai matalalle ja NOP odottamaan täsmälleen yhden suoritusjakson. Molemmat komennot syövät täsmälleen yhden suoritusjakson. Tällä tavoin 723,38 ns bittiaika voidaan kattaa 11-12 arduino -käskyä lähetettyä bittiä kohti. Yksi asia on otettava huomioon: OUT -komento asettaa koko tavun kerralla, joten meidän on valittava PORTx, jossa tämä ei ole ongelma. Esimerkiksi ATMEGA328P-PU: n käyttö PORTD (arduino-nastat 0-7) on täydellinen tähän tilanteeseen. Bitin asettamisen jälkeen on kuluttava vain oikea aika, joka suoritetaan 10–11 NOP: lla ja se on siinä.
Löydät laskutustiedot alla olevasta Excel -tiedostosta. Tämä tiedosto loi ohjelmalle tarvittavat asennusohjeet. Vain muutama vaihto oli tehtävä luodun koodin liittämisen jälkeen.
Vaihe 4: Mahdollisia lisäkäsittely-/ parantamismahdollisuuksia
- Ehkä nopeampi SoftwareSerial -kirjasto voidaan tehdä käyttämällä edellisessä vaiheessa kuvattua tekniikkaa.
- FedericoK2 loi suuren työkalun, joka luo HC-06-palautuskoodin jokaiselle mahdolliselle bittinopeudelle. Siirry sivustoon täältä: https://tools.krum.com.ar/save_your_hc-06/ Kiitos FedericoK2