Indholdsfortegnelse:
- Trin 1: Hvad har vi brug for?
- Trin 2: Hardwareforbindelser
- Trin 3: Python -software
- Trin 4: Microcontroller -software
- Trin 5: Konklusion
Video: PIC MCU og Python seriel kommunikation: 5 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:27
Hej gutter! I dette projekt vil jeg prøve at forklare mine eksperimenter med PIC MCU og Python seriel kommunikation. Over internettet er der mange selvstudier og videoer om, hvordan man kommunikerer med PIC MCU over virtuel terminal, hvilket er meget nyttigt. I mit hovedprojekt er et af kravene imidlertid at etablere seriel kommunikation mellem PIC MCU og Python, som jeg ikke kunne finde god vejledning. Så lad os komme i gang:)
Trin 1: Hvad har vi brug for?
Så lad os først og fremmest se, hvad vi har brug for. Med hensyn til hardware:
- Sikkert, PIC MCU, som i mit tilfælde er PIC16f877a (Du behøver ikke det kort. Dette er for at forenkle nogle beskidte forbindelser)
- USB til TTL -konverter for at kommunikere med PIC MCU over USB -port ved hjælp af TX- og RX -ben.
- MCU -programmerer, som i mit tilfælde er K150 -programmerer, men du kan bruge PicKit 2, 3 eller andet.
- Og endelig en computer:)
Med hensyn til software:
- En IDE for at skrive python -kode, som i mit tilfælde er Pycharm, men du kan også bruge almindelig Python IDE.
- Et miljø til programmering af MCU, som i mit tilfælde er MPLAB X IDE med CCS C compiler.
Trin 2: Hardwareforbindelser
På billedet angives vedhæftede hardwareforbindelser, der er mellem PIC MCU og USB TTL -konverter som nedenfor:
RC7 (RX) ------------- TXD
RC6 (TX) ------------- RXD
GND -------------- GND
Du behøver ikke at tilslutte VCC -pin på USB TTL -konverteren (Du kan dog gøre det, hvis du vil). Disse 3 forbindelser er ganske nok.
Trin 3: Python -software
Lad os begynde at skrive software til Python -siden, som vil være sender i vores tilfælde, fordi den sender strengen til MCU'en.
import serial #import serial librarydata = '24' #data, som vi sender data = a+'\ 0' ser = serial. Serial ('COM17', baudrate = 9600, timeout = 1) #connect til porten ser.write (a.encode ()) #send dataene
Først og fremmest er det serielle bibliotek importeret for at kunne bruge dets fremtid. Vi vil sende et eksempel på string -data for at bekræfte i MCU -koden, at vi har accepteret det. Jeg vil her notere en ting. Det er derfor, vi tilføjede '\ 0' til strengen. Dette skyldes, at det på MCU -siden er umuligt at læse strengen helt. Det læses karakter for karakter. Så vi vil gerne vide slutningen af strengen for at stoppe med at læse. Så vi tilføjer '\ 0' til strengen, der angiver slutningen af strengen. Derefter opretter vi forbindelse til porten, der er forbundet til MCU. Du kan bestemme denne port ved at søge i 'Enhedshåndtering'. Så pas på, at du er på samme port. Vi sender jo dataene til MCU. ".encode ()" bør tilføjes til strengedataene for at kunne sende dem til modtageren.
Trin 4: Microcontroller -software
Så lad os se vores kode til MCU. Først og fremmest vil jeg vise dig "config.h" -filen, som ikke er påkrævet, men jeg gjorde det for nemheds skyld. Her skal du bare ændre hyppigheden af din MCU.
#ifndef CONFIG_H#definere CONFIG_H
#omfatte
#enhed ADC = 16
#FUSES NOWDT // Ingen vagthundtimer
#FUSES NOBROWNOUT // Ingen brownout -nulstilling #FUSES NOLVP // Ingen lavspændingsprogrammering, B3 (PIC16) eller B5 (PIC18), der bruges til I/O
#brug forsinkelse (krystal = 6000000)
Lad os nu se hovedkoden:
#omfatte
#omfatte
#brug rs232 (baud = 9600, xmit = pin_C6, rcv = pin_C7, paritet = N, stop = 1)
#define LED_RED PIN_D0
char inp; char cmp _ = "24"; forkulningsbuffer [3];
#int_rda
void serial_communication_interrupt () {disable_interrupts (int_rda); usigneret 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); hvis (strcmp (buffer, cmp_) == 0) output_low (LED_RED); ellers output_high (LED_RED); }}
I begyndelsen inkluderer vi strengbibliotek, som vi vil være behjælpelig med strengoperationer, som i vores tilfælde er strengsammenligningsoperation (strcmp). Så vores formål med denne kode er at tænde lysdioden, der er forbundet til stiften D0, hvis den transmitterede værdi er den samme som vores givne værdi, som er "cmp_", er lig med "24".
Først og fremmest aktiverer vi interrupt "rda", som vil forårsage afbrydelse, når data overføres.
For det andet, lad os se inde i ISR (interrupt service routine), som kaldes "serial_communication_interrupt". Indenfor deaktiverer vi først interrupt -flag for at læse den modtagne værdi og forårsage afbrydelse yderligere. Derefter læser vi strengen tegn for tegn, indtil vi når '\ 0'. Mens vi læser inde i strengen, skriver vi også hver char til bufferen for at få modtaget streng.
Til sidst kommer vi igen indenfor mens. Her sammenligner vi vores bufferstreng, som er modtaget streng og cmp_ streng for at se, om vi får strengen korrekt. Hvis de er lige, tænder jeg LED, ellers slukker.*
*I kode omvendte jeg, fordi mit bord inverterer D -portens pinværdier. Skift den i din kode til:
hvis (strcmp (buffer, cmp_) == 0) output_high (LED_RED); ellers output_low (LED_RED);
Til sidst skal du kompilere det og uploade til din MCU og derefter køre kode i Python. Du skal se LED tænde.
Trin 5: Konklusion
Vi har afsluttet en opgave med succes. Jeg håber, at det vil være nyttigt for dig. Hvis du har spørgsmål, tøv ikke med at spørge:) Indtil næste projekt.
Anbefalede:
Raspberry PI 3 - Aktiver seriel kommunikation til TtyAMA0 til BCM GPIO 14 og GPIO 15: 9 trin
Raspberry PI 3 - Aktiver seriel kommunikation til TtyAMA0 til BCM GPIO 14 og GPIO 15: Jeg havde for nylig interesse i at aktivere UART0 på min Raspberry Pi (3b), så jeg kunne tilslutte den direkte til en RS -232 signalniveauenhed ved hjælp af en standard 9 -pind d-sub-stik uden at skulle gå gennem en USB til RS-232 adapter. En del af min interesse
Arduino seriel kommunikation: 5 trin
Arduino seriel kommunikation: Mange Arduino -projekter er afhængige af at overføre data mellem flere Arduinos. Uanset om du er en hobbyist, der bygger en RC -bil, et RC -fly eller designer en vejrstation med et fjernskærm, skal du vide, hvordan du pålideligt kan overfør serier
Arduino og Python seriel kommunikation - tastaturdisplay: 4 trin
Arduino og Python seriel kommunikation - tastaturvisning: Dette projekt er lavet til mac -brugere, men det kan også implementeres til Linux og Windows, det eneste trin, der burde være anderledes, er installationen
Trådløs seriel kommunikation ved hjælp af Bluefruit: 4 trin
Trådløs seriel kommunikation ved hjælp af Bluefruit: Her er en simpel trin for trin guide til at udskifte dine ledninger med en bluetooth lavenergiforbindelse: Det tog mig et stykke tid at finde ud af dette, fordi der næsten ikke er dokumentation for at gøre dette med moderne bluetooth lavenergiteknologi, f.eks. som Bluefrui
Web-baseret SmartMirror ved hjælp af seriel kommunikation: 6 trin
Web-baseret SmartMirror ved hjælp af seriel kommunikation: Denne instruktør leveres med al koden klar til brug. Udviklingen var meget kompliceret, men når den er konfigureret, er den virkelig let at tilpasse. Tag et kig og nyd den;)