Obsah:
- Krok 1: Čo potrebujeme?
- Krok 2: Hardvérové pripojenia
- Krok 3: Softvér Python
- Krok 4: Softvér mikrokontroléra
- Krok 5: Záver
Video: Sériová komunikácia PIC MCU a Python: 5 krokov
2024 Autor: John Day | [email protected]. Naposledy zmenené: 2024-01-30 11:58
Ahojte chlapi! V tomto projekte sa pokúsim vysvetliť svoje experimenty so sériovou komunikáciou PIC MCU a Python. Cez internet existuje mnoho návodov a videí o tom, ako komunikovať s PIC MCU prostredníctvom virtuálneho terminálu, čo je veľmi užitočné. V mojom hlavnom projekte je však jednou z požiadaviek vytvoriť sériovú komunikáciu medzi PIC MCU a Python, pre ktorý som nenašiel dobrý návod. Začnime teda:)
Krok 1: Čo potrebujeme?
V prvom rade sa teda pozrime, čo potrebujeme. Pokiaľ ide o hardvér:
- Iste, PIC MCU, čo je v mojom prípade PIC16f877a (Túto dosku nepotrebujete. Toto je kvôli zjednodušeniu niektorých špinavých spojení)
- Prevodník USB na TTL na komunikáciu s PIC MCU cez port USB pomocou pinov TX a RX.
- Programátor MCU, čo je v mojom prípade programátor K150, ale môžete použiť PicKit 2, 3 alebo čokoľvek iné.
- A konečne počítač:)
Pokiaľ ide o softvér:
- IDE na zápis kódu pythonu, čo je v mojom prípade Pycharm, ale môžete použiť aj bežné Python IDE.
- Prostredie na programovanie MCU, čo je v mojom prípade MPLAB X IDE s kompilátorom CCS C.
Krok 2: Hardvérové pripojenia
Na obrázku sú uvedené hardvérové pripojenia, ktoré sú medzi prevodníkom PIC MCU a USB TTL, ako je uvedené nižšie:
RC7 (RX) ------------- TXD
RC6 (TX) ------------- RXD
GND -------------- GND
Nie je potrebné pripojiť pin VCC prevodníka USB TTL (Ak však chcete, môžete to urobiť). Tieto 3 spojenia úplne stačia.
Krok 3: Softvér Python
Začnime písať softvér pre stranu Pythonu, ktorý bude v našom prípade vysielačom, pretože ten odošle reťazec do MCU.
import serial serial #import serial librarydata = '24' #data that we will send data = a+'\ 0' ser = serial. Serial ('COM17', baudrate = 9600, timeout = 1) #connect to the port ser.write (a.encode ()) #odoslať údaje
Najprv sa importuje sériová knižnica, aby sa využila jej budúcnosť. Chceme poslať ukážkové reťazcové údaje, aby sme v kóde MCU potvrdili, že sme ich prijali. Tu chcem poznamenať jednu vec. Preto sme do reťazca pridali '\ 0'. Dôvodom je, že na strane MCU nie je možné reťazec úplne prečítať. Číta sa to znak po znaku. Chceme teda vedieť koniec reťazca, aby sme prestali čítať. Do reťazca teda pridáme „\ 0“, ktorý označuje koniec reťazca. Potom sa pripojíme k portu, ktorý je pripojený k MCU. Tento port môžete určiť vyhľadaním v „Správcovi zariadení“. Dávajte si preto pozor, aby ste boli na rovnakom porte. Koniec koncov, odosielame údaje do MCU. „.encode ()“by malo byť pridané k reťazcovým údajom, aby bolo možné ich odoslať príjemcovi.
Krok 4: Softvér mikrokontroléra
Pozrime sa teda na náš kód pre MCU. Najprv vám chcem ukázať súbor „config.h“, ktorý nie je potrebný, ale urobil som to kvôli jednoduchosti. Tu stačí zmeniť frekvenciu vášho MCU.
#ifndef CONFIG_H#definujte CONFIG_H
#zahrnúť
#zariadenie ADC = 16
#FUSES NOWDT // Časovač strážneho psa
#FUSES NOBROWNOUT // Žiadny reset vypnutia #FUSES NOLVP // Žiadne prgmingy nízkeho napätia, B3 (PIC16) alebo B5 (PIC18) používané pre I/O
#oneskorenie použitia (kryštál = 60 000 000)
Teraz sa pozrime na hlavný kód:
#zahrnúť
#zahrnúť
#use rs232 (baud = 9600, xmit = pin_C6, rcv = pin_C7, parita = N, stop = 1)
#define LED_RED PIN_D0
char inp; char cmp _ = "24"; char buffer [3];
#int_rda
neplatné serial_communication_interrupt () {disable_interrupts (int_rda); bez znamienka int i = 0; inp = getc (); putc (inp); while (inp! = '\ 0') {buffer = inp; inp = getc (); putc (inp); i ++; }}
void main (void) {
set_tris_d (0x00); output_d (0xFF); enable_interrupts (GLOBÁLNE); while (1) {enable_interrupts (int_rda); if (strcmp (buffer, cmp_) == 0) output_low (LED_RED); else output_high (LED_RED); }}
Na začiatku uvádzame knižnicu reťazcov, ktorá nám bude nápomocná pri operáciách reťazcov, čo je v našom prípade operácia porovnávania reťazcov (strcmp). Našim účelom v tomto kóde je teda zapnúť LED pripojenú na pin D0, ak je prenášaná hodnota rovnaká ako naša daná hodnota, ktorá je „cmp_“rovná sa „24“.
Najprv povolíme prerušenie „rda“, ktoré spôsobí prerušenie pri prenose údajov.
Za druhé, pozrime sa do vnútra ISR (rutina služby prerušenia), ktorá sa nazýva „serial_communication_interrupt“. Vo vnútri najskôr deaktivujeme príznak prerušenia, aby sme mohli prečítať prijatú hodnotu a spôsobiť ďalšie prerušenie. Potom prečítame reťazec po znakoch, kým nedosiahneme '\ 0'. Pri čítaní vo vnútri reťazca tiež zapisujeme každý znak do vyrovnávacej pamäte, aby sme dostali prijatý reťazec.
Na konci opäť prídeme dovnútra. Tu porovnáme náš reťazec vyrovnávacej pamäte, ktorý je prijatým reťazcom, a reťazec cmp_, aby sme zistili, či reťazec dostaneme správne. Ak sú si rovné, zapnem LED, inak vypnem.*
*V kóde som obrátil, pretože moja doska invertuje hodnoty pinov portu D. Vo svojom kóde ho zmeňte na:
if (strcmp (buffer, cmp_) == 0) output_high (LED_RED); else output_low (LED_RED);
Nakoniec ho skompilovajte a nahrajte do svojho MCU a potom spustite kód v Pythone. Mali by ste vidieť zapnuté LED.
Krok 5: Záver
Úspešne sme dokončili jednu úlohu. Dúfam, že to bude pre vás užitočné. Ak máte akékoľvek otázky, neváhajte sa ich opýtať:) Do ďalšieho projektu.
Odporúča:
Sériová komunikácia Arduino: 5 krokov
Sériová komunikácia Arduino: Mnoho projektov Arduino sa spolieha na prenos údajov medzi niekoľkými Arduinos. Bez ohľadu na to, či ste nadšenec, ktorý stavia RC auto, RC lietadlo alebo navrhuje meteorologickú stanicu so vzdialeným displejom, budete musieť vedieť, ako na to spoľahlivo. prenosové série
Sériová komunikácia Arduino a Python - displej klávesnice: 4 kroky
Sériová komunikácia Arduino a Python - zobrazenie klávesnice: Tento projekt je vytvorený pre používateľov počítačov Mac, ale je možné ho implementovať aj pre systémy Linux a Windows, jediným krokom, ktorý by sa mal líšiť, je inštalácia
Bezdrôtová sériová komunikácia pomocou Bluefruit: 4 kroky
Bezdrôtová sériová komunikácia pomocou programu Bluefruit: Tu je jednoduchý krok za krokom návod, ako nahradiť vaše káble nízkoenergetickým pripojením bluetooth: Chvíľu mi trvalo, kým som na to prišiel, pretože neexistuje takmer žiadna dokumentácia, ako to urobiť pomocou modernej nízkoenergetickej technológie bluetooth, ako je napr. ako Bluefrui
Launchpad - sériová komunikácia Matlab: 6 krokov
Launchpad - sériová komunikácia Matlab: Hola, bienvenido a este tutorial donde aprender á s a comunicar tu tarjeta LaunchPad TI Evaluation Kit con Matlab.En este tutorial se enfocar á a la conexi ó n con la Tiva C y el usuario podr á migrujte a pridajte
Sériová komunikácia pomocou ARM Cortex-M4: 4 kroky
Sériová komunikácia pomocou ARM Cortex-M4: Jedná sa o projekt založený na breadboarde, ktorý používa ARM Cortex-M4 (Texas Instruments EK-TM4C123GXL) na sériovú komunikáciu pomocou virtuálneho terminálu. Výstup je možné získať na obrazovke LCD 16 x 2 a vstup pre sériovú komunikáciu je možné zadať v sériovom