Talaan ng mga Nilalaman:
- Hakbang 1: Ano ang Kailangan Namin?
- Hakbang 2: Mga Koneksyon sa Hardware
- Hakbang 3: Python Software
- Hakbang 4: Microcontroller Software
- Hakbang 5: Konklusyon
Video: PIC MCU at Python Serial Communication: 5 Mga Hakbang
2024 May -akda: John Day | [email protected]. Huling binago: 2024-01-30 13:13
Kumusta, guys! Sa proyektong ito susubukan kong ipaliwanag ang aking mga eksperimento sa PIC MCU at Python serial na komunikasyon. Sa paglipas ng internet, maraming mga tutorial at video kung paano makipag-usap sa PIC MCU sa virtual terminal na napaka kapaki-pakinabang. Gayunpaman, sa aking pangunahing proyekto ang isa sa mga kinakailangan ay upang maitaguyod ang serial na komunikasyon sa pagitan ng PIC MCU at Python na hindi ko makita ang magandang tutorial. Kaya, magsimula na tayo:)
Hakbang 1: Ano ang Kailangan Namin?
Kaya, una sa lahat tingnan natin kung ano ang kailangan natin. Sa mga tuntunin ng hardware:
- Tiyak, ang PIC MCU na nasa aking kaso PIC16f877a (Hindi mo kailangan ang board na iyon. Ito ay upang gawing simple ang ilang maruming koneksyon)
- Ang USB sa TTL converter upang makipag-usap sa PIC MCU sa USB port sa pamamagitan ng paggamit ng TX at RX pin.
- MCU programmer na nasa aking kaso K150 programmer, ngunit maaari mong gamitin ang PicKit 2, 3 o anupaman.
- At sa wakas isang computer:)
Sa mga tuntunin ng software:
- Isang IDE upang makapagsulat ng python code na nasa aking kaso na Pycharm, ngunit maaari mo ring gamitin ang regular na Python IDE.
- Isang kapaligiran para sa pagprograma ng MCU kung saan nasa aking kaso ang MPLAB X IDE na may CCS C compiler.
Hakbang 2: Mga Koneksyon sa Hardware
Sa larawan na nakalakip na mga koneksyon sa hardware ay ibinibigay na nasa pagitan ng PIC MCU at USB TTL converter tulad ng sa ibaba:
RC7 (RX) ------------- TXD
RC6 (TX) ------------- RXD
GND ---------------- GND
Hindi mo kailangang ikonekta ang VCC pin ng USB TTL converter (Gayunpaman, kung nais mong magagawa mo ito). Ang 3 mga koneksyon na ito ay sapat na.
Hakbang 3: Python Software
Magsimula tayong magsulat ng software para sa bahagi ng Python na magiging transmitter sa aming kaso, dahil ipapadala nito ang string sa MCU.
mag-import ng serial #import serial librarydata = '24' #data na magpapadala kami ng data = a + '\ 0' ser = serial. Serial ('COM17', baudrate = 9600, timeout = 1) #connect sa port ser.write (a.encode ()) #send ang data
Una sa lahat ng serial library ay na-import upang magamit ang mga hinaharap. Nais naming magpadala ng isang halimbawa ng data ng string upang kumpirmahin sa MCU code na tinanggap namin ito. Gusto kong dito tandaan ang isang bagay. Ito ang dahilan kung bakit idinagdag namin ang '\ 0' sa string. Ito ay sapagkat, sa panig ng MCU imposibleng basahin nang buo ang string. Nabasa ito ayon sa karakter. Kaya, nais naming malaman ang katapusan ng string upang ihinto ang pagbabasa. Kaya, idinagdag namin ang '\ 0' sa string na nagpapahiwatig ng pagtatapos ng string. Pagkatapos ay kumonekta kami sa port na konektado sa MCU. Maaari mong matukoy ang port na iyon sa pamamagitan ng paghahanap sa 'Device Manager'. Kaya, mag-ingat na nasa parehong port ka. Pagkatapos ng lahat, ipinapadala namin ang data sa MCU. Ang ".encode ()" ay dapat idagdag sa string data upang maipadala ito sa tatanggap.
Hakbang 4: Microcontroller Software
Kaya, tingnan natin ang aming code para sa MCU. Una sa lahat nais kong ipakita sa iyo ang "config.h" file sa loob na hindi kinakailangan, ngunit ginawa ko ito para sa pagiging simple. Dito lang baguhin ang dalas ng iyong MCU.
#ifndef CONFIG_H # tukuyin ang CONFIG_H
# isama
#device ADC = 16
#FUSES NGAYON // Walang Watch Dog Timer
#FUSES NOBROWNOUT // Walang pag-reset ng brownout #FUSES NOLVP // Walang mababang boltahe na prgming, B3 (PIC16) o B5 (PIC18) na ginamit para sa I / O
# pagkaantala ng paggamit (kristal = 6000000)
Tingnan natin ang pangunahing code:
# isama
# isama
#use rs232 (baud = 9600, xmit = pin_C6, rcv = pin_C7, parity = N, stop = 1)
# tukuyin ang LED_RED PIN_D0
char inp; char cmp _ = "24"; char buffer [3];
#int_rda
walang bisa serial_communication_interrupt () {disable_interrupts (int_rda); unsigned int i = 0; inp = getc (); putc (inp); habang (inp! = '\ 0') {buffer = inp; inp = getc (); putc (inp); ako ++; }}
void main (void) {
set_tris_d (0x00); output_d (0xFF); enable_interrupts (GLOBAL); habang (1) {enable_interrupts (int_rda); kung (strcmp (buffer, cmp_) == 0) output_low (LED_RED); iba pa ang output_high (LED_RED); }}
Sa simula ay nagsasama kami ng library ng string na kung saan makakatulong kami sa mga pagpapatakbo ng string na sa aming kaso ay ang paghahambing ng pagpapatakbo ng string (strcmp). Kaya, ang aming layunin sa code na ito ay upang buksan ang humantong konektado sa pin D0 kung ang naihatid na halaga ay kapareho ng aming ibinigay na halaga na "cmp_" ay katumbas ng "24".
Una sa lahat pinapagana namin ang makagambala na "rda" na magdudulot ng abala kapag naipadala ang data.
Pangalawa, tingnan natin sa loob ng ISR (makagambala ang gawain sa serbisyo) na kung tawagin ay "serial_communication_interrupt". Sa loob ay una naming hindi pinagana ang pag-abala ng watawat upang mabasa ang natanggap na halaga at magdulot ng karagdagang nakakagambala. Pagkatapos nito ay nabasa namin ang character na string ayon sa character hanggang sa maabot ang '\ 0'. Habang nagbabasa sa loob ng string nagsusulat din kami ng bawat char sa buffer upang matanggap ang string.
Sa huli, muli kaming pumasok sa loob habang. Inihambing namin ang aming buffer string na natanggap ang string at cmp_ string upang makita kung tama ang nakuha naming string. Kung pantay ang mga ito pagkatapos ay i-on ko ang led, kung hindi man patayin. *
* Sa code nabaliktad ako dahil inververt ng aking board ang mga halaga ng D port pin. Sa iyong code baguhin ito sa:
kung (strcmp (buffer, cmp_) == 0) output_high (LED_RED); iba pa output_low (LED_RED);
Panghuli, ipunin ito at i-upload sa iyong MCU at pagkatapos ay magpatakbo ng code sa Python. Dapat mong makita ang nakabukas na pag-on.
Hakbang 5: Konklusyon
Natapos namin ang isang gawain nang matagumpay. Umaasa ako na ito ay magiging kapaki-pakinabang para sa iyo. Kung mayroon kang anumang katanungan, mangyaring huwag mag-atubiling magtanong:) Hanggang sa susunod na proyekto.
Inirerekumendang:
Serial Communication ng Arduino: 5 Mga Hakbang
Serial Communication ng Arduino: Maraming mga proyekto ng Arduino ang umaasa sa paglilipat ng data sa pagitan ng maraming mga Arduino. Kung ikaw ay isang libangan na nagtatayo ng isang RC car, isang RC airplane, o nagdidisenyo ng isang istasyon ng panahon na may isang malayong display, kakailanganin mong malaman kung paano maaasahan ilipat ang seria
Long Range, 1.8km, Arduino hanggang Arduino Wireless Communication Sa HC-12 .: 6 Mga Hakbang (na may Mga Larawan)
Long Range, 1.8km, Arduino to Arduino Wireless Communication Sa HC-12 .: Sa itinuturo na ito malalaman mo kung paano makipag-usap sa pagitan ng Arduinos sa isang mahabang distansya hanggang sa 1.8km sa bukas na hangin. Ang HC-12 ay isang wireless serial port module ng komunikasyon na napaka kapaki-pakinabang, napakalakas at madaling gamitin. Una kang
Serial Communication ng Arduino at Python - Display ng Keypad: 4 na Hakbang
Serial Communication ng Arduino at Python - Display ng Keypad: Ang Proyekto na ito ay ginawa para sa mga gumagamit ng mac ngunit maaari rin itong ipatupad para sa Linux at Windows, ang tanging hakbang na dapat na magkakaiba ay ang pag-install
Wireless Serial Communication Gamit ang Bluefruit: 4 Hakbang
Wireless Serial Communication Paggamit ng Bluefruit: Narito ang isang simpleng gabay sa hakbang upang mapalitan ang iyong mga wire gamit ang isang koneksyon ng mababang enerhiya na Bluetooth: Tumagal ako ng ilang panahon upang malaman ito dahil halos walang anumang dokumentasyon sa paggawa nito sa modernong Bluetooth na mababang enerhiya tech tulad ng bilang ang Bluefrui
Web-based SmartMirror Paggamit ng Serial Communication: 6 Mga Hakbang
Web-based SmartMirror Paggamit ng Serial Communication: Ang itinuturo na ito ay naihatid sa lahat ng code na handa nang gamitin. Ang pag-unlad ay napaka-kumplikado ngunit kapag na-set up ito ay talagang madali upang ipasadya. Tingnan at masiyahan;)