La comunicazione RS-232

Transcript

La comunicazione RS-232
http://www.mrscuole.net/anxapic/
A. S. 2011-2012
La comunicazione RS232 con i Pic
Nicola Amoroso
[email protected]
na_RS232
http://www.mrscuole.net/anxapic/
1
http://www.mrscuole.net/anxapic/
Corso introduttivo sui
microcontrollori
http://www.mrscuole.net/anxapic/
La 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 rappresenta
appunto la tensione tipica dei circuiti digitali, mentre la tensione richiesta
dal protocollo RS232 ha livelli differenti (+/- 12 V).
na_RS232
http://www.mrscuole.net/anxapic/
2
http://www.mrscuole.net/anxapic/
La comunicazione RS-232
http://www.mrscuole.net/anxapic/
La comunicazione seriale con un picmicro
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. .
na_RS232
http://www.mrscuole.net/anxapic/
3
http://www.mrscuole.net/anxapic/
La comunicazione RS-232
http://www.mrscuole.net/anxapic/
La comunicazione seriale con un picmicro
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. .
na_RS232
http://www.mrscuole.net/anxapic/
4
http://www.mrscuole.net/anxapic/
La comunicazione RS-232
http://www.mrscuole.net/anxapic/
La comunicazione seriale con un picmicro
Esempio di circuito a pompa di carica
Per ricavare le tensioni positive e negative necessarie per garantire i livelli
richiesti dalla RS232 è pratica comune utilizzare un duplicatore ed un
invertitore di tensione a pompa di carica. Le figure A e B mostrano come
viene 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 in
un secondo contenitore C1 posto a maggiore altezza.
na_RS232
http://www.mrscuole.net/anxapic/
5
http://www.mrscuole.net/anxapic/
La comunicazione RS-232
http://www.mrscuole.net/anxapic/
La comunicazione seriale con un picmicro
Più in dettaglio:
• Inizialmente il condensatore C2 viene connesso tra massa e Vcc; quindi
la corrente (in blu) carica C2 alla tensione di alimentazione (in giallo).
Quindi Vc2 = Vcc
• C2 viene successivamente connesso tra Vcc ed un secondo
condensatore C1; la tensione ai capi di C1 deve essere uguale alla
somma di Vcc e Vc2 e quindi C2 si scarica verso C1, che aumenta la
propria tensione rispetto a massa.
• Il processo è ripetuto fino a quando la tensione ai capi di C1 è uguale a
2Vcc: 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
na_RS232
http://www.mrscuole.net/anxapic/
6
http://www.mrscuole.net/anxapic/
La comunicazione RS-232
http://www.mrscuole.net/anxapic/
La comunicazione seriale con un picmicro
Pic RS232 Tx
Pic RS232 Rx
AnxaPic v1.0 – Interfaccia seriale RS232 con traslatore
di livello max232
na_RS232
http://www.mrscuole.net/anxapic/
7
http://www.mrscuole.net/anxapic/
La comunicazione RS-232
http://www.mrscuole.net/anxapic/
La comunicazione seriale con un picmicro
Altro semplice schema elettrico per il collegamento di un Max232 con microcontrollore Pic 40 Pin
na_RS232
http://www.mrscuole.net/anxapic/
8
http://www.mrscuole.net/anxapic/
La comunicazione RS-232
http://www.mrscuole.net/anxapic/
La 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 fullduplex.
na_RS232
http://www.mrscuole.net/anxapic/
9
http://www.mrscuole.net/anxapic/
La comunicazione RS-232
http://www.mrscuole.net/anxapic/
La 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.
na_RS232
http://www.mrscuole.net/anxapic/
10
http://www.mrscuole.net/anxapic/
La comunicazione RS-232
http://www.mrscuole.net/anxapic/
La 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 chiamati
sequenze di escape. In pratica il carattere \n è il carattere di nuova linea (Line Feed o LF - in genere viene
identificato più precisamente come carattere di controllo. Anche se non visualizza niente anche lui ha un
codice 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 trovava
prima di cambiare linea, il carattere \r, invece, fa avanzare alla linea successiva e riporta il cursore alla prima
colonna 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).
na_RS232
http://www.mrscuole.net/anxapic/
11
http://www.mrscuole.net/anxapic/
La comunicazione RS-232
http://www.mrscuole.net/anxapic/
La comunicazione seriale con un picmicro
Come richiamato in precedenza la funzione printf(…) supporta
anche i parametri per la formattazione del testo in uscita [cfr.
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 carattere
manuale CCS Pic-C compiler] e le 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)
Alcune tra le più utili sequenze escape di controllo
na_RS232
http://www.mrscuole.net/anxapic/
12
http://www.mrscuole.net/anxapic/
La comunicazione RS-232
http://www.mrscuole.net/anxapic/
La 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).
RS232 TTL Comp
Pic18F4620
na_RS232
Device RS232
http://www.mrscuole.net/anxapic/
13
http://www.mrscuole.net/anxapic/
La comunicazione RS-232
http://www.mrscuole.net/anxapic/
La 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
na_RS232
http://www.mrscuole.net/anxapic/
14
http://www.mrscuole.net/anxapic/
La comunicazione RS-232
http://www.mrscuole.net/anxapic/
La comunicazione seriale con un picmicro – Esempio 1 – Il software
Il Pic Wizard del CCS Pic-C Compiler aiuta nella definizione Hardware del Microcontrollore:
Use
Stream
Baud
Parity
Tx
Rx
Pic Wizart General Tab
na_RS232
RS232
port1
9600
N
pin_C6
pin_C7
Pic Wizart Communications Tab
http://www.mrscuole.net/anxapic/
15
http://www.mrscuole.net/anxapic/
La comunicazione RS-232
http://www.mrscuole.net/anxapic/
La 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.
na_RS232
http://www.mrscuole.net/anxapic/
16
http://www.mrscuole.net/anxapic/
La comunicazione RS-232
http://www.mrscuole.net/anxapic/
La 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
na_RS232
http://www.mrscuole.net/anxapic/
17
http://www.mrscuole.net/anxapic/
La comunicazione RS-232
http://www.mrscuole.net/anxapic/
La 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.
na_RS232
http://www.mrscuole.net/anxapic/
18
http://www.mrscuole.net/anxapic/
La comunicazione RS-232
http://www.mrscuole.net/anxapic/
La 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.
na_RS232
http://www.mrscuole.net/anxapic/
19
http://www.mrscuole.net/anxapic/
La comunicazione RS-232
http://www.mrscuole.net/anxapic/
La 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 …)
na_RS232
http://www.mrscuole.net/anxapic/
20
http://www.mrscuole.net/anxapic/
La comunicazione RS-232
http://www.mrscuole.net/anxapic/
La 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)
na_RS232
http://www.mrscuole.net/anxapic/
21
http://www.mrscuole.net/anxapic/
La comunicazione RS-232
http://www.mrscuole.net/anxapic/
La comunicazione seriale con un picmicro – Esempio 1 – Il software
Dopo queste dovute considerazioni torniamo al nostro esempio [file proteus VSM: na_Ex1RS232Pic.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)
na_RS232
http://www.mrscuole.net/anxapic/
22
http://www.mrscuole.net/anxapic/
La comunicazione RS-232
http://www.mrscuole.net/anxapic/
La comunicazione seriale con un picmicro – Esempio 1 – Il software
Il main program – part1:
// Definizioni Hw del sistema
// Driver display LCD 4x20
// Definizioni per scheda AnxaPic v4.5
// Carattere Escape di controllo ‘\r’ per
// il ritorno carrello
na_RS232
http://www.mrscuole.net/anxapic/
23
http://www.mrscuole.net/anxapic/
La comunicazione RS-232
http://www.mrscuole.net/anxapic/
La 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_Ex1PicMicro.dsn + codice di simulazione.
na_RS232
http://www.mrscuole.net/anxapic/
24
http://www.mrscuole.net/anxapic/
La comunicazione RS-232
http://www.mrscuole.net/anxapic/
La comunicazione seriale con un picmicro – Esempio 1 – Simulazione
na_RS232
http://www.mrscuole.net/anxapic/
25
http://www.mrscuole.net/anxapic/
La comunicazione RS-232
http://www.mrscuole.net/anxapic/
La 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.
na_RS232
http://www.mrscuole.net/anxapic/
26
http://www.mrscuole.net/anxapic/
La comunicazione RS-232
http://www.mrscuole.net/anxapic/
La 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.
na_RS232
http://www.mrscuole.net/anxapic/
27
http://www.mrscuole.net/anxapic/
La comunicazione RS-232
http://www.mrscuole.net/anxapic/
La 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
na_RS232
http://www.mrscuole.net/anxapic/
28
http://www.mrscuole.net/anxapic/
La comunicazione RS-232
http://www.mrscuole.net/anxapic/
La comunicazione seriale con un picmicro – Esempio 3 – Il software
Il main program – part2:
na_RS232
http://www.mrscuole.net/anxapic/
29
http://www.mrscuole.net/anxapic/
La comunicazione RS-232
http://www.mrscuole.net/anxapic/
La comunicazione seriale con un picmicro – Esempio 3 – Il software
Il main program – part3:
na_RS232
http://www.mrscuole.net/anxapic/
30
http://www.mrscuole.net/anxapic/
La comunicazione RS-232
http://www.mrscuole.net/anxapic/
La comunicazione seriale con un picmicro – Esempio 3 – Il software
Il main program – part4:
Leggi dato sino a quando non viene rilevato un carattere opportuno
na_RS232
http://www.mrscuole.net/anxapic/
31
http://www.mrscuole.net/anxapic/
La comunicazione RS-232
http://www.mrscuole.net/anxapic/
La 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.
na_RS232
http://www.mrscuole.net/anxapic/
32
http://www.mrscuole.net/anxapic/
La comunicazione RS-232
http://www.mrscuole.net/anxapic/
La 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.
na_RS232
http://www.mrscuole.net/anxapic/
33
http://www.mrscuole.net/anxapic/
La comunicazione RS-232
http://www.mrscuole.net/anxapic/
La 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.
na_RS232
http://www.mrscuole.net/anxapic/
34
http://www.mrscuole.net/anxapic/
La comunicazione RS-232
http://www.mrscuole.net/anxapic/
La 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 del
carattere speciale CR. La dimensione dell’array dipende dal massimo numero di caratteri che si vuol
ricevere; nel nostro caso il massimo numero di caratteri in ricezione sarà di 10 quindi dimensioneremo un
array di caratteri (Char) con 11 elementi. Ricordiamo che un array di caratteri è una «stringa» avente il
carattere speciale NULL (‘\0’) come terminatore; per 10 caratteri si dovrà definire una stringa con 11
elementi.
Stringa di tipo char di 11 elementi
na_RS232
http://www.mrscuole.net/anxapic/
35
http://www.mrscuole.net/anxapic/
La comunicazione RS-232
http://www.mrscuole.net/anxapic/
La 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 stesso
nel nostro array
Stringa di tipo char di 11 elementi
C
3. Incrementiamo l’indice dell’array e verifichiamo che il suo valore non superi la dimensione massima
dell’array; se questa condizione si verifica riportiamo il valore dell’indice a zero (cfr. Concetto di buffer
circolare) e proseguiamo nella memorizzazione altrimenti continuiamo nella memorizzazione sino al
ricevimento del carattere speciale CR.
Stringa di tipo char di 11 elementi
C
na_RS232
i
a
http://www.mrscuole.net/anxapic/
36
http://www.mrscuole.net/anxapic/
La comunicazione RS-232
http://www.mrscuole.net/anxapic/
La comunicazione seriale con un picmicro – Esempio 5 – Il software
4. Per ogni carattere ricevuto e letto, verifichiamo se è il carattere CR; se questa condizione è vera
concludiamo la nostra stringa con il carattere terminatore NULL
Stringa di tipo char di 11 elementi
C
i
a
o
\0
5. La nostra informazione a questo punto è completa e può essere opportunamente elaborata. Possiamo
riazzerare 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.
na_RS232
http://www.mrscuole.net/anxapic/
37
http://www.mrscuole.net/anxapic/
La comunicazione RS-232
http://www.mrscuole.net/anxapic/
La 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
na_RS232
Communications Tab
http://www.mrscuole.net/anxapic/
38
http://www.mrscuole.net/anxapic/
La comunicazione RS-232
http://www.mrscuole.net/anxapic/
La comunicazione seriale con un picmicro – Esempio 5 – Il software
1. Pic Wizard Definizioni e impostazioni delle caratteristiche hardware del Micro
Viene abilitato l’interrupt sulla ricezione seriale
impostazioni hardware del Micro
La routine di interrupt seriale (RS232)
Interrupt seriale
(RS232) abilitato
Interrupts Tab
na_RS232
Il codice Main() generato dal Pic Wizard
http://www.mrscuole.net/anxapic/
39
http://www.mrscuole.net/anxapic/
La comunicazione RS-232
http://www.mrscuole.net/anxapic/
La comunicazione seriale con un picmicro – Esempio 5 – Il software
2. Software Aggiungiamo il codice a quello generato dal Pic-Wizard
«Includiamo» i driver indispensabili al funzionamento del sistema; siccome lavoreremo con stringhe di caratteri
bisogna includere la libreria standard dell’Ansi C per il trattamento delle stringhe.
1. Definiamo un array di tipo char sul quale immagazineremo tutti i caratteri letti sino alla ricezione del
carattere speciale CR. La dimensione dell’array dipende dal massimo numero di caratteri che si vuol
ricevere; nel nostro caso il massimo numero di caratteri in ricezione sarà di 20 quindi dimensioneremo un
array 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 con
21 elementi.
na_RS232
http://www.mrscuole.net/anxapic/
40
http://www.mrscuole.net/anxapic/
La comunicazione RS-232
http://www.mrscuole.net/anxapic/
La comunicazione seriale con un picmicro – Esempio 5 – Il software
3. Software Aggiungiamo il codice a quello generato dal Pic-Wizard
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
2. Per ogni carattere ricevuto e letto, dopo aver verificato che non è il carattere CR, immagazziniamo lo stesso
nel nostro array
3. Incrementiamo l’indice dell’array e verifichiamo che il suo valore non superi la dimensione massima dello
stesso; se questa condizione si verifica riportiamo il valore dell’indice a zero (cfr. Concetto di buffer
circolare) e proseguiamo nella memorizzazione sino al ricevimento del carattere speciale CR (‘\r’).
na_RS232
http://www.mrscuole.net/anxapic/
41
http://www.mrscuole.net/anxapic/
La comunicazione RS-232
http://www.mrscuole.net/anxapic/
La 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
na_RS232
http://www.mrscuole.net/anxapic/
42
http://www.mrscuole.net/anxapic/
La comunicazione RS-232
http://www.mrscuole.net/anxapic/
La comunicazione seriale con un picmicro – Esempio 5 – Il software
5. Software Aggiungiamo il codice a quello generato dal Pic-Wizard
Su terminale Virtuale (Serial terminal) avviso per immissione nome + Enter. Per ogni carattere immesso e
inviato via RS232, sul controllore il carattere è disponibile sul buffer seriale; la routine di «Interrupt» intercetta
il dato disponibile e lo memorizza in un array. Quando viene letto il carattere CR (‘\r’) la stringa è completa e
viene ablitato il flag (data_rx=TRUE) di informazione disponibile.
«Main» function
Il «nome» disponibile viene letto e ritrasmesso su terminale seriale con opportuno messaggio di saluto.
na_RS232
http://www.mrscuole.net/anxapic/
43
http://www.mrscuole.net/anxapic/
La comunicazione RS-232
http://www.mrscuole.net/anxapic/
La 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 di
caratteri. La stringa viene convertita in valore numero e visualizzato su display LCD.
na_RS232
http://www.mrscuole.net/anxapic/
44
http://www.mrscuole.net/anxapic/
La comunicazione RS-232
http://www.mrscuole.net/anxapic/
La 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.
na_RS232
http://www.mrscuole.net/anxapic/
45
http://www.mrscuole.net/anxapic/
La comunicazione RS-232
http://www.mrscuole.net/anxapic/
La comunicazione seriale con un picmicro – Proteus VSM Sim
File: na_Ex5-RS232Pic.dsn
na_RS232
http://www.mrscuole.net/anxapic/
46
http://www.mrscuole.net/anxapic/
La comunicazione RS-232