Sommario:
- Passaggio 1: di cosa abbiamo bisogno?
- Passaggio 2: connessioni hardware
- Passaggio 3: software Python
- Passaggio 4: software del microcontrollore
- Passaggio 5: conclusione
Video: PIC MCU e comunicazione seriale Python: 5 passaggi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:02
Ciao ragazzi! In questo progetto cercherò di spiegare i miei esperimenti su PIC MCU e comunicazione seriale Python. Su Internet, ci sono molti tutorial e video su come comunicare con PIC MCU tramite terminale virtuale, il che è molto utile. Tuttavia, nel mio progetto principale uno dei requisiti è stabilire una comunicazione seriale tra PIC MCU e Python che non sono riuscito a trovare un buon tutorial. Quindi iniziamo:)
Passaggio 1: di cosa abbiamo bisogno?
Quindi, prima di tutto vediamo di cosa abbiamo bisogno. In termini di hardware:
- Sicuramente, PIC MCU che è nel mio caso PIC16f877a (non hai bisogno di quella scheda. Questo è per semplificare alcune connessioni sporche)
- Convertitore da USB a TTL per comunicare con PIC MCU tramite porta USB utilizzando i pin TX e RX.
- Programmatore MCU che nel mio caso è il programmatore K150, ma puoi usare PicKit 2, 3 o qualsiasi altra cosa.
- E infine un computer:)
In termini di software:
- Un IDE per scrivere codice Python che è nel mio caso Pycharm, ma puoi anche usare un normale IDE Python.
- Un ambiente per la programmazione dell'MCU che è nel mio caso MPLAB X IDE con compilatore CCS C.
Passaggio 2: connessioni hardware
Nell'immagine sono fornite le connessioni hardware allegate che si trovano tra PIC MCU e convertitore USB TTL come di seguito:
RC7 (RX) ------------- TXD
RC6 (TX) ------------- RXD
GND -------------- GND
Non è necessario collegare il pin VCC del convertitore USB TTL (tuttavia, se vuoi puoi farlo). Queste 3 connessioni sono abbastanza.
Passaggio 3: software Python
Iniziamo a scrivere software per Python lato che sarà il trasmettitore nel nostro caso, perché invierà la stringa all'MCU.
import serial #import serial librarydata = '24' #data che invieremo data = a+'\0' ser = serial. Serial('COM17', baudrate=9600, timeout=1) #connect to the port ser.write(a.encode()) #invia i dati
Prima di tutto viene importata la libreria seriale per poter utilizzare i suoi futures. Vogliamo inviare una stringa di dati di esempio per confermare nel codice MCU che l'abbiamo accettata. Voglio qui notare una cosa. Questo è il motivo per cui abbiamo aggiunto '\0' alla stringa. Questo perché, lato MCU, è impossibile leggere totalmente la stringa. Si legge carattere per carattere. Quindi, vogliamo conoscere la fine della stringa per interrompere la lettura. Quindi, aggiungiamo '\0' alla stringa che indica la fine della stringa. Quindi ci colleghiamo alla porta che è collegata all'MCU. Puoi determinare quella porta cercando in "Gestione periferiche". Quindi, fai attenzione che sei sulla stessa porta. Dopotutto, inviamo i dati all'MCU. ".encode()" dovrebbe essere aggiunto ai dati della stringa per poterlo inviare al destinatario.
Passaggio 4: software del microcontrollore
Quindi, vediamo il nostro codice per MCU. Prima di tutto voglio mostrarvi il file "config.h" all'interno del quale non è richiesto, ma l'ho fatto per semplicità. Qui cambia solo la frequenza del tuo MCU.
#ifndef CONFIG_H#define CONFIG_H
#includere
#dispositivo ADC=16
#FUSES NOWDT //Nessun timer di sorveglianza
#FUSES NOBROWNOUT //Nessun ripristino del brownout #FUSES NOLVP //Nessuna programmazione a bassa tensione, B3(PIC16) o B5(PIC18) utilizzato per I/O
#use delay(crystal=6000000)
Vediamo ora il codice principale:
#includere
#includere
#use rs232 (baud=9600, xmit=pin_C6, rcv=pin_C7, parità=N, stop=1)
#define LED_RED PIN_D0
carattere inp; char cmp_="24"; buffer di caratteri[3];
#int_rda
void serial_communication_interrupt() { disable_interrupts(int_rda); int senza segno i = 0; inp = getc(); putc(inp); while(inp != '\0') { buffer = inp; inp = getc(); putc(inp); io++; } }
void main(void) {
set_tris_d(0x00); output_d(0xFF); enable_interrupts(GLOBAL); while(1) { enable_interrupts(int_rda); if(strcmp(buffer, cmp_) == 0) output_low(LED_RED); altrimenti output_high(LED_RED); } }
All'inizio includiamo la libreria di stringhe che sarà utile nelle operazioni sulle stringhe che nel nostro caso è l'operazione di confronto delle stringhe (strcmp). Quindi, il nostro scopo in questo codice è accendere il led collegato al pin D0 se il valore trasmesso è lo stesso del nostro valore dato che è "cmp_" uguale a "24".
Prima di tutto abilitiamo l'interruzione "rda" che causerà l'interruzione quando i dati vengono trasmessi.
In secondo luogo, diamo un'occhiata all'interno dell'ISR (routine di servizio di interruzione) che si chiama "interruzione_di_comunicazione_seriale". All'interno disattiviamo prima il flag di interruzione per leggere il valore ricevuto e causare ulteriori interruzioni. Successivamente leggiamo la stringa carattere per carattere fino a raggiungere '\0'. Durante la lettura della stringa, scriviamo anche ogni carattere nel buffer per ottenere la stringa ricevuta.
Alla fine, veniamo di nuovo dentro mentre. Qui confrontiamo la nostra stringa del buffer che viene ricevuta stringa e cmp_ stringa per vedere se otteniamo la stringa correttamente. Se sono uguali accendo il led, altrimenti spengo.*
*Nel codice ho fatto l'inversione perché la mia scheda inverte i valori del pin della porta D. Nel tuo codice cambialo in:
if(strcmp(buffer, cmp_) == 0) output_high(LED_RED);else output_low(LED_RED);
Infine, compilalo e caricalo sul tuo MCU, quindi esegui il codice in Python. Dovresti vedere il led accendersi.
Passaggio 5: conclusione
Abbiamo completato con successo un compito. Spero che ti sarà utile. Se hai qualche domanda, non esitare a chiedere:) Fino al prossimo progetto.
Consigliato:
Comunicazione seriale Arduino: 5 passaggi
Comunicazione seriale Arduino: molti progetti Arduino si basano sulla trasmissione di dati tra diversi Arduino. Che tu sia un hobbista che sta costruendo un'auto RC, un aeroplano RC o progettando una stazione meteorologica con un display remoto, dovrai sapere come farlo in modo affidabile serie di trasferimento
Comunicazione seriale Arduino e Python - Display della tastiera: 4 passaggi
Comunicazione seriale Arduino e Python - Display tastiera: questo progetto è fatto per utenti mac ma può essere implementato anche per Linux e Windows, l'unico passaggio che dovrebbe essere diverso è l'installazione
Comunicazione seriale wireless con Bluefruit: 4 passaggi
Comunicazione seriale wireless utilizzando Bluefruit: ecco una semplice guida passo passo per sostituire i cavi con una connessione bluetooth a bassa energia: mi ci è voluto un po' per capirlo perché non c'è quasi nessuna documentazione su come farlo con la moderna tecnologia bluetooth a bassa energia come come il Bluefrui
SmartMirror basato sul Web che utilizza la comunicazione seriale: 6 passaggi
SmartMirror basato sul Web che utilizza la comunicazione seriale: questo istruibile viene consegnato con tutto il codice pronto per l'uso. Lo sviluppo è stato molto complicato ma una volta impostato è davvero facile da personalizzare. Dai un'occhiata e divertiti;)
Comunicazione seriale tramite ARM Cortex-M4: 4 passaggi
Comunicazione seriale tramite ARM Cortex-M4: questo è un progetto basato su breadboard che utilizza ARM Cortex-M4 (Texas Instruments EK-TM4C123GXL) per la comunicazione seriale tramite terminale virtuale. L'output può essere ottenuto su schermo LCD 16x2 e l'input per la comunicazione seriale può essere fornito in Serial Mo