Sisukord:

PIC MCU ja Pythoni jadakommunikatsioon: 5 sammu
PIC MCU ja Pythoni jadakommunikatsioon: 5 sammu

Video: PIC MCU ja Pythoni jadakommunikatsioon: 5 sammu

Video: PIC MCU ja Pythoni jadakommunikatsioon: 5 sammu
Video: Тонкости работы с монтажной пеной. То, что ты не знал! Секреты мастеров 2024, November
Anonim
PIC MCU ja Pythoni jadakommunikatsioon
PIC MCU ja Pythoni jadakommunikatsioon
PIC MCU ja Pythoni jadakommunikatsioon
PIC MCU ja Pythoni jadakommunikatsioon

Tere kutid! Selles projektis püüan selgitada oma katseid PIC MCU ja Pythoni jadaühenduse kohta. Internetis on palju õpetusi ja videoid selle kohta, kuidas PIC MCU -ga virtuaalterminali kaudu suhelda, mis on väga kasulik. Kuid minu põhiprojektis on üheks nõudeks seeriaühenduse loomine PIC MCU ja Pythoni vahel, mida ma ei suutnud leida head õpetust. Niisiis, alustame:)

Samm: mida me vajame?

Mida me vajame?
Mida me vajame?
Mida me vajame?
Mida me vajame?

Niisiis, vaatame kõigepealt, mida me vajame. Riistvara osas:

  • Kindlasti PIC MCU, mis on minu puhul PIC16f877a (te ei vaja seda tahvlit. See on selleks, et lihtsustada mõningaid määrdunud ühendusi)
  • USB -TTL -muundur, et suhelda PIC MCU -ga USB -pordi kaudu, kasutades TX- ja RX -kontakte.
  • MCU programmeerija, mis on minu puhul K150 programmeerija, kuid võite kasutada PicKit 2, 3 või midagi muud.
  • Ja lõpuks arvuti:)

Tarkvara osas:

  • IDE python -koodi kirjutamiseks, mis on minu puhul Pycharm, kuid võite kasutada ka tavalist Pythoni IDE -d.
  • Keskkond MCU programmeerimiseks, mis on minu puhul MPLAB X IDE koos CCS C kompilaatoriga.

Samm: riistvaraühendused

Riistvaraühendused
Riistvaraühendused

Pildil on lisatud riistvaraühendused, mis on PIC MCU ja USB TTL -muunduri vahel, nagu allpool:

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

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

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

Te ei pea USB -TTL -muunduri VCC -pistikut ühendama (kui soovite, saate seda siiski teha). Need kolm ühendust on täiesti piisavad.

Samm: Pythoni tarkvara

Alustame Pythoni poole tarkvara kirjutamist, mis on meie puhul saatja, sest see saadab stringi MCU -le.

impordi jada #import jadakogu Librarydata = '24' #andmed, mille kohta me andmed saadame = a+'\ 0' ser = jada. Sarja ('COM17', baudrate = 9600, timeout = 1) #ühenda pordiga ser.write (a.encode ()) #andmete saatmine

Esiteks imporditakse jadaraamatukogu selle tuleviku kasutamiseks. Soovime saata näite stringi andmed, et kinnitada MCU -koodis, et oleme nendega nõustunud. Tahan siin märkida ühte asja. Seetõttu lisasime stringile '\ 0'. Seda seetõttu, et MCU poolel on võimatu stringi täielikult lugeda. Seda loetakse tähemärgi haaval. Niisiis tahame lugemise lõpetamiseks teada stringi lõppu. Niisiis lisame stringile '\ 0', mis näitab stringi lõppu. Seejärel ühendame pordiga, mis on ühendatud MCU -ga. Selle pordi saate määrata, otsides jaotises "Seadmehaldur". Seega olge ettevaatlik, et asuksite samas sadamas. Lõppude lõpuks saadame andmed MCU -le. Stringiandmetele tuleks lisada ".encode ()", et neid saaks vastuvõtjale saata.

Samm: mikrokontrolleri tarkvara

Vaatame siis meie MCU koodi. Kõigepealt tahan teile näidata faili "config.h", mida pole vaja, kuid lihtsuse huvides tegin seda. Siin saate lihtsalt muuta oma MCU sagedust.

#ifndef CONFIG_H#define CONFIG_H

#kaasake

#seade ADC = 16

#FUSES NOWDT // Vahtkoera taimer puudub

#SULAKUD NOBROWNOUT // Pruunistamise lähtestamist ei toimu

#kasutuse viivitus (kristall = 6000000)

Vaatame nüüd põhikoodi:

#kaasake

#kaasake

#use rs232 (baud = 9600, xmit = pin_C6, rcv = pin_C7, pariteet = N, stop = 1)

#define LED_RED PIN_D0

char inp; char cmp _ = "24"; söe puhver [3];

#int_rda

void serial_communication_interrupt () {disable_interrupts (int_rda); allkirjastamata int i = 0; inp = getc (); putc (inp); while (inp! = '\ 0') {puhver = inp; inp = getc (); putc (inp); i ++; }}

void main (void) {

set_tris_d (0x00); output_d (0xFF); enable_interrupts (ülemaailmne); samas (1) {enable_interrupts (int_rda); if (strcmp (puhver, cmp_) == 0) output_low (LED_RED); else output_high (LED_RED); }}

Alguses lisame stringikogu, millest oleme abiks stringioperatsioonides, mis meie puhul on stringide võrdlemise operatsioon (strcmp). Niisiis, meie eesmärk selles koodis on lülitada sisse pistikuga D0 ühendatud LED, kui edastatav väärtus on sama, mis meie antud väärtus, mis on "cmp_" võrdub "24" -ga.

Esiteks lubame katkestuse "rda", mis põhjustab andmete edastamisel katkestuse.

Teiseks, vaatame ISR -i (katkestusteenuse rutiin), mida nimetatakse "serial_communication_interrupt". Sees keelame esmalt katkestuse lipu, et lugeda saadud väärtust ja põhjustada katkestusi veelgi. Pärast seda loeme stringi tähemärgi kaupa, kuni jõuame '\ 0'. Stringi sees lugedes kirjutame vastuvõetud stringi saamiseks ka iga sümboli puhvrisse.

Lõpuks jõuame jälle sisse. Siin võrdleme oma puhvritringi, mis on saadud string ja cmp_ string, et näha, kas saame stringi õigesti. Kui need on võrdsed, lülitan led sisse, muidu lülitan välja.*

*Koodis tegin tagurpidi, kuna mu plaat pöörab D -pordi tihvti väärtused ümber. Muutke see oma koodis järgmiselt:

if (strcmp (puhver, cmp_) == 0) output_high (LED_RED); else output_low (LED_RED);

Lõpuks kompileerige see ja laadige see üles oma MCU -sse ning käivitage seejärel kood Pythonis. Te peaksite nägema LED -i sisselülitamist.

5. samm: järeldus

Oleme ühe ülesande edukalt lõpetanud. Loodan, et see on teile kasulik. Kui teil on küsimusi, ärge kartke küsida:) Kuni järgmise projektini.

Soovitan: