Sisukord:
2025 Autor: John Day | [email protected]. Viimati modifitseeritud: 2025-01-13 06:57
Puhtast maksimalismist konfigureerisin oma HC-06 Bluetooth (alam) mooduli edastuskiiruseks 1, 382, 400 baud käsuga AT+BAUDC. Sellest ajast peale, kui sellega ühendatud Arduino ei saanud moodulit SoftwareSeriali koguga kasutada. Üritasin edutult taastada edastuskiirust Arduino riistvara jadaseadmega (tihvtid 0 ja 1).
Proovisin ka teemat googeldada, leidmata vastuvõetavat lahendust. Võib -olla oleks võinud lahendus olla arvuti sisseehitatud jadapordi kasutamine (12V kuni 3V3 loogilise taseme nihutamisega), kuid minu arvutis pole seda vananenud porti, seega pidin välja pakkuma teise lahenduse.
Samm: mida vajate
- Arudino/Genuino plaat, millel on vaikimisi Atmel ATMEGA328P-PU MCU (@16MHz).
- HC-06 Bluetooth-moodul kuulab 1, 382, 400 baudiga
- Põhiline arduino IDE saidilt
2. samm: lahendus
Pange tähele, et see juhend ja lahendus on loodud 1, 382, 400 baudi (AT+BAUDC) stsenaariumi jaoks. Lahendus ei toimi muude baudikiiruste korral. Muude juhtumite käsitlemiseks vaadake samme alates 3. sammust.
Lahendus on tõesti lihtne.
- Ühendage HC-06 VCC tihvt 5 V Arduino kontaktiga.
- Ühendage HC-06 GND tihvt Arduino GND tihvtiga.
- Ühendage HC-06 RXD tihvt Arduino tihvtiga 2.
- Jätke HC-06 TXD-tihvt ühendamata (või ühendage tihvtiga 8).
- Laadige üles eskiis hc06reset.ino.
- Programm seab HC-06 režiimi 115, 200 baud (AT+BAUD8).
- Kasutage taastatud HC-06 moodulit nagu varem.
Samm: kulisside taga…
Arduino IDE -ga kaasas olev SoftwareSerial raamatukogu on võimeline edastama maksimaalselt 115, 200 bitti sekundis, seega ei ole see piisavalt kiire, et suhelda soovitud 1, 382, 400 -bitise kiirusega. Arvestades, et vaikimisi Arduino plaat töötab sagedusel 16 MHz, on teoreetiline tihendamata maksimaalne bitikiirus 16 000 000 bitti sekundis. Meil on siiani hea!
Tuginedes minu arusaamale SoftwareSerial.cpp -st, toimub pidev suhtlus, seades väljundpinge kõrgeks (= 1) või madalaks (= 0) seoses muudatuste vahelise viivitusega (mis tuleneb edastuskiirusest).
- Väljundnööp on vaikimisi kõrge (tähendab, et andmeid pole)
- a Edastatakse stardibitt (mis tõmbab tihvti madalale), seejärel
- 8 bitti andmeid, mis edastatakse LSB -lt MSB -le (+5 V, kui bit 1 ja 0 muidu)
- edastatakse stopp -bit (mis tõmbab tihvti kõrgele)
Sel viisil edastatakse 1 bait 10 bitti kasutades.
Sõnum, mille peame saatma, on AT+BAUD8 (ilma / n, lõpus r). See käsk seab HC-06 tagasi 115, 200-bitisele kiirusele, mida saavad hallata tavalised teegid.
Bittide saatmiseks kiirusega 1, 382, 400 bitti sekundis on iga biti jaoks iga biti jaoks 1/1, 382, 400 sekundit aega (see on ligikaudu 723,38 ns). Arduino töötab 16 000 000 MHz, seega kestab iga tsükkel 1/16 000 000 sekundit - see tähendab 62,5 ns tsükli kohta.
Kasutades AVR -i koostamiskoodi, saame kasutada käsku OUT, et seada väljundpinge kõrgeks või madalaks ja NOP oodata täpselt üht protsessoritsüklit. Mõlemad käsud söövad täpselt 1 protsessoritsükli. Nii saab 723,38 ns bitiaega katta 11–12 arduino käsuga edastatud biti kohta. Üks asi, mida tuleb arvestada: käsk OUT seab korraga terve baidi, seega peame valima PORTx -i, kus see pole probleem. Kasutades ATMEGA328P-PU, näiteks PORTD (arduino tihvtid 0-7), sobib selle olukorra jaoks ideaalselt. Pärast bitti seadistamist peab mööduma ainult õige aeg, mida teeb 10 kuni 11 NOP -d ja ongi kõik.
Arvutuse üksikasjad leiate allolevast Exceli failist. See fail genereeris programmi jaoks vajalikud juhised. Pärast loodud koodi kleepimist tuli teha vaid mõned asendused.
4. samm: täiendavad lugemis-/ täiustamisvõimalused
- Võib -olla saab SoftwareSeriali kiirema teegi teha, kasutades eelmises etapis kirjeldatud tehnikat.
- FedericoK2 tegi suurepärase tööriista, mis genereerib HC-06 taastamiskoodi iga võimaliku bitikiiruse jaoks. Juurdepääs saidile siin: https://tools.krum.com.ar/save_your_hc-06/ Aitäh FedericoK2