Innholdsfortegnelse:
- Trinn 1: Hva trenger vi?
- Trinn 2: Maskinvaretilkoblinger
- Trinn 3: Python -programvare
- Trinn 4: Programvare for mikrokontroller
- Trinn 5: Konklusjon
Video: PIC MCU og Python seriell kommunikasjon: 5 trinn
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:23
Hei folkens! I dette prosjektet vil jeg prøve å forklare eksperimentene mine på PIC MCU og Python seriell kommunikasjon. Over internett er det mange opplæringsprogrammer og videoer om hvordan du kommuniserer med PIC MCU over virtuell terminal, noe som er veldig nyttig. Imidlertid er et av kravene i mitt hovedprosjekt å etablere seriell kommunikasjon mellom PIC MCU og Python, som jeg ikke kunne finne god opplæring. Så la oss komme i gang:)
Trinn 1: Hva trenger vi?
Så, først og fremst, la oss se hva vi trenger. Når det gjelder maskinvare:
- Sikkert, PIC MCU som i mitt tilfelle PIC16f877a (Du trenger ikke det kortet. Dette er for å forenkle noen skitne tilkoblinger)
- USB til TTL -omformer for å kommunisere med PIC MCU over USB -port ved bruk av TX- og RX -pinner.
- MCU programmerer som i mitt tilfelle K150 programmerer, men du kan bruke PicKit 2, 3 eller noe annet.
- Og til slutt en datamaskin:)
Når det gjelder programvare:
- En IDE for å skrive python -kode, som i mitt tilfelle Pycharm, men du kan også bruke vanlig Python IDE.
- Et miljø for programmering av MCU som i mitt tilfelle er MPLAB X IDE med CCS C -kompilator.
Trinn 2: Maskinvaretilkoblinger
På bildet er vedlagte maskinvaretilkoblinger gitt mellom PIC MCU og USB TTL -omformer som nedenfor:
RC7 (RX) ------------- TXD
RC6 (TX) ------------- RXD
GND -------------- GND
Du trenger ikke å koble VCC -pinnen til USB TTL -omformeren (men du kan gjøre det hvis du vil). Disse 3 tilkoblingene er ganske nok.
Trinn 3: Python -programvare
La oss begynne å skrive programvare for Python -siden som vil være sender i vårt tilfelle, fordi den sender strengen til MCU.
import serial #import serial librarydata = '24' #data som vi vil sende data = a+'\ 0' ser = serial. Serial ('COM17', baudrate = 9600, timeout = 1) #connect til porten ser.write (a.encode ()) #send dataene
Først og fremst importeres det serielle biblioteket for å kunne bruke fremtiden. Vi vil sende et eksempel på strengdata for å bekrefte i MCU -koden at vi godtok det. Jeg vil her notere en ting. Dette er grunnen til at vi la til '\ 0' i strengen. Dette er fordi det på MCU -siden er umulig å lese strengen totalt. Den leses karakter for karakter. Så vi vil vite slutten av strengen for å slutte å lese. Så vi legger til '\ 0' i strengen som angir slutten av strengen. Deretter kobler vi til porten som er koblet til MCU. Du kan bestemme den porten ved å søke i 'Enhetsbehandling'. Så vær forsiktig så du er på samme port. Tross alt sender vi dataene til MCU. ".encode ()" bør legges til strengdataene for å kunne sende dem til mottakeren.
Trinn 4: Programvare for mikrokontroller
Så la oss se koden vår for MCU. Først og fremst vil jeg vise deg "config.h" -filen som ikke er nødvendig, men jeg gjorde det for enkelhets skyld. Her er det bare å endre frekvensen på MCU -en din.
#ifndef CONFIG_H#definere CONFIG_H
#inkludere
#enhet ADC = 16
#FUSES NOWDT // No Watch Dog Timer
#FUSES NOBROWNOUT // No brownout reset #FUSES NOLVP // No low voltage prgming, B3 (PIC16) or B5 (PIC18) used for I/O
#bruk forsinkelse (krystall = 6000000)
La oss nå se hovedkoden:
#inkludere
#inkludere
#bruk rs232 (baud = 9600, xmit = pin_C6, rcv = pin_C7, paritet = N, stopp = 1)
#define LED_RED PIN_D0
røye inp; char cmp _ = "24"; røyebuffer [3];
#int_rda
void serial_communication_interrupt () {disable_interrupts (int_rda); usignert int i = 0; inp = getc (); putc (inp); mens (inp! = '\ 0') {buffer = inp; inp = getc (); putc (inp); i ++; }}
void main (void) {
set_tris_d (0x00); output_d (0xFF); enable_interrupts (GLOBAL); mens (1) {enable_interrupts (int_rda); if (strcmp (buffer, cmp_) == 0) output_low (LED_RED); annet output_high (LED_RED); }}
I begynnelsen inkluderer vi strengbibliotek, som vi vil være nyttige i strengoperasjoner, som i vårt tilfelle er streng sammenligningsoperasjon (strcmp). Så, vår hensikt med denne koden er å slå på LED -en som er koblet til pin D0 hvis den overførte verdien er den samme som vår oppgitte verdi som er "cmp_" tilsvarer "24".
Først av alt aktiverer vi interrupt "rda" som vil forårsake avbrudd når data overføres.
For det andre, la oss se på ISR (interrupt service routine) som kalles "serial_communication_interrupt". Inne deaktiverer vi først avbruddsflagget for å lese den mottatte verdien og forårsake avbrudd ytterligere. Etter det leser vi strengen tegn for tegn til vi når '\ 0'. Mens vi leser inne i strengen, skriver vi også hver røyke til bufferen for å få mottatt streng.
På slutten kommer vi igjen inne mens. Her sammenligner vi bufferstrengen vår som er mottatt streng og cmp_ streng for å se om vi får strengen riktig. Hvis de er like, slår jeg på led, ellers slår jeg av.*
*I koden reverserte jeg fordi kortet mitt inverterer D -portens pinverdier. Endre den i koden til:
if (strcmp (buffer, cmp_) == 0) output_high (LED_RED); ellers output_low (LED_RED);
Til slutt, kompiler den og last opp til MCU -en din og kjør deretter koden i Python. Du bør se LED slå på.
Trinn 5: Konklusjon
Vi har fullført en oppgave vellykket. Jeg håper at det vil være nyttig for deg. Hvis du har spørsmål, ikke nøl med å spørre:) Til neste prosjekt.
Anbefalt:
Raspberry PI 3 - Aktiver seriell kommunikasjon til TtyAMA0 til BCM GPIO 14 og GPIO 15: 9 trinn
Raspberry PI 3 - Aktiver seriell kommunikasjon til TtyAMA0 til BCM GPIO 14 og GPIO 15: Jeg hadde nylig interesse for å aktivere UART0 på min Raspberry Pi (3b) slik at jeg kunne koble den direkte til en RS -232 signalnivåenhet ved hjelp av en standard 9 -nål d-sub-kontakt uten å måtte gå gjennom en USB til RS-232 adapter. En del av min interesse
Arduino seriell kommunikasjon: 5 trinn
Arduino seriell kommunikasjon: Mange Arduino -prosjekter er avhengige av å overføre data mellom flere Arduinos. Om du er en hobbyist som bygger en RC -bil, et RC -fly eller designer en værstasjon med en ekstern skjerm, må du vite hvordan du kan overfør serier
Arduino og Python seriell kommunikasjon - tastaturvisning: 4 trinn
Arduino og Python seriell kommunikasjon - tastaturvisning: Dette prosjektet er laget for mac -brukere, men det kan også implementeres for Linux og Windows, det eneste trinnet som bør være annerledes er installasjonen
Trådløs seriell kommunikasjon ved hjelp av Bluefruit: 4 trinn
Trådløs seriekommunikasjon ved hjelp av Bluefruit: Her er en enkel trinnvis veiledning for å bytte ut ledningene dine med en Bluetooth lavenergitilkobling: Det tok meg en stund å finne ut av dette fordi det knapt er dokumentasjon på hvordan jeg gjør dette med moderne Bluetooth lavenergiteknologi som som Bluefrui
Nettbasert SmartMirror ved bruk av seriell kommunikasjon: 6 trinn
Nettbasert SmartMirror ved bruk av seriell kommunikasjon: Denne instruksjonen leveres med all koden klar til bruk. Utviklingen var veldig komplisert, men når den er satt opp, er den veldig enkel å tilpasse. Ta en titt og nyt;)