Sadržaj:
2025 Autor: John Day | [email protected]. Zadnja promjena: 2025-01-23 14:47
Bok dečki! 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 što nisam mogao pronaći dobar vodič. Pa krenimo:)
Korak 1: Što nam treba?
Dakle, prije svega da vidimo što 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 u 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 računalo:)
Š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 u 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 se knjižnica uvozi kako bi se koristila njezina budućnost. Želimo poslati primjer niza podataka kako bismo potvrdili u MCU kodu da smo ih prihvatili. Ovdje želim napomenuti jednu stvar. Zbog toga smo nizu dodali '\ 0'. To je zato što je sa MCU strane nemoguće čitati niz u potpunosti. Čita se lik po lik. Dakle, želimo znati kraj niza kako bismo prestali čitati. Dakle, nizu dodajemo '\ 0' koji označava kraj niza. Zatim se povezujemo na priključak 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 se moglo 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
#uključi
#uređaj ADC = 16
#FUSES NOWDT // Nema mjerača vremena za pse
#FUSES NOBROWNOUT // Nema resetiranja 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:
#uključi
#uključ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"; me uspremnik [3];
#int_rda
void serial_communication_interrupt () {disable_interrupts (int_rda); nepotpisani int i = 0; inp = getc (); putc (inp); while (inp! = '\ 0') {međuspremnik = 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 (međuspremnik, 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 nizovnim operacijama, što je u našem slučaju operacija usporedbe nizova (strcmp). Dakle, naša svrha u ovom kodu je uključiti LED diodu povezanu na pin D0 ako je prenesena vrijednost ista kao naša zadana vrijednost koja je "cmp_" jednaka "24".
Prije svega, omogućujemo prekid "rda" koji će uzrokovati prekid pri prijenosu podataka.
Drugo, pogledajmo unutar ISR -a (rutinske usluge prekida) koji se naziva "serial_communication_interrupt". Unutra prvo onemogućujemo zastavicu prekida kako bismo pročitali primljenu vrijednost i dodatno uzrokovali prekid. Nakon toga čitamo niz po znak sve do '\ 0'. Tijekom čitanja unutar niza također zapisujemo svaki char u međuspremnik 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, tada 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 (međuspremnik, cmp_) == 0) output_high (LED_RED); else output_low (LED_RED);
Konačno, sastavite ga i prenesite na svoj MCU, a zatim pokrenite kôd u Pythonu. Trebali biste vidjeti da se LED dioda uključuje.
Korak 5: Zaključak
Uspješno smo završili jedan zadatak. Nadam se da će vam biti od koristi. Ako imate bilo kakvih pitanja, ne ustručavajte se pitati:) Do sljedećeg projekta.
Preporučeni:
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 zrakoplov ili dizajnira meteorološku stanicu s udaljenim zaslonom, morat ćete znati kako pouzdano prijenos serije
Arduino i Python serijska komunikacija - prikaz tipkovnice: 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 s 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 16x2 LCD zaslonu, a ulaz za serijsku komunikaciju može se dati u serijskom Mo
Pristupna točka - komunikacija stanice između dva ESP8266 MCU -a: 3 koraka
Pristupna točka - Komunikacija stanice između dva ESP8266 MCU -a: Pozdrav, tvorci! U prethodnim uputama napravio sam WiFi komunikaciju između dva ESP8266 MCU -a putem kućnog WiFi usmjerivača. Kao što sam vidio iz komentara, postoje proizvođači koji bi htjeli koristiti ESP8266 MCU -ove daleko od dometa usmjerivača. Dakle, ovdje je bar