Orodha ya maudhui:

PIC MCU na Mawasiliano ya Siri ya Python: Hatua 5
PIC MCU na Mawasiliano ya Siri ya Python: Hatua 5

Video: PIC MCU na Mawasiliano ya Siri ya Python: Hatua 5

Video: PIC MCU na Mawasiliano ya Siri ya Python: Hatua 5
Video: 😰😰😰mwizi achomwa 🔥🔥🔥 aki watu hamtaona mbinguni⛪⛪ 2024, Novemba
Anonim
PIC MCU na Mawasiliano ya Siri ya Python
PIC MCU na Mawasiliano ya Siri ya Python
PIC MCU na Mawasiliano ya Siri ya Python
PIC MCU na Mawasiliano ya Siri ya Python

Halo, jamani! Katika mradi huu nitajaribu kuelezea majaribio yangu juu ya mawasiliano ya serial ya PIC MCU na Python. Kwenye wavuti, kuna mafunzo na video nyingi juu ya jinsi ya kuwasiliana na PIC MCU juu ya terminal halisi ambayo ni muhimu sana. Walakini, katika mradi wangu kuu moja ya mahitaji ni kuanzisha mawasiliano ya serial kati ya PIC MCU na Python ambayo sikuweza kupata mafunzo mazuri. Kwa hivyo, wacha tuanze:)

Hatua ya 1: Tunahitaji Nini?

Tunahitaji Nini?
Tunahitaji Nini?
Tunahitaji Nini?
Tunahitaji Nini?

Kwa hivyo, kwanza kabisa tuone tunachohitaji. Kwa upande wa vifaa:

  • Hakika, PIC MCU ambayo iko kwa upande wangu PIC16f877a (Huna haja ya bodi hiyo. Hii ni ili kurahisisha unganisho chafu)
  • USB kwa kibadilishaji cha TTL ili kuwasiliana na PIC MCU juu ya bandari ya USB kwa kutumia pini za TX na RX.
  • Programu ya MCU ambayo kwa upande wangu K150 programu, lakini unaweza kutumia PicKit 2, 3 au kitu kingine chochote.
  • Na mwishowe kompyuta:)

Kwa upande wa programu:

  • IDE ili kuandika nambari ya chatu ambayo iko katika kesi yangu Pycharm, lakini unaweza kutumia IDE ya kawaida ya Python pia.
  • Mazingira ya kupanga MCU ambayo kwa upande wangu MPLAB X IDE na mkusanyaji wa CCS C.

Hatua ya 2: Uunganisho wa vifaa

Uunganisho wa vifaa
Uunganisho wa vifaa

Kwenye picha, viunganisho vya vifaa vimewekwa kati ya PIC MCU na kibadilishaji cha USB TTL kama ilivyo hapo chini:

RC7 (RX) ------------- TXD

RC6 (TX) --------- RXD

GND -------------- GND

Huna haja ya kuunganisha pini ya VCC ya kibadilishaji cha USB TTL (Walakini, ikiwa unataka unaweza kufanya). Viunganisho hivi 3 vinatosha kabisa.

Hatua ya 3: Programu ya Python

Wacha tuanze kuandika programu kwa upande wa Python ambayo itakuwa transmitter kwa upande wetu, kwa sababu itatuma kamba kwa MCU.

kuagiza serial serialport librarydata = '24' #data ambayo tutatuma data = a + '\ 0' ser = serial. a.encode ()) #tuma data

Kwanza kabisa maktaba ya serial huletwa nje ili kutumia hatima yake. Tunataka kutuma data ya kamba ya mfano ili kudhibitisha katika nambari ya MCU kwamba tuliikubali. Nataka hapa kugundua jambo moja. Hii ndio sababu tumeongeza '\ 0' kwenye kamba. Hii ni kwa sababu, kwa upande wa MCU haiwezekani kusoma kamba kabisa. Inasomeka tabia kwa tabia. Kwa hivyo, tunataka kujua mwisho wa kamba ili kuacha kusoma. Kwa hivyo, tunaongeza '\ 0' kwenye kamba ambayo inaonyesha mwisho wa kamba. Kisha tunaunganisha kwenye bandari ambayo imeunganishwa na MCU. Unaweza kuamua bandari hiyo kwa kutafuta katika 'Kidhibiti cha Kifaa'. Kwa hivyo, kuwa mwangalifu kuwa uko kwenye bandari moja. Baada ya yote, tunatuma data kwa MCU. ".encode ()" inapaswa kuongezwa kwa data ya kamba ili kuweza kuipeleka kwa mpokeaji.

Hatua ya 4: Programu ya Microcontroller

Wacha tuone nambari yetu ya MCU. Kwanza kabisa nataka kukuonyesha faili ya "config.h" iliyo ndani ambayo haihitajiki, lakini niliifanya kwa unyenyekevu. Hapa badilisha mzunguko wa MCU yako.

#fndef CONFIG_H # fafanua CONFIG_H

# pamoja

# kifaa ADC = 16

#FUSES NOWDT // Hakuna Saa ya Kuangalia Mbwa

#FUSES NOBROWNOUT // Hakuna kuweka tena brownout #FUSES NOLVP // Hakuna prgming ya chini ya umeme, B3 (PIC16) au B5 (PIC18) iliyotumiwa kwa I / O

#chelewesha matumizi (kioo = 6000000)

Sasa wacha tuone nambari kuu:

# pamoja

# pamoja

#tumia rs232 (baud = 9600, xmit = pin_C6, rcv = pin_C7, usawa = N, stop = 1)

#fafanua LED_RED PIN_D0

char inp; char cmp _ = "24"; bafa ya char [3];

#int_rda

batili serial_communication_interrupt () {Disable_interrupts (int_rda); unsigned int i = 0; inp = kupata (); putc (inp); wakati (inp! = '\ 0') {bafa = inp; inp = kupata (); putc (inp); i ++; }}

utupu kuu (utupu) {

seti_tris_d (0x00); pato_d (0xFF); wezesha_katika (GLOBAL); wakati (1) {wezesha_interrupts (int_rda); ikiwa (strcmp (bafa, cmp_) == 0) pato_low (LED_RED); pato lingine_high (LED_RED); }}

Mwanzoni tunajumuisha maktaba ya kamba ambayo tutasaidia katika shughuli za kamba ambazo kwa upande wetu ni operesheni kulinganisha kamba (strcmp). Kwa hivyo, kusudi letu katika nambari hii ni kuwasha ulingo uliounganishwa na pini D0 ikiwa thamani inayosambazwa ni sawa na thamani yetu tuliyopewa ambayo ni "cmp_" sawa na "24".

Kwanza kabisa tunawezesha kukatiza "rda" ambayo itasababisha usumbufu wakati data inaposambazwa.

Pili, wacha tuangalie ndani ya ISR (kukatiza utaratibu wa huduma) ambao huitwa "serial_communication_interrupt". Ndani tunazima kwanza kukatiza bendera ili kusoma thamani iliyopokelewa na kusababisha kusumbua zaidi. Baada ya hapo tulisoma mhusika wa kamba na mhusika hadi kufikia '\ 0'. Wakati wa kusoma ndani ya kamba pia tunaandika kila char kwa bafa ili kupata kamba iliyopokelewa.

Mwishowe, tunaingia tena ndani wakati. Hapa tunalinganisha kamba yetu ya bafa ambayo imepokea kamba na cmp_ kamba ili kuona ikiwa tunapata kamba kwa usahihi. Ikiwa ni sawa basi ninawasha kuongozwa, vinginevyo zima. *

* Katika nambari niligeuza kwa sababu bodi yangu inverts maadili ya bandari ya D. Kwenye nambari yako ibadilishe iwe:

ikiwa (strcmp (bafa, cmp_) == 0) pato_high (LED_RED); mwingine pato_pungua (LED_RED);

Mwishowe, ikusanye na upakie kwenye MCU yako kisha uendeshe nambari katika Python. Unapaswa kuona kugeuza kuongozwa.

Hatua ya 5: Hitimisho

Tumemaliza kazi moja kwa mafanikio. Natumahi kuwa itakuwa muhimu kwako. Ikiwa una swali lolote, tafadhali usisite kuuliza:) Mpaka mradi ujao.

Ilipendekeza: