Përmbajtje:

PIC MCU dhe Python Serial Communication: 5 Hapa
PIC MCU dhe Python Serial Communication: 5 Hapa

Video: PIC MCU dhe Python Serial Communication: 5 Hapa

Video: PIC MCU dhe Python Serial Communication: 5 Hapa
Video: BTT Manta M8P v2 - CM4 with Fluidd Pi 2024, Nëntor
Anonim
PIC MCU dhe Python Serial Communication
PIC MCU dhe Python Serial Communication
PIC MCU dhe Python Serial Communication
PIC MCU dhe Python Serial Communication

Ç'kemi djema! Në këtë projekt do të përpiqem të shpjegoj eksperimentet e mia mbi PIC MCU dhe komunikimin serial Python. Në internet, ka shumë mësime dhe video se si të komunikoni me PIC MCU mbi terminalin virtual i cili është shumë i dobishëm. Sidoqoftë, në projektin tim kryesor një nga kërkesat është krijimi i komunikimit serik midis PIC MCU dhe Python të cilin nuk mund ta gjej një mësim të mirë. Pra, le të fillojmë:)

Hapi 1: Çfarë na nevojitet?

Çfarë na duhet?
Çfarë na duhet?
Çfarë na duhet?
Çfarë na duhet?

Pra, para së gjithash le të shohim se çfarë na nevojitet. Për sa i përket harduerit:

  • Me siguri, PIC MCU e cila është në rastin tim PIC16f877a (Ju nuk keni nevojë për atë tabelë. Kjo është për të thjeshtuar disa lidhje të ndyra)
  • Konvertuesi USB në TTL për të komunikuar me PIC MCU përmes portit USB duke përdorur kunjat TX dhe RX.
  • Programues MCU i cili është në rastin tim programues K150, por ju mund të përdorni PicKit 2, 3 ose ndonjë gjë tjetër.
  • Dhe së fundi një kompjuter:)

Për sa i përket softuerit:

  • Një IDE për të shkruar kodin python i cili është në rastin tim Pycharm, por gjithashtu mund të përdorni IDE të rregullt Python.
  • Një mjedis për programimin e MCU i cili në rastin tim është MPLAB X IDE me përpiluesin CCS C.

Hapi 2: Lidhjet e harduerit

Lidhjet e harduerit
Lidhjet e harduerit

Në figurë jepen lidhjet e bashkangjitura të harduerit të cilat janë midis PIC MCU dhe konvertuesit USB TTL si më poshtë:

RC7 (RX) ------------- TXD

RC6 (TX) ------------- RXD

GND -------------- GND

Nuk keni nevojë të lidhni pin VCC të konvertuesit USB TTL (megjithatë, nëse dëshironi, mund ta bëni). Këto 3 lidhje janë mjaft të mjaftueshme.

Hapi 3: Softueri Python

Le të fillojmë të shkruajmë softuer për anën Python i cili do të jetë transmetues në rastin tonë, sepse ai do të dërgojë vargun në MCU.

import serial #import bibliotekë serialedata = '24' #data që do të dërgojmë të dhëna = a+'\ 0' ser = serial. Serial ('COM17', baudrate = 9600, timeout = 1) #lidhu me portin ser.write (a.kodoni ()) #dërgoni të dhënat

Para së gjithash, biblioteka serike importohet për të përdorur të ardhmen e saj. Ne duam të dërgojmë një shembull të të dhënave të vargut në mënyrë që të konfirmojmë në kodin MCU që i kemi pranuar. Këtu dua të vërej një gjë. Kjo është arsyeja pse ne shtuam '\ 0' në varg. Kjo është për shkak se, nga ana MCU është e pamundur të lexosh vargun plotësisht. Lexohet karakter për karakter. Pra, ne duam të dimë fundin e vargut në mënyrë që të ndalojmë së lexuari. Pra, shtojmë '\ 0' në varg që tregon fundin e vargut. Pastaj lidhemi me portën që është e lidhur me MCU. Ju mund ta përcaktoni atë port duke kërkuar në 'Device Manager'. Pra, kini kujdes që të jeni në të njëjtin port. Në fund të fundit, ne i dërgojmë të dhënat në MCU. ".encode ()" duhet të shtohet në të dhënat e vargut në mënyrë që të jetë në gjendje t'i dërgojë ato tek marrësi.

Hapi 4: Softueri i mikrokontrolluesit

Pra, le të shohim kodin tonë për MCU. Para së gjithash unë dua t'ju tregoj skedarin "config.h" brenda të cilit nuk kërkohet, por e bëra për thjeshtësi. Këtu thjesht ndryshoni frekuencën e MCU tuaj.

#ifndef CONFIG_H#përcakto CONFIG_H

#përfshi

#pajisja ADC = 16

#FUSES NOWDT // Asnjë Kohëmatës i Qenit të Qenit

#FUSES NOBROWNOUT // Asnjë rivendosje në kafe #FUSES NOLVP // Pa prgming të tensionit të ulët, B3 (PIC16) ose B5 (PIC18) të përdorura për I/O

#përdorimi i vonesës (kristal = 6000000)

Tani le të shohim kodin kryesor:

#përfshi

#përfshi

#use rs232 (baud = 9600, xmit = pin_C6, rcv = pin_C7, barazi = N, ndalesë = 1)

#përcaktoni PIN_D0 LED_RED

char inp; char cmp _ = "24"; tampon kar [3];

#në_rda

void serial_communication_interrupt () {disable_interrupts (int_rda); pa shenjë int i = 0; inp = getc (); putc (inp); ndërsa (inp! = '\ 0') {tampon = hyrje; inp = getc (); putc (inp); i ++; }}

pavlefshme kryesore (e pavlefshme) {

set_tris_d (0x00); dalje_d (0xFF); enable_interrupts (GLOBAL); ndërsa (1) {enable_interrupts (int_rda); if (strcmp (tampon, cmp_) == 0) output_low (LED_RED); tjetër output_high (LED_RED); }}

Në fillim ne përfshijmë bibliotekën e vargjeve të cilat do të jemi të dobishme në operacionet me varg i cili në rastin tonë është operacioni i krahasimit të vargut (strcmp). Pra, qëllimi ynë në këtë kod është të ndezim led -in e lidhur me pin D0 nëse vlera e transmetuar është e njëjtë me vlerën tonë të dhënë e cila është "cmp_" e barabartë me "24".

Para së gjithash ne mundësojmë ndërprerjen "rda" e cila do të shkaktojë ndërprerje kur të dhënat transmetohen.

Së dyti, le të shohim brenda ISR (rutina e shërbimit të ndërprerë) e cila quhet "serial_communication_interrupt". Brenda ne së pari çaktivizojmë flamurin e ndërprerjes në mënyrë që të lexojmë vlerën e marrë dhe të shkaktojmë ndërprerje më tej. Pas kësaj ne lexojmë vargun karakter për karakter derisa të arrijmë '\ 0'. Ndërsa lexojmë brenda vargut, ne gjithashtu i shkruajmë secilës shenjë tamponit në mënyrë që të marrim vargun e marrë.

Në fund, përsëri hyjmë brenda ndërsa. Këtu krahasojmë vargun tonë tampon i cili është pranuar vargu dhe vargu cmp_ në mënyrë që të shohim nëse e marrim vargun në mënyrë korrekte. Nëse ato janë të barabarta, atëherë ndez led, përndryshe fik.*

*Në kod kam bërë anasjelltas sepse bordi im përmbys vlerat e pinit të portës D. Në kodin tuaj ndryshojeni në:

nëse (strcmp (tampon, cmp_) == 0) output_high (LED_RED); përndryshe output_low (LED_RED);

Më në fund, përpilojeni atë dhe ngarkoni në MCU tuaj dhe më pas ekzekutoni kodin në Python. Duhet të shihni që LED të ndizet.

Hapi 5: Përfundimi

Ne kemi përfunduar me sukses një detyrë. Shpresoj se do të jetë e dobishme për ju. Nëse keni ndonjë pyetje, ju lutem mos hezitoni të pyesni:) Deri në projektin tjetër.

Recommended: