Talaan ng mga Nilalaman:

PIC MCU at Python Serial Communication: 5 Mga Hakbang
PIC MCU at Python Serial Communication: 5 Mga Hakbang

Video: PIC MCU at Python Serial Communication: 5 Mga Hakbang

Video: PIC MCU at Python Serial Communication: 5 Mga Hakbang
Video: ✨Renegade Immortal EP 01 - 11 Full Version [MULTI SUB] 2024, Nobyembre
Anonim
PIC MCU at Python Serial Communication
PIC MCU at Python Serial Communication
PIC MCU at Python Serial Communication
PIC MCU at Python Serial Communication

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?

Ano ang ating kailangan?
Ano ang ating kailangan?
Ano ang ating kailangan?
Ano ang ating kailangan?

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

Mga Koneksyon sa Hardware
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: