na_RS232
Corso introduttivo sui microcontrollori
A. S. 2011-2012
La comunicazione RS232 con i Pic
Nicola Amoroso
1
http://www.mrscuole.net/anxapic/http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
na_RS232 2
La comunicazione RS-232La comunicazione seriale con un picmicro
Molti microcontrollori MicgroChip Pic contengono al loro interno
delle USART e i costi rispetto a quei microcontrollori che non la
contengono sono inesistenti.
Quando si vuole utilizzare la comunicazione RS-232 con i Pic - Micro
è bene scegliere un microcontrollore che abbia un sottosistema
hardware di tipo USART al suo interno. Per esempio si può utilizzare
il microcontrollore della Microchip PIC18F4620 [anche il celeberrimo
16F877/16F877A contiene questo componente hardware (a tal
proposito si consulti opportuna bibliografia e data-sheets)].Questi microcontrollori lavorano generalmente fino a 5V che rappresentaappunto la tensione tipica dei circuiti digitali, mentre la tensione richiestadal protocollo RS232 ha livelli differenti (+/- 12 V).
http://www.mrscuole.net/anxapic/http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
na_RS232 3
Qui ci viene in aiuto il MAX232, un opportuno integrato traslatore di livello
TTL/RS232 e viceversa, partendo solo da un'alimentazione a 5 V. Per
ottenere le tensioni positive e negative necessarie per il funzionamento
dell'integrato viene usata una configurazione a pompa di carica costituito
da circuiti interni all'integrato e quattro condensatori esterni. La capacità
effettiva dipende dal tipo di integrato e dalla relativa frequenza di
commutazione; a volte i condensatori sono presenti all'interno dell'integrato
stesso. Sono disponibili anche integrati che richiedono un'alimentazione di
soli 3,3 V (MAX3232). L’ingresso ricevente del MAX232 è costituito da due
porte invertenti che accettano in ingresso una tensione di +/- 12 V ed
in uscita presentano un segnale TTL compatibile. .
La comunicazione RS-232La comunicazione seriale con un picmicro
http://www.mrscuole.net/anxapic/http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
na_RS232 4
La comunicazione RS-232La comunicazione seriale con un picmicro
L’ingresso ricevente del MAX232 è costituito da due porte invertenti cheaccettano in ingresso una tensione di +/- 12 V ed in uscita presentano unsegnale TTL compatibile. .
http://www.mrscuole.net/anxapic/http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
na_RS232 5
La comunicazione RS-232La comunicazione seriale con un picmicro
Esempio di circuito a pompa di carica
Per ricavare le tensioni positive e negative necessarie per garantire i livellirichiesti dalla RS232 è pratica comune utilizzare un duplicatore ed uninvertitore di tensione a pompa di carica. Le figure A e B mostrano comeviene ottenuto il raddoppio della tensione. Un’immagine che rende l'idea èquella di un contenitore C2 che preleva acqua da una fonte e la riversa inun secondo contenitore C1 posto a maggiore altezza.
http://www.mrscuole.net/anxapic/http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
na_RS232 6
La comunicazione RS-232La comunicazione seriale con un picmicro
Più in dettaglio:
• Inizialmente il condensatore C2 viene connesso tra massa e Vcc; quindila corrente (in blu) carica C2 alla tensione di alimentazione (in giallo).Quindi Vc2 = Vcc
• C2 viene successivamente connesso tra Vcc ed un secondocondensatore C1; la tensione ai capi di C1 deve essere uguale allasomma di Vcc e Vc2 e quindi C2 si scarica verso C1, che aumenta lapropria tensione rispetto a massa.
• Il processo è ripetuto fino a quando la tensione ai capi di C1 è uguale a2Vcc: in questo caso, infatti, C2 non si può più scaricare.
Analogamente le figure C e D mostra l'inversione di tensione:• Inizialmente C2 è caricato alla tensione di alimentazione (magari, come
nel disegno da 2Vcc, ricavata con il precedente circuito)• Quindi C2 è connesso tra massa e C1 avendo cura di invertire le
polarità. In questo modo C1 si carica a -2Vcc
http://www.mrscuole.net/anxapic/http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
na_RS232 7
La comunicazione RS-232La comunicazione seriale con un picmicro
Pic RS232 Tx
Pic RS232 Rx
AnxaPic v1.0 – Interfaccia seriale RS232 con traslatore di livello max232
http://www.mrscuole.net/anxapic/http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
na_RS232 8
La comunicazione RS-232La comunicazione seriale con un picmicro
Altro semplice schema elettrico per il collegamento di un Max232 con microcontrollore Pic 40 Pin
http://www.mrscuole.net/anxapic/http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
na_RS232 9
La comunicazione RS-232La comunicazione seriale con un picmicro
Il protocollo di comunicazione RS232 sui controllori Pic della MicroChip viene normalmente
implementato facendo uso della periferica di sistema USART (Universal Synchronous
Asynchronous Receiver Transmitter). Nel caso di interfacciamento con un PC si può utilizzare il
traslatore di livello MAX232 per l’adattamento dei valori logici dei segnali elettrici. Nelle due
pagine precedenti vengono proposti due semplici schemi applicativi.
La periferica USART può essere impostata, mediante il «set» di opportuni registri speciali del
micro, per lavorare sia in modalità asincrona full-duplex sia in modalità sincrona half-duplex
[master – slave].
Nel nostro caso abiliteremo sempre la periferica per lavorare in modalità asincrona full-
duplex.
http://www.mrscuole.net/anxapic/http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
na_RS232 10
La comunicazione RS-232La comunicazione seriale con un picmicro
Per trasmettere e ricevere dati secondo il protocollo RS232 (e non solo) vengono utilizzate delle
semplici funzioni di libreria come: printf(…..); put(…); putc(…); putchar(…); getc(…); getch(…);
etc… . In Ansi C queste funzioni sono definite nella libreria standard <<stdio.h>>; prima del loro
utilizzo bisogna sempre includere questa libreria mediante la direttiva: #include ‘stdio.h’.
Il CCS Pic-C compiler non è propriamente un compilatore Ansi C standard; le definizioni e
uso delle funzioni di comunicazione RS232 vengono richiamate nella direttiva:
#USE RS232(… varie opzioni …) //Le opzioni sono separate da virgole
Esempio:
#USE RS232(baud=9600, bits=8, parity=N, xmit=PIN_C6, rcv=PIN_C7)
Per la trasmissione RS232 usa il sottosistema Hardware di default, la velocità di trasmissione è
pari a 9600 bit al secondo, il pacchetto è composto da 8 bit di dati (oltre ai bit di start e stop),
nessuna parità, il PIN_C6 è il pin (Tx) per la trasmissione, il PIN_C7 (Rx) per la ricezione.
http://www.mrscuole.net/anxapic/http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
na_RS232 11
La comunicazione RS-232La comunicazione seriale con un picmicro
Il wizard del CCS Pic-C compiler semplifica notevolmente la impostazione delle varie opzioni
della direttiva #USE RS232(…..); vedremo il suo impiego con qualche esempio. L’introduzione di
questa direttiva abilita anche all’uso delle funzioni di comunicazione alcune delle quali sono state
richiamate in precedenza.
Una delle funzioni principali e forse una delle più utilizzate è la funzione: printf(…….)
La funzione printf(…) riindirizza l’output (riportato tra le due parentesi tonde) verso
la periferica standard di I/O; nel caso del nostro sistema la periferica standard è
quella seriale (USART)
Quando vogliamo trasmettere una serie di caratteri via RS232 scriveremo una cosa del tipo:printf("Ciao ragazzi!\n\r");
I caratteri \n e \r sono due caratteri particolari che fanno parte di quei gruppi particolari di caratteri chiamatisequenze di escape. In pratica il carattere \n è il carattere di nuova linea (Line Feed o LF - in genere vieneidentificato più precisamente come carattere di controllo. Anche se non visualizza niente anche lui ha uncodice ascii e quindi occupa un byte di dati); il carattere \r è il ritorno carrello (Carriage Return o CR).In pratica inserendo \n, il cursore andrà sulla linea successiva, ma rimarrà sulla stessa colonna in cui si trovavaprima di cambiare linea, il carattere \r, invece, fa avanzare alla linea successiva e riporta il cursore alla primacolonna della stessa, il ritorno a capo completo, quindi, è l’effetto di una nuova linea seguito da un ritorno carrello(o anche prima il ritorno carrello e poi la nuova linea).
http://www.mrscuole.net/anxapic/http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
na_RS232 12
La comunicazione RS-232La comunicazione seriale con un picmicro
Come richiamato in precedenza la funzione printf(…) supporta
anche i parametri per la formattazione del testo in uscita [cfr.
manuale CCS Pic-C compiler] e le sequenze escape di
controllo.
Carattere Specifica
\r Ritorno a capo
\n Nuova linea
\t Tabulatore
\’ Apice singolo
\’’ Virgolette
\\ Backslash
\? Punto interrogativo
\0 Carattere Null
\% Simbolo %
\b Indietro di un carattereAlcune tra le più utili sequenze escape di controllo
Invia via RS232 il valore di una variabile (numero decimale) e il
carattere di controllo di «Ritorno a capo»
Printf(‘’ Il valore di i è: %d /r’’, i)
http://www.mrscuole.net/anxapic/http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
na_RS232 13
La comunicazione RS-232La comunicazione seriale con un picmicro – Esempio 1
Vediamo un semplice esempio di comunicazione seriale RS232 con un micro Pic18F4620;
questo microcontrollore è dotato di un opportuno sottosistema Hardware per la comunicazione
seriale chiamato EUSART (Enhanced Universal Synchronous Asynchronous Receiver
Transmitter) che può essere opportunamente configurato come un sistema asincrono full-duplex
per la comunicazione seriale con gli opportuni devices [cfr. Microhip data-sheet Pic18F4620].
Si vogliono trasmettere due semplici messaggi (stringa di catatteri, stringa di caratteri + valore
decimale di una variabile) verso un device collegato con il nostro microcontrollore via RS232
(TTL compatibile).
Pic18F4620 Device RS232RS232 TTL Comp
http://www.mrscuole.net/anxapic/http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
na_RS232 14
La comunicazione RS-232La comunicazione seriale con un picmicro – Esempio 1
Il semplice schema elettrico � [cfr. na_Ex1-RS232Pic.dsn --- Esempio simulazione con Proteus]
Nell’esempio di simulazione il «device RS232» viene sostituto con il terminale seriale (Virtual
terminal) fornito dal sistema Proteus VSM di simulazione
http://www.mrscuole.net/anxapic/http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
na_RS232 15
La comunicazione RS-232La comunicazione seriale con un picmicro – Esempio 1 – Il software
Il Pic Wizard del CCS Pic-C Compiler aiuta nella definizione Hardware del Microcontrollore:
Pic Wizart� General Tab Pic Wizart� Communications Tab
Use RS232Stream port1Baud 9600Parity NTx pin_C6Rx pin_C7
http://www.mrscuole.net/anxapic/http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
na_RS232 16
La comunicazione RS-232La comunicazione seriale con un picmicro – Esempio 1 – Il software
Il Pic Wizard genera il seguente codice caratteristico del controllore scelto.
Mediante il communication tab del Pic Wizard abilitiamo l’uso del sottosistema hardware
(EUSART) per la comunicazione seriale e scegliamo i PIN Tx e Rx e le varie opzioni per la
comunicazione.
http://www.mrscuole.net/anxapic/http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
na_RS232 17
La comunicazione RS-232La comunicazione seriale con un picmicro – Esempio 1 – Il software
NOTA – Diversi controllori, in particolare quelli dell’ultima generazione con 40 e più pin
della serie 18F, contengono più sottosistemi di comunicazione seriale (EUSART) (alcuni
controllori possono abilitare addirittura più di 2 porte RS232). Per ogni porta possono essere
definite le varie opzioni di comunicazione e i rispettivi Pin per la trasmissione Tx e la ricezione
Rx. Il Pic wizard permette anche di associare un nome identificativo (opzione stream) per ogni
porta abilitata. Alcune built-in function del compilatore permettono la trasmissione dei dati
attraverso una opportuna porta seriale richiamando la stessa con il nome identificativo impostato
con la direttiva #USERS232(… options …). Vediamo qualche semplice esempio.
Il controllore 18F87K22 [80 pin] contiene due sottosistemi Hardware per la comunicazione
seriale definiti come EUSART1 ed EUSART2; questo controllore permette di abilitare due porte
hardware per la comunicazione RS232. Le direttive:
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8,stream=PORT1)
#use rs232(baud=115200,parity=N,xmit=PIN_G1,rcv=PIN_G2,bits=9,stream=PORT2)
Abilitano le due porte RS232 hardware del controllore, con le rispettive opzioni di
comunicazione, identificate come PORT1 e PORT2
http://www.mrscuole.net/anxapic/http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
na_RS232 18
La comunicazione RS-232La comunicazione seriale con un picmicro – Esempio 1 – Il software
NOTA – Alcune funzioni del compilatore (built-in function) operano sulla porta
opportuna accettando l’identificativo (stream) come parametro. Esempio:
//Set baud Port1 a 19200 bps
Setup_uart(baud, stream) � Setup_uart(19200,Port1);
//Trasmette ‘Ciao mondo’ via RS232 su Port2
fprintf(stream,cstring) � fprintf(Port2, ‘’Ciao mondo’’);
//Trasmette il carattere ‘*’ via RS232 su Port1
fputc(cdata, stream) � fputc(‘*’, Port1);
Non tutte le built-in function (utilizzate per la trasmissione seriale) del compilatore accettano la
opzione identificativa (stream) per la porta seriale in uso; consultare il manuale del CCS Pic-C
compiler per maggiori dettagli sull’uso di questo identificativo.
http://www.mrscuole.net/anxapic/http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
na_RS232 19
La comunicazione RS-232La comunicazione seriale con un picmicro – Esempio 1 – Il software
NOTA – Per il nostro esempio,
quando andiamo a definire le opzioni per la
comunicazione seriale nel Communication
Tab, notiamo che possono essere definite
sino a 4 porte RS232 di comunicazione
cosa abbastanza strana visto che il nostro
controllore 18F4620 presenta un solo
modulo HardWare EUSART per la
comunicazione seriale a cui sono associati
il pin RC6 per la trasmissione Tx e il pin
RC7 per la ricezione Rx.
Il CCS Pic-Compiler permette la definizione
di ulteriori porte di comunicazione, con le modalità viste in precedenza, e implementa il rispettivo
protocollo in modalità software.
http://www.mrscuole.net/anxapic/http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
na_RS232 20
La comunicazione RS-232La comunicazione seriale con un picmicro – Esempio 1 – Il software
NOTA – Naturalmente i Pin RC6 e RC7 sono associati al modulo HardWare di
comunicazione seriale mentre per le altre porte che si vogliono definire, bisogna associare
opportuni pin, tra quelli disponibili, per la trasmissione Tx e ricezione Rx dei dati.
Per le porte il cui protocollo di comunicazione viene impostato in modalità software, la velocità
di trasmissione dipende anche dalla frequenza del clock di sistema.
Consiglio una lettura del manuale del CCS Pic-Compiler e una visita all’ottimo forum della CCS
[http://www.ccsinfo.com/forum/] sulle modalità di impostazioni e uso della comunicazione
seriale definita via software; Naturalmente consultare il Data-Sheet del controllore, nel nostro
caso Pic18F4620, per le definizioni Hardware in uso.
NOTA – Nel nostro esempio utilizziamo una sola porta di comunicazione (quella Hw
del micro); in questo caso è superflo definire anche l’identificativo per la porta in uso in quanto
le funzioni implementate per la comunicazione seriale automaticamente reindirizzano verso la
unica porta definita dalla direttiva #USERS232(… option …)
http://www.mrscuole.net/anxapic/http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
na_RS232 21
La comunicazione RS-232La comunicazione seriale con un picmicro – Esempio 1 – Il software
NOTA – Se usiamo una unica porta di comunicazione (come nel nostro caso la unica
porta HardWare del Pic18F4620) possiamo omettere il nome identificativo (stream) in quanto la
porta in uso è unica e tutte le funzioni definite per la comunicazione seriale indirizzano verso la
porta definita prima del loro utilizzo. In particolare la direttiva #USE RS232(… option …) sarà:
#USE RS232(baud=9600, parity=N, xmit=Pin_C6, rcv=Pin_C7, bits=8);
Per la comunicazione seriale utilizza la porta HardWare con Pin_C6=Tx e Pin_C7=Rx
(corrispondente all’unico modulo Hardware del micro).
Ricordiamo: tutte le funzioni definite e in uso per la comunicazione seriale
reindirizzano verso la periferica seriale di I/O definito e in uso.
Ad esempio ricordiamo ancora che:
La funzione printf(…) riindirizza l’output (riportato tra le due parentesi tonde) verso la periferica
standard di I/O; nel caso del nostro sistema la periferica standard è quella seriale (USART)
http://www.mrscuole.net/anxapic/http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
na_RS232 22
La comunicazione RS-232La comunicazione seriale con un picmicro – Esempio 1 – Il software
Dopo queste dovute considerazioni torniamo al nostro esempio [file proteus VSM: na_Ex1-
RS232Pic.dsn]. Mediante il Pic Wizard è stato impostato il codice per le definizioni Hw del micro:
Per le considerazioni viste in precedenza questa direttiva può anche essere definita come:
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
http://www.mrscuole.net/anxapic/http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
na_RS232 23
La comunicazione RS-232La comunicazione seriale con un picmicro – Esempio 1 – Il software
Il main program – part1:
// Carattere Escape di controllo ‘\r’ per // il ritorno carrello
// Definizioni Hw del sistema// Driver display LCD 4x20// Definizioni per scheda AnxaPic v4.5
http://www.mrscuole.net/anxapic/http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
na_RS232 24
La comunicazione RS-232La comunicazione seriale con un picmicro – Esempio 1 – Il software
Il main program – part2:
// Notare il codice ‘%d’ per la formattazione // del valore inviato
Il programma è molto semplice e di facile comprensione; coloro che hanno qualche dubbio
possono verificare la simulazione software in ambinte Proteus VSM � file: na_Ex1-
PicMicro.dsn + codice di simulazione.
http://www.mrscuole.net/anxapic/http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
na_RS232 25
La comunicazione RS-232La comunicazione seriale con un picmicro – Esempio 1 – Simulazione
http://www.mrscuole.net/anxapic/http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
na_RS232 26
La comunicazione RS-232La comunicazione seriale con un picmicro – Esempi 2,3 – Il software
Dopo aver analizzato nel primo esempio come inviare dati via seriale (linea Tx collegamento
RS232), con il secondo esempio viene riproposto qualcosa di analogo con alcune ulteriori
delucidazioni sui tipo di dati trasmessi; consiglio di scaricare e analizzare con attenzione questo
esempio.
Con l’esempio 3 vedremo come leggere dei dati via seriale (linea Rx del collegamento Rs232).
Vengono proposte tre semplici buil-In function del CCS Pic-C compiler; come le funzioni
analizzate in precedenza queste nuove funzioni sono abilitate con l’inclusione della direttiva
#USE RS232(…..) come ampiamente spiegato in precedenza.
Le funzioni sono:
getc(); getch(); getchar();
Queste funzioni attendono la ricezione di un carattere sul pin Rx della RS232 e
ritornano il corrispondente valore.
Una ulteriore estensione è la funzione fgetc(stream) del tutto simile alle precedenti
con l’opzione del nome indicativo della porta seriale in uso.
http://www.mrscuole.net/anxapic/http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
na_RS232 27
La comunicazione RS-232La comunicazione seriale con un picmicro – Esempio 3 – Il software
Consultare opportunamente il manuale del compilatore per ulteriori delucidazioni sulle modalità
di impiego di queste funzioni.
Nel nostro 3° esempio proponiamo la lettura e visualizzazione di caratteri immessi via seriale
RS232; l’esempio è molto semplice e non merita sicuramente chiarimenti. Viene riportato il
codice sorgente della main function; tutte le considerazioni viste precedentemente valgono
anche in questo caso (e per gli esempi che seguiranno).
Una analisi step-by-step dellla simulazione in ambiente Proteus VSM agevolerà
sicuramente nelle comprensioni dovute.
http://www.mrscuole.net/anxapic/http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
na_RS232 28
La comunicazione RS-232La comunicazione seriale con un picmicro – Esempio 3 – Il software
Il main program – part1:
Per impostazioni e uso della RS232 del Pic18F4620 vedere le indicazioni dell’esempio 1
http://www.mrscuole.net/anxapic/http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
na_RS232 29
La comunicazione RS-232La comunicazione seriale con un picmicro – Esempio 3 – Il software
Il main program – part2:
http://www.mrscuole.net/anxapic/http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
na_RS232 30
Il main program – part3:
La comunicazione RS-232La comunicazione seriale con un picmicro – Esempio 3 – Il software
http://www.mrscuole.net/anxapic/http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
na_RS232 31
Il main program – part4:
La comunicazione RS-232La comunicazione seriale con un picmicro – Esempio 3 – Il software
Leggi dato sino a quando non viene rilevato un carattere opportuno
http://www.mrscuole.net/anxapic/http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
na_RS232 32
La comunicazione RS-232La comunicazione seriale con un picmicro – Esempio 4 – Il software
Con il 4° esempio viene proposto la lettura e visualizzazione di stringhe di caratteri, via seriale
RS232, utilizzando due built-In function del CCS Pic-C compiler.
Le funzioni sono: gets(stringa); puts(stringa);
Ulteriore estensioni sono le funzioni: fgets(stringa,stream) fputs(stringa, stream) del tutto
simile alle precedenti con l’opzione (stream) del nome indicativo della porta seriale in uso.
gets(stringa) � legge una serie di caratteri, via seriale RS232, sino a quando non viene
rilevato il carattere RETURN (\r - CR carriage return codice ascii 13 – Equivalente tasto «invio»
della tastiera di un PC); stringa è un opportuno array di carattere definito prima dell’uso della
funzione.
puts(stringa) � invia, via seriale RS232, una stringa di caratteri argomento della funzione piu i
due caratteri di controllo \r e \n (codice asscii 13 [CR] e 10 [LF]). Questa funzione è
equivalente a printf(….) la quale è preferibile perché più utile e duttile.
Una analisi step-by-step dellla simulazione in ambiente Proteus VSM agevolerà
sicuramente nelle comprensioni dovute.
http://www.mrscuole.net/anxapic/http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
na_RS232 33
La comunicazione RS-232La comunicazione seriale con un picmicro – Esempio 5 – Il software
Tutti i controllori dotati di USART hanno la possibilità di abilitare un «Interrupt
seriale» quando viene ricevuto un dato via RS232; il segnale di «Interrupt» avverte
che un dato è disponibile sul buffer (registro) seriale e può essere comodamente
letto. Con l’utilizzo dell’Interrupt sulla ricezione seriale ottimizziamo il lavoro del nostro
controllore il quanto la lettura dei dati su RS232 viene effettuata solo quando gli stessi sono
realmente disponibili.
Come tutti gli «Interrupts» disponibili per il nostro controllore, anche in questo caso, l’interrupt
su ricezione di un dato sul registro (buffer) seriale, deve essere opportunamente abilitato in
fase di impostazione Hardware del controllore; al solito il Pic Wizard del nostro sistema ci
agevola di molto il lavoro.
Con questo esempio vedremo come ricvere dati via RS232 con l’impiego della notifica di
interrupt sulla ricezione seriale.
http://www.mrscuole.net/anxapic/http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
na_RS232 34
La comunicazione RS-232La comunicazione seriale con un picmicro – Esempio 5 – Il software
Fondamentalmente via RS232 (Seriale) vengono trasmessi e ricevuti dati come
caratteri (char); un array contenente una serie di caratteri con il carattere NULL
(‘\0’) come terminatore, viene definito «stringa».
Anche i numeri possono essere rappresentati come una stringa: ad es. ‘1267’ rappresenta una
stringa di 4 caratteri mentre il valore 1267 rappresenta un numero di 4 cifre.
Nella trasmissione seriale anche i numeri vengono trasmessi (e ricevuti) come caratteri; Nel
linguaggio C esistono particolari funzioni, contenute nella libreria standard di base, che
permettono la conversione da stringa a valore numerico: es. atoi(stringa) � converte la
«stringa» di caratteri, rappresentata secondo il codice ascii, in valore numerico intero; in modo
analogo atof(stringa) � converte la «stringa» di caratteri, rappresentata secondo il codice
ascii, in valore numerico decimale; etc… .
Nel nostro esempio vedremo come utilizzare queste funzioni.
Una analisi step-by-step dellla simulazione in ambiente Proteus VSM agevolerà
sicuramente nelle comprensioni dovute.
http://www.mrscuole.net/anxapic/http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
na_RS232 35
La comunicazione RS-232La comunicazione seriale con un picmicro – Esempio 5 – Il software
Esempio 5: ricezione di caratteri via RS232 mediante utilizzo dell’interrupt che notifica la
disponibilità di un dato (char) sul buffer (registro) hardware della USART del controllore.
L’informazione ricevuta sarà composta dall’insieme di tutti i caratteri ricevuti e sarà completa
con la ricezione del carattere speciale RETURN (INVIO) della tastiera [CR � Carriage Return,
codice ascii = 13 decimale, 0x0D esadecimale, ‘\r’ controllo escape).
Analizziamo i punti fondamentali per definire la informazione ricevuta via RS232.
1. Definiamo un array di tipo char sul quale immagazineremo tutti i caratteri letti sino alla ricezione delcarattere speciale CR. La dimensione dell’array dipende dal massimo numero di caratteri che si vuolricevere; nel nostro caso il massimo numero di caratteri in ricezione sarà di 10 quindi dimensioneremo unarray di caratteri (Char) con 11 elementi. Ricordiamo che un array di caratteri è una «stringa» avente ilcarattere speciale NULL (‘\0’) come terminatore; per 10 caratteri si dovrà definire una stringa con 11elementi.
Stringa di tipo char di 11 elementi
http://www.mrscuole.net/anxapic/http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
na_RS232 36
La comunicazione RS-232La comunicazione seriale con un picmicro – Esempio 5 – Il software
2. Per ogni carattere ricevuto e letto, dopo aver verificato che non è il carattere CR, immagazziniamo lo stessonel nostro array
C
Stringa di tipo char di 11 elementi
3. Incrementiamo l’indice dell’array e verifichiamo che il suo valore non superi la dimensione massimadell’array; se questa condizione si verifica riportiamo il valore dell’indice a zero (cfr. Concetto di buffercircolare) e proseguiamo nella memorizzazione altrimenti continuiamo nella memorizzazione sino alricevimento del carattere speciale CR.
C i a
Stringa di tipo char di 11 elementi
http://www.mrscuole.net/anxapic/http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
na_RS232 37
La comunicazione RS-232La comunicazione seriale con un picmicro – Esempio 5 – Il software
4. Per ogni carattere ricevuto e letto, verifichiamo se è il carattere CR; se questa condizione è veraconcludiamo la nostra stringa con il carattere terminatore NULL
C i a o
Stringa di tipo char di 11 elementi
\0
5. La nostra informazione a questo punto è completa e può essere opportunamente elaborata. Possiamoriazzerare tutti gli indici e acquisire una nuova informazione.
N.B. � Nel nostro semplice esempio vedremo come ricevere ed elaborare stringhe di caratteri,
numeri interi e decimali acquisiti come stringhe di caratteri. L’esercizio proposto è molto
semplice ed è solo indicativo su come ricevere e trattare dati via RS232, naturalmente
l’argomento è molto vasto e và opportunamente elaborato e approfondito in modo adeguato.
http://www.mrscuole.net/anxapic/http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
na_RS232 38
La comunicazione RS-232La comunicazione seriale con un picmicro – Esempio 5 – Il software
Esempio 5 � Acquisizione e lettura di stringhe e caratteri via RS232; uso dell’interrupt nella
ricezione di un carattere sul buffer (registro) della USART del Micro (Pic18F4620).
1. Pic Wizard � Definizioni e impostazioni delle caratteristiche hardware del Micro
General Tab Communications Tab
http://www.mrscuole.net/anxapic/http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
na_RS232 39
La comunicazione RS-232La comunicazione seriale con un picmicro – Esempio 5 – Il software
1. Pic Wizard � Definizioni e impostazioni delle caratteristiche hardware del Micro
Interrupts Tab
Viene abilitato l’interrupt sulla ricezione seriale
Il codice Main() generato dal Pic Wizard
impostazioni hardware del Micro
La routine di interrupt seriale (RS232)
Interrupt seriale (RS232) abilitato
http://www.mrscuole.net/anxapic/http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
na_RS232 40
La comunicazione RS-232La comunicazione seriale con un picmicro – Esempio 5 – Il software
2. Software � Aggiungiamo il codice a quello generato dal Pic-Wizard
1. Definiamo un array di tipo char sul quale immagazineremo tutti i caratteri letti sino alla ricezione delcarattere speciale CR. La dimensione dell’array dipende dal massimo numero di caratteri che si vuolricevere; nel nostro caso il massimo numero di caratteri in ricezione sarà di 20 quindi dimensioneremo unarray di caratteri (Char) con 21 elementi [buf_size+1]. Ricordiamo che un array di caratteri è una «stringa»avente il carattere speciale NULL (‘\0’) come terminatore; per 20 caratteri si dovrà definire una stringa con21 elementi.
«Includiamo» i driver indispensabili al funzionamento del sistema; siccome lavoreremo con stringhe di caratteribisogna includere la libreria standard dell’Ansi C per il trattamento delle stringhe.
http://www.mrscuole.net/anxapic/http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
na_RS232 41
La comunicazione RS-232La comunicazione seriale con un picmicro – Esempio 5 – Il software
3. Software � Aggiungiamo il codice a quello generato dal Pic-Wizard
2. Per ogni carattere ricevuto e letto, dopo aver verificato che non è il carattere CR, immagazziniamo lo stessonel nostro array
3. Incrementiamo l’indice dell’array e verifichiamo che il suo valore non superi la dimensione massima dellostesso; se questa condizione si verifica riportiamo il valore dell’indice a zero (cfr. Concetto di buffercircolare) e proseguiamo nella memorizzazione sino al ricevimento del carattere speciale CR (‘\r’).
La routine di «Interrupt»
Viene letto il carattere CR (‘\r’)� Attiva flag per «informazione completa»
� Aggiungi terminatore NULL fine stringa (‘\0’)
� Azzera indice array per nuova lettura
http://www.mrscuole.net/anxapic/http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
na_RS232 42
La comunicazione RS-232La comunicazione seriale con un picmicro – Esempio 5 – Il software
4. Software � Aggiungiamo il codice a quello generato dal Pic-Wizard
«Main» function
«Main» function – Inizializzazioni, dichiarazioni variabili e visualizzazioni su display LCD
http://www.mrscuole.net/anxapic/http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
na_RS232 43
La comunicazione RS-232La comunicazione seriale con un picmicro – Esempio 5 – Il software
5. Software � Aggiungiamo il codice a quello generato dal Pic-Wizard
«Main» function
Su terminale Virtuale (Serial terminal) avviso per immissione nome + Enter. Per ogni carattere immesso einviato via RS232, sul controllore il carattere è disponibile sul buffer seriale; la routine di «Interrupt» intercettail dato disponibile e lo memorizza in un array. Quando viene letto il carattere CR (‘\r’) la stringa è completa eviene ablitato il flag (data_rx=TRUE) di informazione disponibile.
Il «nome» disponibile viene letto e ritrasmesso su terminale seriale con opportuno messaggio di saluto.
http://www.mrscuole.net/anxapic/http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
na_RS232 44
La comunicazione RS-232La comunicazione seriale con un picmicro – Esempio 5 – Il software
6. Software � Aggiungiamo il codice a quello generato dal Pic-Wizard
«Main» function
La procedura viene ripetuta per immissione e lettura via RS232 di un numero intero trasmesso come stringa dicaratteri. La stringa viene convertita in valore numero e visualizzato su display LCD.
http://www.mrscuole.net/anxapic/http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
na_RS232 45
La comunicazione RS-232La comunicazione seriale con un picmicro – Esempio 5 – Il software
7. Software � Aggiungiamo il codice a quello generato dal Pic-Wizard
«Main» function
Passaggio identico per la ricezione e visualizzazione di un numero decimale.
http://www.mrscuole.net/anxapic/http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
na_RS232 46
La comunicazione RS-232La comunicazione seriale con un picmicro – Proteus VSM Sim
File: na_Ex5-RS232Pic.dsn
http://www.mrscuole.net/anxapic/http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Top Related