Sisukord:
- Samm: mida me vajame?
- Samm: riistvaraühendused
- Samm: Pythoni tarkvara
- Samm: mikrokontrolleri tarkvara
- 5. samm: järeldus
Video: PIC MCU ja Pythoni jadakommunikatsioon: 5 sammu
2024 Autor: John Day | [email protected]. Viimati modifitseeritud: 2024-01-30 08:48
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?
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
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:
Kaustade sünkroonimine Pythoni abil: 5 sammu
Kaustade sünkroonimine Pythoni abil: see juhend näitab teile, kuidas hoida kahte kausta (ja kõiki nende kaustu) sünkroonis, nii et üks on teise otsene koopia. Ideaalne töö varundamiseks nii kohapeal, pilve-/võrguserverisse kui ka USB -draivi. Programmeerimise kogemus puudub
DIY GPS-jälgija --- Pythoni rakendus: 5 sammu (piltidega)
DIY GPS Tracker --- Pythoni rakendus: osalesin kaks nädalat tagasi jalgrattasõidul. Pärast lõpetamist tahtsin kontrollida marsruuti ja kiirust, millega sel ajal sõitsin. Kahjuks seda ei saavutatud. Nüüd kasutan ESP32 -d GPS -jälgija tegemiseks ja võtan selle oma jalgrattatee salvestamiseks
Pythoni kasutamine mitte-inglise klaviatuuripaigutuste õppimiseks: 8 sammu
Pythoni kasutamine mitte-inglise klaviatuuripaigutuste õppimiseks: Tere, ma olen Julien! Olen informaatikatudeng ja täna näitan teile, kuidas saate Pythoni abil õpetada endale mitte-inglise keele klaviatuuripaigutust. Tänapäeval toimub palju keeleõpet veebis ja üks asi, mida inimesed saavad
Täielik Pythoni veebiliidese komplekt PhidgetSBC3 jaoks: 6 sammu
Täielik Pythoni veebiliidese komplekt PhidgetSBC3 jaoks: PhidgetSBC3 plaat on täisfunktsionaalne üheplaadiline arvuti, mis töötab Debain Linuxiga. See sarnaneb vaarika Pi -ga, kuid sellel on 8 analoogsensori sisendit ja 8 digitaalsisendit ning 8 digitaalset väljundit. See tarnitakse koos veebiserveri ja veebirakendusega, et
Raspberry Pi - ADXL345 3 -teljeline kiirendusmõõturi Pythoni õpetus: 4 sammu
Raspberry Pi-ADXL345 3-teljeline kiirendusmõõturi Pythoni õpetus: ADXL345 on väike, õhuke ülivõimsus, 3-teljeline kiirendusmõõtur, millel on kõrge eraldusvõimega (13-bitine) mõõtmine kuni ± 16 g. Digitaalsed väljundandmed on vormindatud 16-bitiste kaheosaliste täienditena ja neile on juurdepääs digitaalse liidese I2 C kaudu. See mõõdab