Kazalo:
- 1. korak: Kaj potrebujemo?
- 2. korak: Povezave strojne opreme
- 3. korak: programska oprema Python
- 4. korak: Programska oprema za mikrokrmilnik
- 5. korak: Zaključek
Video: PIC MCU in serijska komunikacija Python: 5 korakov
2024 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2024-01-30 12:04
Zdravo družba! V tem projektu bom poskušal razložiti svoje poskuse o PIC MCU in serijski komunikaciji Python. Po internetu obstaja veliko vadnic in videov o tem, kako komunicirati s PIC MCU prek navideznega terminala, kar je zelo koristno. Vendar pa je v mojem glavnem projektu ena od zahtev vzpostavitev serijske komunikacije med PIC MCU in Pythonom, za katero nisem našel dobre vadnice. Pa začnimo:)
1. korak: Kaj potrebujemo?
Torej, najprej poglejmo, kaj potrebujemo. Kar zadeva strojno opremo:
- Zagotovo PIC MCU, ki je v mojem primeru PIC16f877a (Te plošče ne potrebujete. To je zato, da poenostavite nekatere umazane povezave)
- Pretvornik USB v TTL za komunikacijo s PIC MCU prek vrat USB z uporabo zatičev TX in RX.
- MCU programer, ki je v mojem primeru programer K150, lahko pa uporabite PicKit 2, 3 ali karkoli drugega.
- In končno računalnik:)
Kar zadeva programsko opremo:
- IDE za pisanje kode python, ki je v mojem primeru Pycharm, lahko pa uporabite tudi navaden Python IDE.
- Okolje za programiranje MCU, ki je v mojem primeru MPLAB X IDE s prevajalnikom CCS C.
2. korak: Povezave strojne opreme
Na sliki so priložene strojne povezave med PIC MCU in pretvornikom USB TTL, kot je prikazano spodaj:
RC7 (RX) ------------- TXD
RC6 (TX) ------------- RXD
GND -------------- GND
VCC zatiča pretvornika USB TTL vam ni treba priključiti (če želite, lahko to storite). Te 3 povezave so povsem dovolj.
3. korak: programska oprema Python
Začnimo pisati programsko opremo za stran Python, ki bo v našem primeru oddajnik, ker bo niz poslala v MCU.
import serial #import serial librarydata = '24' #data, ki jih bomo poslali data = a+'\ 0' ser = serial. Serial ('COM17', baudrate = 9600, timeout = 1) #connect to the port ser.write (a.encode ()) #pošljite podatke
Najprej se uvozi serijska knjižnica za uporabo njenih terminskih pogodb. Želimo poslati primer niz podatkov, da v kodi MCU potrdimo, da smo jih sprejeli. Tu bi rad opozoril na eno stvar. Zato smo nizu dodali '\ 0'. To je zato, ker na strani MCU ni mogoče popolnoma prebrati niza. Bere se od znaka do znaka. Zato želimo vedeti konec niza, da nehamo brati. Tako nizu dodamo '\ 0', ki označuje konec niza. Nato se povežemo z vrati, ki so priključena na MCU. Ta vrata lahko določite z iskanjem v »Upravitelj naprav«. Zato bodite previdni, da ste na istih vratih. Konec koncev podatke pošljemo v MCU. Podatkom niza je treba dodati ".encode ()", da jih lahko pošljemo prejemniku.
4. korak: Programska oprema za mikrokrmilnik
Torej, poglejmo našo kodo za MCU. Najprej vam želim pokazati datoteko "config.h", ki ni potrebna, vendar sem to poenostavil. Tukaj samo spremenite frekvenco vašega MCU.
#ifndef CONFIG_H#definiraj CONFIG_H
#vključi
#naprava ADC = 16
#FUSES NOWDT // Brez časovnika za stražarske pse
#FUSES NOBROWNOUT // Brez ponastavitve rjavkanja #FUSES NOLVP // Brez nizkonapetostnega prgminga, B3 (PIC16) ali B5 (PIC18), uporabljen za V/I
#zamuda pri uporabi (kristal = 6000000)
Zdaj pa poglejmo glavno kodo:
#vključi
#vključi
#use rs232 (baud = 9600, xmit = pin_C6, rcv = pin_C7, paritet = N, stop = 1)
#define LED_RED PIN_D0
char inp; char cmp _ = "24"; medpomnilnik char [3];
#int_rda
void serial_communication_interrupt () {disable_interrupts (int_rda); brez podpisa int i = 0; inp = getc (); putc (inp); while (inp! = '\ 0') {pufer = inp; inp = getc (); putc (inp); i ++; }}
void main (void) {
set_tris_d (0x00); output_d (0xFF); omogoči_prekinitve (GLOBAL); medtem ko (1) {enable_interrupts (int_rda); if (strcmp (medpomnilnik, cmp_) == 0) output_low (LED_RED); else output_high (LED_RED); }}
Na začetku vključimo knjižnico nizov, ki nam bo v pomoč pri nizkih operacijah, ki so v našem primeru operacija primerjave nizov (strcmp). Naš namen v tej kodi je torej vklop LED diode, priključene na pin D0, če je poslana vrednost enaka naši podani vrednosti, ki je "cmp_" enaka "24".
Najprej omogočimo prekinitev "rda", ki bo povzročila prekinitev pri prenosu podatkov.
Drugič, poglejmo v ISR (rutino prekinitvenih storitev), ki se imenuje "serial_communication_interrupt". V notranjosti najprej onemogočimo zastavico prekinitve, da preberemo prejeto vrednost in še dodatno povzročimo prekinitev. Nato beremo niz po znak, dokler ne dosežemo '\ 0'. Med branjem znotraj niza zapisujemo tudi vsak znak v medpomnilnik, da dobimo prejeti niz.
Na koncu spet pridemo noter. Tukaj primerjamo naš niz vmesnega pomnilnika, ki je sprejet, in niz cmp_, da vidimo, ali niz pravilno dobimo. Če so enaki, vklopim LED, sicer ugasnem.*
*V kodi sem naredil obratno, ker moja plošča obrne vrednosti pin vrat D. V kodi ga spremenite v:
if (strcmp (medpomnilnik, cmp_) == 0) output_high (LED_RED); else output_low (LED_RED);
Na koncu ga prevedite in naložite v svoj MCU in nato zaženite kodo v Pythonu. Videti bi morali, da se LED prižge.
5. korak: Zaključek
Eno nalogo smo uspešno zaključili. Upam, da vam bo to koristilo. Če imate kakršno koli vprašanje, ne oklevajte in vprašajte:) Do naslednjega projekta.
Priporočena:
Arduino serijska komunikacija: 5 korakov
Serijska komunikacija Arduino: Številni projekti Arduino temeljijo na prenosu podatkov med več Arduini. Ne glede na to, ali ste ljubitelj gradnje avtomobila RC, letala RC ali oblikovanja vremenske postaje z oddaljenim zaslonom, boste morali vedeti, kako zanesljivo prenos serije
Arduino in Python serijska komunikacija - prikaz tipkovnice: 4 koraki
Arduino in Python Serijska komunikacija - Prikaz tipkovnice: Ta projekt je namenjen uporabnikom Mac, lahko pa se izvaja tudi za Linux in Windows, edini korak, ki bi moral biti drugačen, je namestitev
Komunikacija ESP8266 in Python za Noobs: 6 korakov
Komunikacija ESP8266 in Python za Noobs: ta priročnik vam omogoča, da dobite vse podatke iz ESP8266 in jih nadzirate prek pythona brez ukazov AT. Za začetnike je večina navodil o uporabi ESP8266 težka, ker želijo, da utripate »AT COMMANDS«”V čip, kar je: Nepotreben odpadek
Brezžična serijska komunikacija z uporabo Bluefruit: 4 koraki
Brezžična serijska komunikacija z uporabo Bluefruit: Tukaj je preprost vodnik po korakih za zamenjavo vaših žic z nizkoenergetsko povezavo Bluetooth: Rabil sem nekaj časa, da sem to ugotovil, ker skoraj ni nobene dokumentacije o tem, kako to storiti s sodobno tehnologijo bluetooth z nizko porabo energije, kot je kot Bluefrui
Dostopna točka - komunikacija postaje med dvema MCU ESP8266: 3 koraki
Dostopna točka - komunikacija med dvema enotama MCU ESP8266: Pozdravljeni ustvarjalci! V prejšnjem navodilu sem vzpostavil komunikacijo WiFi med dvema enotama MCU ESP8266 prek domačega usmerjevalnika WiFi. Kot sem videl iz komentarjev, obstajajo proizvajalci, ki bi radi uporabili MCU ESP8266 daleč od dosega usmerjevalnika. Torej tukaj je bar