Comunicazioni seriali (parte seconda)

Похожие документы
Le comunicazioni seriali RS232

COMUNICAZIONE SERIALE a cura dell' Ing. Buttolo Marco

Comunicazione. Prof. Antonino Mazzeo. Corso di Laurea Specialistica in Ingegneria Informatica

USART PIC 16F876. R/W-0 R/W-0 R/W-0 R/W-0 U-0 R/W-0 R-1 R/W-0 CSRC TX9 TXEN SYNC _ BRGH TRMT TX9D Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

Cosa è? Come lo si usa? Come iniziare? Author: Ing. Sebastiano Giannitto (ITIS M.BARTOLO PACHINO)

Bus RS-232. Ing. Gianfranco Miele April 28, 2011

Davide Gennaretti, Matteo Nicolini

per(il(corso(di(architetture(dei(sistemi(di(elaborazione(

Corso di programmazione Arduino DI MALVEZZI DAVIDE

MICROCONTROLLORI: UN PROGRAMMA PASSO

ELETTRONICA II. Prof. Dante Del Corso - Politecnico di Torino. Gruppo H: Sistemi Elettronici Lezione n H - 5: Collegamenti seriali Conclusione

Blocchi funzione: FbModbusAsciiMs

Raspberry Pi: Hardware Programming. Rossi Pietro Alberto

Lab. Sistemi - Classe 5Bn A. S. 2000/2001 ITIS Primo Levi - Torino AA.AA. STANDARD SERIALE DI COMUNICAZIONE: RS232 Lo standard seriale di

sms per AUTO Allarme Il problema dei ladri d auto è uno dei più

17^ parte : Bluetooth Shield SLD63030P. Author: Ing. Sebastiano Giannitto (ITIS M.BARTOLO PACHINO)

Il Theremin con il microcontrollore

Interfaccia seriale per LM709SW

Uno dei metodi più utilizzati e

Manuale d uso e manutenzione

Il protocollo RS Introduzione. 1.2 Lo Standard RS-232

Progetto 3: Termometro con convertitore A/D

Page 1. ElapC8 04/11/ DDC 1 ELETTRONICA APPLICATA E MISURE. C8: Esempi di collegamenti seriali. Ingegneria dell Informazione

I BUS DI COMUNICAZIONE SERIALI

I BUS DI COMUNICAZIONE SERIALI

Moduli Bluetooth 02 - programmazione AT

L interfaccia più comune fra il computer (DTE) ed il modem (DCE) è la RS232,

PROGRAMMAZIONE DELL ACE

CORSO ARDUINO. Jacopo Belli Giulio Fieramosca Luca Mattii GOLEM Jacopo Belli Giulio Fieramosca Luca Mattii

Opera Crate Monitor Software Reference Manual V2.0

Sistemi Operativi SISTEMI DI INPUT/OUTPUT. D. Talia - UNICAL. Sistemi Operativi 10.1

Protocolli di Comunicazione Elettronica dei Sistemi Digitali L-A Università di Bologna, Cesena

Tecniche di Comunicazione Digitale

Oggetto: Installazione software PLC Delta

Architettura del PIC 18F452

Manuale utente. Quinx Box serie 200/300/400. Ethernet RS232 - TCP/IP converter

Tipi di Bus. Bus sincrono. Comunicazioni nell elaboratore (e oltre) Bus sincroni e asincroni Standard commerciali (PCI,SCSI,USB)

Controllo comunicazioni

Introduzione alla scheda Arduino/Genuino

Componenti principali

EEPROM SERIALI IN I2C BUS.

Istruzioni per il trasferimento di dati dal fotometro Lovibond PoolDirect / MultiDirect SpectroDirect / PCSPECTRO II

CARATTERISTICHE E FUNZIONAMENTO MANUALE D USO. RICEVITORE GPS CON INTERFACCIA Compact Flash BC-307

Conversione Analogico/Digitale

22/09/2010. Rossato Alessio

Componenti principali. Programma cablato. Architettura di Von Neumann. Programma cablato. Cos e un programma? Componenti e connessioni

GESTIONE DELLE PERIFERICHE D INGRESSO/USCITA ARGOMENTI

EML-16 EML-16. Pulses concentrator. Concentratore impulsi MODBUS COMMUNICATION PROTOCOL PROTOCOLLO DI COMUNICAZIONE MODBUS

Author: Ing. Sebastiano Giannitto (ITIS M.BARTOLO PACHINO)

OPEN DRIVE OPEN DRIVE

Componenti e connessioni. Capitolo 3

Il sottosistema di I/O (Richiamo)

Sistemi Operativi. Sistemi I/O SISTEMI DI INPUT/OUTPUT. Hardware di I/O. Interfaccia di I/O per le applicazioni. Sottosistema per l I/O del kernel

GENERALITÀ. Unità: Canali di comunicazione:

ELETTRONICA II. Prof. Dante Del Corso - Politecnico di Torino

Relazione Tecnica Sensore di Temperatura con interfacciamento microcontroller Arduino 1.3

LE ALTRE BOARD ARDUINO

DIGITALE IN HF RTTY & PSK31

Fondamenti sugli standard di interfaccia RS-232 e IEEE-488

A.1 Programma di comunicazione su porta seriale

Lan Ethernet. Appunti a cura del prof. Mario Catalano

Dimensioni 101mm x 71mm x 28mm (H) Alimentazione Vac/Vcc Morsettiera o alimentatore plug, o da porta USB Connessioni lato RS232 e USB

Corso di BASCOM AVR - ( 9 ) Corso Teorico/Pratico di programmazione in BASCOM AVR. Autore: DAMINO Salvatore. Codice Morse. (3).

MODBUS-RTU per TWM3IO

Sezione di Analog/Digital

TRASMISSIONE DATI tra PC e CN (nozioni teoriche essenziali)

M1410 Ingresso/Uscita parallelo


Corso Arduino Maggio Riccardo Binetti Lezione 1 - Blinking LEDs with style

Nicola Amoroso

Web : Per la connessione con il PLC integrato di un inverter Delta VFD consultare anche la nota al termine del presente documento.

Транскрипт:

Comunicazioni seriali (parte seconda) Antonio Elio Marino ITIS Marconi Pontedera (PI) 19 marzo 2017 versione 1.0

Contents 1 RS-232 2 1.1 Trasmissione............................... 3 1.2 Ricezione................................ 3 1.3 Converter................................ 3 2 USART 4 2.1 UDR................................... 4 2.2 UCSRB................................. 5 2.3 UCSRC................................. 5 3 Codice per l USART 7 3.1 Inizializzazione............................. 7 3.2 Leggere e scrivere dati......................... 7 3.2.1 Leggere dall USART...................... 7 3.2.2 Scrivere con l USART..................... 8 3.3 Esempio di programma in C...................... 8 4 Comunicare 11 4.1 Collegarsi ad una porta COM fisica.................. 11 4.2 Collegarsi ad una porta COM virtuale................ 11 4.3 Chip CP2102.............................. 11 4.4 Chip PL2303.............................. 11 4.5 Leggere da pc.............................. 11 5 Sitografia 13 1

Chapter 1 RS-232 È un protocollo asincrono di comunicazione seriale. È chiamato asincrono perché non è presente un segnale di clock sincronizzante (come in altre comunicazioni seriali, ad esempio l I2C e l SPI). Questo protocollo si sincronizza da sé. Per capire quindi la durata di un clock vengono usati due bit, uno di start ed uno di stop. Nell RS 232 sono presenti due cavi, in cui i dati viaggiano in direzioni opposte, cosicché per il primo cavo un dispositivo è un ricevitore e l altro un trasmettitore e per l altro i ruoli si invertono. A volte è presente un terzo cavo, il ground (GND). Nell RS 232 l HIGH è trasmesso tramite un potenziale di -12V e il LOW tramite un potenziale di 12V (ovviamente rispetto al ground). Sebbene non ci sia sincronizzazione, esistono comunque delle velocità di trasmissione dati standard. Il numero di segnali trasmessi per secondo è detto BAUD RATE. Qualche baud rate standard è: 1200 2400 4800 9600 19200 38400 57600 115200 2

CHAPTER 1. RS-232 3 Per trasmettere un singolo byte, oltre ai classici 8 bit che lo formano, vanno trasmessi anche dei bit di start e dei bit di stop. Il numero di stop bit può essere 1 o 2. Noi useremo il caso singolo (un solo bit di stop). Va trasmesso anche il bit di parità (vedremo in seguito a cosa serve). 1.1 Trasmissione Quando non c è trasmissione il cavo è settato al livello HIGH (-12V). Questo stato è detto condizione di stop. Nel momento in cui TX deve spedire un dato mette il cavo di trasmissione a LOW per 104 micro secondi (questo è lo start bit ed è sempre 0), poi invia ogni bit con una durata di 104 microsecondi per bit infine ritorna allo stato HIGH (stop bit, sempre 1). 1.2 Ricezione Il ricevitore è in attesa dello start bit (ovvero attende che il segnale vada a LOW, -12V). Quando riceve lo start bit aspetta per 52 microsecondi (metà della durata dello start bit, 104 microsecondi) e rilegge il segnale, per essere sicuro che sia effettivamente uno start bit e non una variazione di tensione casuale. Adesso aspetta altri 104 microsecondi e legge il valore (nota che adesso si trova a metà del periodo del primo bit). dopodiché legge ogni 104 microsecondi, così da trovarsi sempre nel mezzo del bit ricevuto, fino a che la trasmissione non termina. 1.3 Converter Il segnale digitale viaggia attraverso l RS 232 tra i -12 (HIGH) ed i 12 V (LOW) mentre il microcontrollore è tra gli 0 V (LOW) e i 5V (HIGH). Per farli comunicare bisogna quindi prima usare un level converter, il cui scopo è ovviamente convertire i livelli del segnale. Si può comprare su Internet o crearlo facilmente. Una guida per crearlo è qui: http://extremeelectronics.co.in/avr-tutorials/ rs232-communication-the-level-conversion/, sito da cui sono state prese molte informazioni per scrivere questi appunti.

Chapter 2 USART L USART è l Universal Synchronous Asynchronous Receiver Transmitter. I registri dell USART sono 6: UDR (Usart Data Register): è un registro doppio. Dentro ci vanno i dati che vengono trasmessi o ricevuti; UCSRA, UCSRB e UCSRC: Usart Control Status Register. Sono 3, l A, il B ed il C e sono usati per configurare l USART; UBRRH e UBRRL: servono a configurare il baud rate. 2.1 UDR numero bit 7 6 5 4 3 2 1 0 nome flag RXC TXC UDRE FE DOR PE U2X MPCM valore di default 0 0 1 0 0 0 0 0 RXC è settato dalla CPU quando l USART ha completato la ricezione di un byte ed è possibile leggerlo dentro l UDR. È possibile usarlo per generare un interrupt; TXC è settato dalla CPU quando l USART ha completato la trasmissione di un byte ed è possibile inviare un nuovo dato tramite l UDR. È possibile usarlo per generare un interrupt; UDRE: Usart Data Register Empty, se è settato indica che il buffer (l UDR) è pronto a ricevere un nuovo dato. Può essere usato per generare un interrupt (vedi UCSRB). Se è resettato non è possibile scrivere nell UDR; t56 FE: Frame Error, è settato se è stato rilevato un errore (ovvero quando il primo bit stop del carattere successivo è zero); 4

CHAPTER 2. USART 5 DOR: Data OverRun, è settato se è stato rilevato un overrun, ovvero quando il data buffer e il data shift register sono pieni ed è arrivato un nuovo start bit; PE: Parity Error, è settato se il parity check bit è abilitato (UPM1=1) e il carattere successivo ha un parity error quando è ricevuto; U2X: settandolo si raddoppia la velocità della comunicazione asincrona; MPCM: Multi Processor Communication Mode: se settato viene abilitato. Non ci interessa, quindi verrà ignorato. 2.2 UCSRB numero bit 7 6 5 4 3 2 1 0 nome flag RXCIE TXCIE UDRIE RXEN TXEN UCSZ2 RXB8 TXB8 valore di default 0 0 0 0 0 0 0 0 RXCIE: Receive Complete Interrupt Enable Quando è settato, il corrispondente interrupt in UCSRA (flag RXC) è attivato; TXCIE: Transmit Complete Interrupt Enable Quando è settato, il corrispondente interrupt in UCSRA (flag TXC) è attivato; UDRIE: Usart Data Register Empty Interrupt Enable - Quando è settato, il corrispondente interrupt in UCSRA (flag UDR) è attivato; RXEN: Receiver ENable - Quando è settato, abilita la ricezione; TXEN: Transmitter ENable - Quando è settato, la trasmissione è abilitata; UCSZ2: Usart Character Size - Questo bit, combinato con UCSZ1 e UCSZ0 (nel registro UCSRC) setta in numero dei bit di un carattere in un frame; RXB8: Receive data Bit 8: è il nono bit del carattere ricevuto quando si usano frame a nove bit; TXB8: Trasmit data Bit 8: è il nono bit del carattere trasmesso quando si usano frame a nove bit. Quando si inizia una comunicazione seriale, le flag RXEN o TXEN vanno settati (in base a quel che ci serve). 2.3 UCSRC numero bit 7 6 5 4 3 2 1 0 nome flag URSEL UMSEL UPM1 UPM0 USBS UCSZ1 UCSZ0 UCPOL valore di default 0 0 0 0 0 0 0 0 Nota: il registro UCSRC ed il registro UBRRH (discusso in seguito) condividono lo stesso indirizzo, quindi per determinare quale registro usare bisogna

CHAPTER 2. USART 6 modificare il settimo bit (se è settato verrà usato il registro UCSRC, altrimenti l UBRRH. Tale bit si chiama URSEL. URSEL: Usart Register Select - vedi la nota sopra UMSEL: USART Mode Select - seleziona il modo: se è settato, la comunicazione sarà sincrona, altrimenti è asincrona. USBS: USART Stop Bit Select - questo bit seleziona il numero di bit stop nella trasmissione. Se è settato saranno due bit, altrimenti uno. UCSZ: USART Character size - Sono tre bit (uno nel registro UCSRB) e settano il numero di bit dei dati trasmessi. Normalmente sono 8, ma è possibile selezionare anche 5, 6, 7, o 9 bit per frame. Ecco le combinazioni: UCSZ2 UCSZ1 UCSZ0 Character Size 0 0 0 5 Bit 0 0 1 6 Bit 0 1 0 7 Bit 0 1 1 8 Bit 1 0 0 Reserved 1 0 1 Reserved 1 1 0 Reserved 1 1 1 9 Bit UBRR: USART Baud Rate Register - è un registro a 16 bit, UBBRH è la parte alta e UBBRL è la parte bassa. Il C comunque permette l accesso a registri a 16 bit. Questo registro è usato per determinare la velocità di trasmissione. Non va inserito il baud rate direttamente, ma va prima calcolato secondo la formula: UBRR = f osc 16 baudrate 1 con f osc la frequenza della CPU, nel nostro caso 16MHz. Ad esempio, se voglio usare un baud rate di 9600 dovrei scrivere il valore 103.1667 dentro l UBRR. L UBRR accetta solo valori interi, quindi conviene approssimare il suo valore all intero più vicino (103, nel nostro caso) per minimizzare l errore.

Chapter 3 Codice per l USART 3.1 Inizializzazione Esempio di inizializzazione dell USART: 1 #i n c l u d e <avr / i o. h> 2 #i n c l u d e <i n t t y p e s. h> 3 4 void USARTInit ( u i n t 1 6 t u b r r v a l u e ) { 5 // Set Baud r a t e 6 UBRR= u b r r v a l u e ; 7 8 / S e t Frame Format 9 >> Asynchronous mode 10 >> No Parity 11 >> 1 StopBit 12 >> char s i z e 8 13 / 14 15 UCSRC=(1<<URSEL) (3<<UCSZ0) ; 16 17 // Enable The r e c e i v e r and t r a n s m i t t e r 18 UCSRB=(1<<RXEN) (1<<TXEN) ; 19 } 3.2 Leggere e scrivere dati Per leggere e scrivere i dati posso creare due funzioni ad hoc, USARTReadChar() e USARTWriteChar(). 3.2.1 Leggere dall USART 7

CHAPTER 3. CODICE PER L USART 8 1 char USARTReadChar ( ) { 2 //Wait u n t i l a data i s a v a i l a b l e 3 while (! (UCSRA & (1<<RXC) ) ) { 4 //Do nothing 5 } 6 //Now USART has got data from host 7 //and i s a v a i l a b l e i s b u f f e r 8 return UDR; 3.2.2 Scrivere con l USART 1 void USARTWriteChar( char data ) { 2 //Wait u n t i l the t r a n s m i t t e r i s ready 3 4 while (! (UCSRA & (1<<UDRE) ) ) { 5 //Do nothing 6 } 7 8 //Now w r i t e the data to USART b u f f e r 9 10 UDR=data ; 11 } Nota: per trasmettere bisogna scrivere dentro l UDR, quindi il codice è: 1 UDR = d a t o d a s p e d i r e ; mentre per ricevere bisogna prelevare il dato dall UDR: 1 d a t o r i c e v u t o = UDR; 3.3 Esempio di programma in C 1 / 2 3 A simple program to demonstrate the use o f USART o f AVR micro 4 5 6 7 See : www. extremeelectronics. co. in f o r more i n f o 8 9 Author : Avinash Gupta 10 E Mail : me@avinashgupta. com 11 Date : 29 Dec 2008 12 13 Hardware : 14 ATmega8 @ 16MHz 15 16 S u i t a b l e l e v e l c o n v e r t e r on RX/TX l i n e 17 Connected t o PC v i a RS232

CHAPTER 3. CODICE PER L USART 9 18 PC Software : Hyper t e r minal @ 19200 baud 19 No Parity, 1 Stop Bit, 20 Flow Control = NONE 21 22 / 23 24 #i n c l u d e <avr / i o. h> 25 #i n c l u d e <i n t t y p e s. h> 26 27 // This f u n c t i o n i s used to i n i t i a l i z e the USART 28 // at a given UBRR value 29 void USARTInit ( u i n t 1 6 t u b r r v a l u e ) { 30 31 // Set Baud r a t e 32 33 UBRRL = u b r r v a l u e ; 34 UBRRH = ( ubrr value >>8) ; 35 36 / S e t Frame Format 37 38 >> Asynchronous mode 39 >> No Parity 40 >> 1 StopBit 41 42 >> char s i z e 8 43 / 44 45 UCSRC=(1<<URSEL) (3<<UCSZ0) ; 46 47 // Enable The r e c e i v e r and t r a n s m i t t e r 48 UCSRB=(1<<RXEN) (1<<TXEN) ; 49 } 50 51 // This f u n c t i o n i s used to read the a v a i l a b l e data 52 // from USART. This f u n c t i o n w i l l wait u n t i l l data i s 53 // a v a i l a b l e. 54 char USARTReadChar ( ) { 55 //Wait u n t i l a data i s a v a i l a b l e 56 57 while (! (UCSRA & (1<<RXC) ) ) { 58 //Do nothing 59 } 60 61 //Now USART has got data from host 62 //and i s a v a i l a b l e i s b u f f e r 63 64 return UDR; 65 } 66

CHAPTER 3. CODICE PER L USART 10 67 // This f u c t i o n w r i t e s the given data to 68 // the USART which then transmit i t via TX l i n e 69 void USARTWriteChar( char data ) { 70 //Wait u n t i l the t r a n s m i t t e r i s ready 71 72 while (! (UCSRA & (1<<UDRE) ) ) { 73 //Do nothing 74 } 75 76 //Now w r i t e the data to USART b u f f e r 77 78 UDR=data ; 79 } 80 81 void main ( ) { 82 // This DEMO program w i l l demonstrate the use o f simple 83 84 // f u n c t i o n f o r using the USART f o r data communication 85 86 // V a r r i a b l e D e c l a r a t i o n 87 char data ; 88 89 / F i r s t I n i t i a l i z e the USART with baud r a t e = 19200 bps 90 91 f o r Baud r a t e = 19200 bps 92 93 UBRR value = 51 94 / 95 96 USARTInit (51) ; //UBRR = 51 97 98 //Loop f o r e v e r 99 100 while ( 1 ) { 101 // Read data 102 data=usartreadchar ( ) ; 103 104 / Now send t h e same data but but surround i t i n 105 square bracket. For example i f user sent a our 106 system w i l l echo back [ a ]. 107 / 108 109 USARTWriteChar( [ ) ; 110 USARTWriteChar( data ) ; 111 USARTWriteChar( ] ) ; 112 } 113 }

Chapter 4 Comunicare 4.1 Collegarsi ad una porta COM fisica Se si ha un vecchio pc con porta seriale (una porta trapeziodale con 9 pin), basta usare un converter RS232 - TTL e connettere il microcontrollore al Pc (vedi sezione Converter in questa guida). 4.2 Collegarsi ad una porta COM virtuale Se il pc non ha la porta seriale si può usare un convertitore da USB a RS232. Si può trovare facilmente nei negozi online a pochi euro. Dopodiché si connette come nel caso di una porta fisica. 4.3 Chip CP2102 Il CP2102 è un chip che converte da USB a UART. È prodotto dalla Silicon Labs e si può comprare su Internet a 3 euro circa. 4.4 Chip PL2303 Come il CP2102, prodotto dalla Prolific Technology Inc. Costa una decina di euro. 4.5 Leggere da pc Per leggere da pc ciò che l ATMega328p si possono usare diversi software: putty (per Windows), Screen (per Mac, Linux, Windows). I metodi non verranno trattati 11

CHAPTER 4. COMUNICARE 12 qui, anche perché voi usate Windows, io uso Linux e non ho voglia di scoprire come potete fare. Credo si possano usare anche HyperTerminal, Coolterm, Hterm o Realterm. Googlate!

Chapter 5 Sitografia http://extremeelectronics.co.in/avr-tutorials/rs232-communication-the-basics/ http://extremeelectronics.co.in/avr-tutorials/rs232-communication-the-levelconversion/ http://hwdebug.blogspot.it/2012/05/come-utilizzare-il-chip-cp2102-con.html 13