Turinys:
- 1 žingsnis: ko mums reikia?
- 2 žingsnis: aparatinės įrangos jungtys
- 3 žingsnis: „Python“programinė įranga
- 4 žingsnis: mikrovaldiklio programinė įranga
- 5 žingsnis: Išvada
Video: PIC MCU ir „Python“serijinis ryšys: 5 žingsniai
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:47
Sveiki bičiuliai! Šiame projekte bandysiu paaiškinti savo eksperimentus su PIC MCU ir „Python“serijiniu ryšiu. Internete yra daug vadovėlių ir vaizdo įrašų, kaip bendrauti su PIC MCU per virtualų terminalą, o tai yra labai naudinga. Tačiau mano pagrindiniame projekte vienas iš reikalavimų yra sukurti nuoseklųjį ryšį tarp PIC MCU ir „Python“, kurio neradau geros pamokos. Taigi, pradėkime:)
1 žingsnis: ko mums reikia?
Taigi, pirmiausia pažiūrėkime, ko mums reikia. Kalbant apie aparatūrą:
- Žinoma, PIC MCU, kuris mano atveju yra PIC16f877a (jums nereikia tos plokštės. Taip siekiama supaprastinti kai kuriuos nešvarius ryšius)
- USB į TTL keitiklis, skirtas bendrauti su PIC MCU per USB prievadą naudojant TX ir RX kaiščius.
- MCU programuotojas, kuris mano atveju yra K150 programuotojas, tačiau galite naudoti „PicKit 2“, „3“ar bet ką kitą.
- Ir pagaliau kompiuteris:)
Kalbant apie programinę įrangą:
- IDE, norint parašyti python kodą, kuris mano atveju yra Pycharm, tačiau taip pat galite naudoti įprastą Python IDE.
- MCU programavimo aplinka, kuri mano atveju yra MPLAB X IDE su CCS C kompiliatoriumi.
2 žingsnis: aparatinės įrangos jungtys
Paveikslėlyje pateikiamos prijungtos aparatūros jungtys, esančios tarp PIC MCU ir USB TTL keitiklio, kaip nurodyta toliau:
RC7 (RX) ------------- TXD
RC6 (TX) ------------- RXD
GND -------------- GND
Jums nereikia prijungti USB TTL keitiklio VCC kaiščio (tačiau, jei norite, galite tai padaryti). Šių 3 jungčių visiškai pakanka.
3 žingsnis: „Python“programinė įranga
Pradėkime rašyti programinę įrangą „Python“pusei, kuri mūsų atveju bus siųstuvas, nes ji nusiųs eilutę į MCU.
importuoti serijos #importo serijinę biblioteką a.koduoti ()) #siųsti duomenis
Pirmiausia importuojama serijinė biblioteka, kad būtų galima naudoti jos ateities sandorius. Norime atsiųsti eilutės duomenų pavyzdį, kad patvirtintume MCU kodu, kad juos priėmėme. Čia noriu atkreipti dėmesį į vieną dalyką. Štai kodėl prie eilutės pridėjome „\ 0“. Taip yra todėl, kad MCU pusėje neįmanoma visiškai perskaityti eilutės. Tai skaitoma po simbolio. Taigi, norėdami nustoti skaityti, norime žinoti eilutės pabaigą. Taigi, prie eilutės, kuri nurodo eilutės pabaigą, pridedame „\ 0“. Tada mes prisijungiame prie prievado, kuris yra prijungtas prie MCU. Šį prievadą galite nustatyti ieškodami „Įrenginių tvarkytuvėje“. Taigi būkite atsargūs, kad esate tame pačiame uoste. Galų gale, mes siunčiame duomenis į MCU. Prie eilutės duomenų reikia pridėti „.encode ()“, kad būtų galima juos nusiųsti imtuvui.
4 žingsnis: mikrovaldiklio programinė įranga
Taigi, pažiūrėkime mūsų MCU kodą. Pirmiausia noriu parodyti „config.h“failą, kurio nereikia, bet aš tai padariau paprastumo dėlei. Čia tiesiog pakeiskite savo MCU dažnį.
#ifndef CONFIG_H#apibrėžti CONFIG_H
#įtraukti
#prietaiso ADC = 16
#FUSES NOWDT // Nėra laikrodžio šuns laikmačio
#FUSES NOBROWNOUT // Nėra „Brownout“atstatymo
#naudojimo uždelsimas (kristalas = 6000000)
Dabar pažiūrėkime pagrindinį kodą:
#įtraukti
#įtraukti
#use rs232 (baud = 9600, xmit = pin_C6, rcv = pin_C7, paritetas = N, stop = 1)
#define LED_RED PIN_D0
char inp; char cmp _ = "24"; anglies buferis [3];
#int_rda
void serial_communication_interrupt () {disable_interrupts (int_rda); nepasirašytas int i = 0; inp = getc (); putc (inp); while (inp! = '\ 0') {buferis = inp; inp = getc (); putc (inp); i ++; }}
void main (void) {
set_tris_d (0x00); output_d (0xFF); enable_interrupts (GLOBAL); nors (1) {enable_interrupts (int_rda); if (strcmp (buferis, cmp_) == 0) output_low (LED_RED); else output_high (LED_RED); }}
Pradžioje įtraukiame stygų biblioteką, kuri mums bus naudinga atliekant eilutės operacijas, kurios mūsų atveju yra eilutės palyginimo operacija (strcmp). Taigi, mūsų tikslas šiame kode yra įjungti šviesos diodą, prijungtą prie kaiščio D0, jei perduodama vertė yra tokia pati kaip mūsų nurodyta vertė, kuri yra „cmp_“lygi „24“.
Pirmiausia įjungiame „rda“pertraukimą, dėl kurio bus nutrauktas duomenų perdavimas.
Antra, pažvelkime į ISR (pertraukimo paslaugų rutiną), kuri vadinama „serial_communication_interrupt“. Viduje pirmiausia išjungiame pertraukimo vėliavą, kad galėtume perskaityti gautą vertę ir sukelti pertrauką toliau. Po to skaitome eilutę po simbolio, kol pasieksime „\ 0“. Skaitydami eilutės vidų, mes taip pat įrašome kiekvieną simbolį į buferį, kad gautume gautą eilutę.
Pabaigoje vėl įeiname į vidų. Čia palyginame buferinę eilutę, kuri yra gauta, ir cmp_ eilutę, kad pamatytume, ar teisingai gauname eilutę. Jei jie yra lygūs, įjungiu šviesos diodą, kitu atveju išjungiu.*
*Kode aš padariau atvirkštinį, nes mano lenta apverčia D prievado kaiščio vertes. Pakeiskite kodą į:
if (strcmp (buferis, cmp_) == 0) output_high (LED_RED); else output_low (LED_RED);
Galiausiai sukompiliuokite jį ir įkelkite į savo MCU, tada paleiskite kodą „Python“. Turėtumėte matyti, kaip įjungtas šviesos diodas.
5 žingsnis: Išvada
Vieną užduotį sėkmingai baigėme. Tikiuosi, kad tai jums bus naudinga. Jei turite klausimų, nedvejodami klauskite:) Iki kito projekto.
Rekomenduojamas:
„Arduino“serijinis ryšys: 5 žingsniai
„Arduino“serijinis ryšys: Daugelis „Arduino“projektų remiasi duomenų perdavimu tarp kelių „Arduinos“. Nesvarbu, ar esate mėgėjas, kuriantis RC automobilį, RC lėktuvą, ar kuriantis orų stotį su nuotoliniu ekranu, turėsite žinoti, kaip patikimai perkelti seriją
„Arduino“ir „Python“serijinis ryšys - klaviatūros ekranas: 4 žingsniai
„Arduino“ir „Python“serijinis ryšys - klaviatūros ekranas: Šis projektas skirtas „Mac“vartotojams, tačiau jis taip pat gali būti įgyvendintas „Linux“ir „Windows“, vienintelis žingsnis, kuris turėtų skirtis, yra diegimas
Belaidis serijinis ryšys naudojant „Bluefruit“: 4 žingsniai
Belaidis nuoseklusis ryšys naudojant „Bluefruit“: čia yra paprastas žingsnis po žingsnio vadovas, kaip pakeisti laidus „Bluetooth“mažai energijos naudojančiu ryšiu: man prireikė šiek tiek laiko, kol tai išsiaiškinau, nes vargu ar yra kokių nors dokumentų, kaip tai padaryti naudojant šiuolaikines „Bluetooth“mažos energijos technologijas, tokias kaip kaip Bluefrui
Serijinis ryšys naudojant ARM Cortex-M4: 4 žingsniai
Serijinis ryšys naudojant ARM Cortex-M4: Tai yra duonos lentos projektas, kuriame naudojamas ARM Cortex-M4 („Texas Instruments EK-TM4C123GXL“) nuosekliam ryšiui naudojant virtualų terminalą. Išvestį galima gauti 16x2 skystųjų kristalų ekrane, o įvestį nuosekliam ryšiui galima pateikti serijiniu Mo
Prieigos taškas - stoties ryšys tarp dviejų ESP8266 MCU: 3 žingsniai
Prieigos taškas - stoties ryšys tarp dviejų ESP8266 MCU: Sveiki kūrėjai! Ankstesniame nurodyme aš sukūriau „WiFi“ryšį tarp dviejų ESP8266 MCU per namų „WiFi“maršrutizatorių. Kaip mačiau iš komentarų, yra kūrėjų, kurie norėtų naudoti ESP8266 MCU toli nuo maršrutizatoriaus diapazono. Taigi čia yra baras