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