Sadržaj:
- Korak 1: Šta nam treba?
- Korak 2: Hardverske veze
- Korak 3: Python softver
- Korak 4: Softver za mikrokontroler
- Korak 5: Zaključak
Video: PIC MCU i Python serijska komunikacija: 5 koraka
2024 Autor: John Day | [email protected]. Zadnja izmjena: 2024-01-30 08:06
Zdravo momci! U ovom projektu pokušat ću objasniti svoje eksperimente na PIC MCU i Python serijskoj komunikaciji. Preko interneta postoji mnogo vodiča i video zapisa o tome kako komunicirati s PIC MCU -om preko virtualnog terminala što je vrlo korisno. Međutim, u mom glavnom projektu jedan od zahtjeva je uspostaviti serijsku komunikaciju između PIC MCU -a i Pythona za koju nisam mogao pronaći dobar vodič. Pa krenimo:)
Korak 1: Šta nam treba?
Dakle, prije svega da vidimo šta nam treba. Što se tiče hardvera:
- Naravno, PIC MCU koji je u mom slučaju PIC16f877a (Ta vam ploča nije potrebna. Ovo je radi pojednostavljenja nekih prljavih veza)
- USB na TTL pretvarač za komunikaciju s PIC MCU preko USB priključka pomoću TX i RX pinova.
- MCU programer koji je u mom slučaju K150 programer, ali možete koristiti PicKit 2, 3 ili bilo što drugo.
- I na kraju kompjuter:)
Što se tiče softvera:
- IDE za pisanje python koda koji je u mom slučaju Pycharm, ali možete koristiti i običan Python IDE.
- Okruženje za programiranje MCU -a koje je u mom slučaju MPLAB X IDE sa CCS C kompajlerom.
Korak 2: Hardverske veze
Na slici su priložene hardverske veze koje se nalaze između PIC MCU -a i USB TTL pretvarača, kao što je dolje:
RC7 (RX) ------------- TXD
RC6 (TX) ------------- RXD
GND -------------- GND
Ne morate spojiti VCC pin USB TTL pretvarača (međutim, ako želite, možete to učiniti). Ove 3 veze su sasvim dovoljne.
Korak 3: Python softver
Počnimo pisati softver za Python stranu koji će u našem slučaju biti odašiljač, jer će poslati niz na MCU.
import serial #import serial librarydata = '24' #data koje ćemo poslati podacima = a+'\ 0' ser = serial. Serial ('COM17', baudrate = 9600, timeout = 1) #connect to the port ser.write (a.encode ()) #pošaljite podatke
Prije svega, serijska biblioteka se uvozi kako bi se koristila njena budućnost. Želimo poslati primjer nizova podataka kako bismo potvrdili u MCU kodu da smo ih prihvatili. Želim ovdje primijetiti jednu stvar. Zbog toga smo nizu dodali '\ 0'. To je zato što je sa MCU strane nemoguće čitati niz u potpunosti. Čita se znak po znak. Dakle, želimo znati kraj niza kako bismo prestali čitati. Dakle, dodajemo '\ 0' nizu koji označava kraj niza. Zatim se povezujemo na port koji je spojen na MCU. Taj port možete odrediti pretraživanjem u 'Upravitelju uređaja'. Zato pazite da se nalazite na istoj luci. Uostalom, podatke šaljemo MCU -u. ".encode ()" treba dodati podacima niza kako bi ih mogli poslati primatelju.
Korak 4: Softver za mikrokontroler
Dakle, pogledajmo naš kod za MCU. Prije svega želim vam pokazati datoteku "config.h" koja nije potrebna, ali to sam učinio radi jednostavnosti. Ovdje samo promijenite frekvenciju vašeg MCU -a.
#ifndef CONFIG_H#definirajte CONFIG_H
#include
#uređaj ADC = 16
#FUSES NOWDT // Nema mjerača vremena za pse
#FUSES NOBROWNOUT // Nema poništavanja smeđe boje #FUSES NOLVP // Nema niskonaponskih prgminga, B3 (PIC16) ili B5 (PIC18) koji se koriste za I/O
#kašnjenje upotrebe (kristal = 6000000)
Pogledajmo sada glavni kod:
#include
#include
#use rs232 (baud = 9600, xmit = pin_C6, rcv = pin_C7, paritet = N, stop = 1)
#define LED_RED PIN_D0
char inp; char cmp _ = "24"; char buffer [3];
#int_rda
void serial_communication_interrupt () {disable_interrupts (int_rda); nepotpisani int i = 0; inp = getc (); putc (inp); while (inp! = '\ 0') {bafer = inp; inp = getc (); putc (inp); i ++; }}
void main (void) {
set_tris_d (0x00); output_d (0xFF); enable_interrupts (GLOBAL); while (1) {enable_interrupts (int_rda); if (strcmp (bafer, cmp_) == 0) output_low (LED_RED); else output_high (LED_RED); }}
Na početku uključujemo biblioteku nizova koja će nam biti od pomoći u niz operacijama, što je u našem slučaju operacija usporedbe niza (strcmp). Dakle, naša svrha u ovom kodu je uključiti LED diodu povezanu na pin D0 ako je prenesena vrijednost ista kao i naša zadana vrijednost koja je "cmp_" jednaka "24".
Prije svega, omogućujemo prekid "rda" koji će uzrokovati prekid prilikom prijenosa podataka.
Drugo, pogledajmo unutar ISR -a (rutinska usluga prekida) koja se naziva "serial_communication_interrupt". Unutra prvo onemogućujemo zastavicu prekida kako bismo pročitali primljenu vrijednost i dalje uzrokovali prekid. Nakon toga čitamo niz po znak sve do '\ 0'. Dok čitamo unutar niza, također zapisujemo svaki char u bafer kako bismo dobili primljeni niz.
Na kraju opet ulazimo unutra. Ovdje uspoređujemo naš niz me uspremnika koji je primljeni niz i cmp_ niz kako bismo vidjeli jesmo li pravilno dobili niz. Ako su jednaki, palim LED, u suprotnom isključujem.*
*U kodu sam napravio obrnuto jer moja ploča obrće vrijednosti pina D porta. U svom kodu promijenite ga u:
if (strcmp (bafer, cmp_) == 0) output_high (LED_RED); else output_low (LED_RED);
Na kraju, kompajlirajte ga i otpremite na svoj MCU, a zatim pokrenite kôd u Pythonu. Trebali biste vidjeti da se LED dioda uključuje.
Korak 5: Zaključak
Jedan zadatak smo uspješno završili. Nadam se da će vam biti od koristi. Ako imate bilo kakvih pitanja, ne ustručavajte se pitati:) Do sljedećeg projekta.
Preporučuje se:
Arduino serijska komunikacija: 5 koraka
Arduino serijska komunikacija: Mnogi Arduino projekti oslanjaju se na prijenos podataka između nekoliko Arduina. Bilo da ste hobist koji gradi RC automobil, RC avion ili dizajnira meteorološku stanicu s udaljenim ekranom, morat ćete znati kako pouzdano transfer serija
Arduino i Python serijska komunikacija - prikaz tastature: 4 koraka
Arduino i Python serijska komunikacija - prikaz tipkovnice: Ovaj je projekt napravljen za korisnike Mac računara, ali se može implementirati i za Linux i Windows, jedini korak koji bi trebao biti drugačiji je instalacija
Bežična serijska komunikacija pomoću Bluefruit -a: 4 koraka
Bežična serijska komunikacija pomoću Bluefruit -a: Evo jednostavnog vodiča korak po korak kako biste zamijenili svoje žice bluetooth vezom niske energije: Trebalo mi je vremena da to shvatim jer gotovo da nema dokumentacije o tome kako to učiniti sa modernom bluetooth tehnologijom niske energije, poput kao Bluefrui
Serijska komunikacija pomoću ARM Cortex-M4: 4 koraka
Serijska komunikacija pomoću ARM Cortex-M4: Ovo je projekt zasnovan na matičnoj ploči koji koristi ARM Cortex-M4 (Texas Instruments EK-TM4C123GXL) za serijsku komunikaciju pomoću virtualnog terminala. Izlaz se može dobiti na LCD ekranu veličine 16x2, a ulaz za serijsku komunikaciju može se dati u Serijski Mo
Pristupna tačka - Komunikacija stanice između dva ESP8266 MCU -a: 3 koraka
Pristupna tačka - Komunikacija stanice između dva ESP8266 MCU -a: Zdravo, proizvođači! U prethodnom uputstvu sam napravio WiFi komunikaciju između dva ESP8266 MCU -a putem kućnog WiFi rutera. Kao što sam vidio iz komentara, postoje proizvođači koji bi željeli koristiti ESP8266 MCU -ove daleko od dometa usmjerivača. Dakle, ovdje je bar