Appunti di TePSIT - Altervistaantoniomarino.altervista.org/.../06/Appunti-di-TePSIT.pdf · 2017. 6....

54
Appunti di TePSIT Antonio Elio Marino ITIS ”Marconi” Pontedera (PI) 21 giugno 2017 versione 1.2 - Definitiva

Transcript of Appunti di TePSIT - Altervistaantoniomarino.altervista.org/.../06/Appunti-di-TePSIT.pdf · 2017. 6....

Page 1: Appunti di TePSIT - Altervistaantoniomarino.altervista.org/.../06/Appunti-di-TePSIT.pdf · 2017. 6. 22. · Appunti di TePSIT Antonio Elio Marino ITIS "Marconi" Pontedera (PI) 21

Appunti di TePSIT

Antonio Elio Marino

ITIS ”Marconi” Pontedera (PI)

21 giugno 2017

versione 1.2 - Definitiva

Page 2: Appunti di TePSIT - Altervistaantoniomarino.altervista.org/.../06/Appunti-di-TePSIT.pdf · 2017. 6. 22. · Appunti di TePSIT Antonio Elio Marino ITIS "Marconi" Pontedera (PI) 21

Indice

1 Avvertenze 4

2 La trasmissione seriale 52.1 Metodi di trasmissione . . . . . . . . . . . . . . . . . . . . . . . . . 52.2 Velocita di trasmissione . . . . . . . . . . . . . . . . . . . . . . . . . 62.3 Trasmissione asincrona . . . . . . . . . . . . . . . . . . . . . . . . . 7

2.3.1 Errori tipici della trasmissione asincrona . . . . . . . . . . . 72.4 Trasmissione sincrona . . . . . . . . . . . . . . . . . . . . . . . . . . 8

2.4.1 Trasmissione locale . . . . . . . . . . . . . . . . . . . . . . . 82.4.2 Trasmissione remota . . . . . . . . . . . . . . . . . . . . . . 82.4.3 Errori tipici della trasmissione sincrona . . . . . . . . . . . . 9

2.5 Le porte seriali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102.5.1 RS-232 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

2.6 UART . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112.7 Rilevazione degli errori . . . . . . . . . . . . . . . . . . . . . . . . . 12

2.7.1 Ripetizione . . . . . . . . . . . . . . . . . . . . . . . . . . . 122.7.2 Bit di parita . . . . . . . . . . . . . . . . . . . . . . . . . . . 132.7.3 Checksum . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132.7.4 Cyclic redundancy checks (CRC) . . . . . . . . . . . . . . . 13

2.8 La comunicazione seriale nell’ATMega328p . . . . . . . . . . . . . . 132.8.1 USART . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132.8.2 UDR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

2.9 UCSR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142.10 Programmare l’USART con la libc . . . . . . . . . . . . . . . . . . 16

2.10.1 Inizializzazione . . . . . . . . . . . . . . . . . . . . . . . . . 162.10.2 Leggere e scrivere dati . . . . . . . . . . . . . . . . . . . . . 172.10.3 Esempio di programma in C . . . . . . . . . . . . . . . . . . 17

2.11 Comunicare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202.11.1 Collegarsi ad una porta COM fisica . . . . . . . . . . . . . . 202.11.2 Collegarsi ad una porta COM virtuale . . . . . . . . . . . . 202.11.3 Chip CP2102 . . . . . . . . . . . . . . . . . . . . . . . . . . 20

1

Page 3: Appunti di TePSIT - Altervistaantoniomarino.altervista.org/.../06/Appunti-di-TePSIT.pdf · 2017. 6. 22. · Appunti di TePSIT Antonio Elio Marino ITIS "Marconi" Pontedera (PI) 21

INDICE 2

2.11.4 Chip PL2303 . . . . . . . . . . . . . . . . . . . . . . . . . . 202.11.5 Leggere da pc . . . . . . . . . . . . . . . . . . . . . . . . . . 20

3 ADC e catena di acquisizione dati 213.1 Il campionamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223.2 Catena di acquisizione dati . . . . . . . . . . . . . . . . . . . . . . . 23

3.2.1 Segnale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243.2.2 Il trasduttore . . . . . . . . . . . . . . . . . . . . . . . . . . 243.2.3 Il circuito di condizionamento . . . . . . . . . . . . . . . . . 243.2.4 Sample and hold . . . . . . . . . . . . . . . . . . . . . . . . 263.2.5 ADC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263.2.6 Elaboratore . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

3.3 ADC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273.3.1 ADC ad approssimazioni successive (SAR) . . . . . . . . . . 273.3.2 ADC a conversione diretta (Flash ADC) . . . . . . . . . . . 293.3.3 ADC a singola rampa . . . . . . . . . . . . . . . . . . . . . . 303.3.4 ADC a doppia rampa . . . . . . . . . . . . . . . . . . . . . . 313.3.5 ADC Sigma-Delta . . . . . . . . . . . . . . . . . . . . . . . . 32

3.4 L’ADC con AVR-libc . . . . . . . . . . . . . . . . . . . . . . . . . . 323.5 Registri ADC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

3.5.1 ADMUX (ADC Multiplexer Selection Register) . . . . . . . 333.5.2 ADCSRA (ADC Control and Status Register A) . . . . . . . 333.5.3 ADCL e ADCH (ADC Data Register) . . . . . . . . . . . . 35

4 AVR libc 364.1 Tipi di dato . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364.2 Gli header . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

4.2.1 <avr/io.h> . . . . . . . . . . . . . . . . . . . . . . . . . . . 384.2.2 <avr/interrupt.h> . . . . . . . . . . . . . . . . . . . . . . . 42

4.3 Esempi di codice . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444.3.1 Inviare valori ad una porta . . . . . . . . . . . . . . . . . . . 444.3.2 Time delay . . . . . . . . . . . . . . . . . . . . . . . . . . . 444.3.3 Inviare dati tra due porte . . . . . . . . . . . . . . . . . . . 464.3.4 Pilotare un pin tramite un altro pin . . . . . . . . . . . . . . 47

5 Appendice 485.1 Le leggi di Ohm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

5.1.1 La prima legge di Ohm . . . . . . . . . . . . . . . . . . . . . 485.1.2 La seconda legge di Ohm . . . . . . . . . . . . . . . . . . . . 485.1.3 Dipendenza della resistivita dalla temperatura . . . . . . . . 49

5.2 Trasformazioni lineari . . . . . . . . . . . . . . . . . . . . . . . . . . 49

Page 4: Appunti di TePSIT - Altervistaantoniomarino.altervista.org/.../06/Appunti-di-TePSIT.pdf · 2017. 6. 22. · Appunti di TePSIT Antonio Elio Marino ITIS "Marconi" Pontedera (PI) 21

INDICE 3

5.3 DAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 505.4 Fourier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

5.4.1 Serie di Fourier . . . . . . . . . . . . . . . . . . . . . . . . . 525.4.2 Trasformata di Fourier . . . . . . . . . . . . . . . . . . . . . 52

Page 5: Appunti di TePSIT - Altervistaantoniomarino.altervista.org/.../06/Appunti-di-TePSIT.pdf · 2017. 6. 22. · Appunti di TePSIT Antonio Elio Marino ITIS "Marconi" Pontedera (PI) 21

Capitolo 1

Avvertenze

In questo documento verranno appuntati alcuni passaggi importanti, utili ointeressanti sul programma svolto durante il pentamestre.

Questi appunti non possono essere usati come testo principale di studio, poichenon sono organici, completi, ci possono essere parecchi errori e non sempre ilcodice e stato controllato o testato direttamente. Ecco un elenco delle cose chesicuramente mancano (questo elenco potrebbe aumentare, invece di sfoltirsi, epotrebbe non svuotarsi mai):

• avr-libc sotto linux: toolchain;

• il timer/counter;

• esempi utili;

• bibliografia e sitografia.

Questa versione e definitiva, non perche completa ma per permettere aglistudenti di avere un testo statico su cui far riferimento. Eventuali aggiunte, erratacorrige o altro verranno inserite in un testo a parte.

Voglio ringraziare il prof. Renzo Venturi, che quest’anno ha avuto unallievo in piu rispetto al previsto, i proff. Alessandro Pilleri e Francesco Scial-pi, due amici che mi hanno aiutato nello studio di questa bellissima materia etutti gli studenti delle classi 5AII e 5CII, a cui questa dispensa e rivolta e dedicata.

Se ci sono dubbi, errori, riflessioni o altro contattatemi personalmente o peremail, la mia email dovreste conoscerla tutti.Buono studio!

Antonio E. Marino

4

Page 6: Appunti di TePSIT - Altervistaantoniomarino.altervista.org/.../06/Appunti-di-TePSIT.pdf · 2017. 6. 22. · Appunti di TePSIT Antonio Elio Marino ITIS "Marconi" Pontedera (PI) 21

Capitolo 2

La trasmissione seriale

Una trasmissione seriale e una trasmissione di informazioni in cui i dati vengo-no comunicati sequenzialmente da un dispositivo, detto trasmettitore, in seguitoindicato con TX, ad un altro dispositivo, detto ricevitore, in seguito indicato conRX.

Questa trasmissione si contrappone a quella parallela, in cui piu dati vengo-no inviati contemporaneamente. Nonostante la comunicazione parallela sembri piuvantaggiosa (spedire piu dati contemporaneamente puo sembrare a prima vista piucomodo e veloce di spedirne uno alla volta), in realta la comunicazione seriale hadue vantaggi: minor numero di fili (nella comunicazione parallela c’e bisogno alme-no di un filo per ogni dato che si vuol spedire contemporaneamente) quindi minoricosti e maggiore tolleranza rispetto alle interferenze e agli errori di trasmissione.Uno svantaggio della trasmissione seriale e la difficolta di trasferire informazionisu grandi distanze: ad esempio l’RS-232 a 9600 bps puo trasmettere fino a circa15 metri. Per aumentare la distanza di trasmissione si possono scegliere cavi conuna bassa capacita (ogni cavo reale si comporta come se avesse un condensatoreintrinseco, ineliminabile per motivi fisici) o abbassare la velocita di trasmissione.

2.1 Metodi di trasmissione

La trasmissione seriale si distingue in tre metodi di trasmissione:

• simplex : in un canale di trasmissione simplex i dati viaggiano da un disposi-tivo (TX) ad un altro (RX) ma mai al contrario. Un esempio e il televisore,che riceve i dati ma non puo trasmetterli;

• half-duplex : in questo caso i due dispositivi possono invertire i loro ruoli e fareda RX e TX o viceversa, ma mai contemporaneamente; se un dispositivo stainviando i dati il secondo puo solo ricevere. Per poter inviare deve aspettare

5

Page 7: Appunti di TePSIT - Altervistaantoniomarino.altervista.org/.../06/Appunti-di-TePSIT.pdf · 2017. 6. 22. · Appunti di TePSIT Antonio Elio Marino ITIS "Marconi" Pontedera (PI) 21

CAPITOLO 2. LA TRASMISSIONE SERIALE 6

che si liberi il canale comunicativo. Un esempio e dato dal walkie-talkie, dovechi parla non puo ascoltare e chi ascolta non puo parlare. La parola chiave”passo” serve proprio a comunicare al RX che si sta per liberare il canalecomunicativo e che se vuole puo fare da TX;

• full-duplex : in questo caso i due dispositivi possono inviare e ricevere contem-poraneamente i dati. Un esempio e il telefono, che permette a chi telefona diparlare sopra l’altro, ovvero le informazioni viaggiano contemporaneamentetra le due persone.

A sua volta si puo suddividere la trasmissione seriale in comunicazione sin-crona e comunicazione asincrona. La principale differenza (ma non l’unica)e che nella comunicazione sincrona oltre alla trasmissione dei dati viene propa-gato il clock. Se il clock viene propagato tramite cavo dedicato allora si parla ditrasmissione sincrona locale, se invece viene ricostruito dal ricevitore si parla ditrasmissione sincrona remota.

Infine fisicamente la trasmissione si puo distinguere in single-ended mode ein differential mode. La single-ended mode e la modalita piu semplice, basatasull’uso di due cavi; nel primo cavo viene trasmesso un potenziale elettrico chevaria e rappresenta il segnale inviato e nel secondo cavo si propaga il ground (oun potenziale elettrico di riferimento, non per forza 0 volt). Il ricevitore misurala differenza di potenziale tra i due cavi e ricava il valore del dato ricevuto. Ladifferential mode fa uso di due cavi, intrecciati tra di loro, in cui vengono inviatiin ogni cavo due segnali non relativi al GND. Essendo quindi indipendenti dalGND, la misura risulta essere maggiormente immune al rumore. Inoltre in casodi rumore elettromagnetico esterno, esso si distribuisce egualmente tra i due cavi,perche sono intrecciati tra di loro, annullandosi quando viene misurata la differenzadi potenziale dal ricevitore.

2.2 Velocita di trasmissione

Si chiama baud rate (unita di misura il baud, Bd), il numero di simboli o impulsitrasmessi per secondo. Corrisponde al numero di cambiamenti di simboli distintinel mezzo trasmissivo. Se il numero di simboli diversi e 2 (ad esempio 0 e 1,tipici della trasmissione digitale) il baud rate coincide con il gross bit rate (grosssi puo tradurre con lordo, totale, complessivo), che indica il valore complessivodi bit inviati per secondo. Si parla di totale perche i bit inviati possono essere,come vedremo, i dati che vogliamo realmente inviare o dati ”di servizio”, comeheader o altri bit di protocollo1, che servono soltanto al dispositivo trasmettente

1Un protocollo e un insieme di regole che permette a due o piu dispositivi di comunicare.Queste regole riguardano la semantica, la sintassi, la sincronizzazione e i possibili metodi di

Page 8: Appunti di TePSIT - Altervistaantoniomarino.altervista.org/.../06/Appunti-di-TePSIT.pdf · 2017. 6. 22. · Appunti di TePSIT Antonio Elio Marino ITIS "Marconi" Pontedera (PI) 21

CAPITOLO 2. LA TRASMISSIONE SERIALE 7

e a quello ricevente, ad esempio per sincronizzarsi. Il gross bit rate Rb si puocalcolare conoscendo il tempo di trasmissione dei bit Tb tramite la formula Rb = 1

Tb.

il bit error rate, abbreviato in BER, e in numero di errori nei bit inviatiper unita di tempo, mentre il bit error ratio, anch’esso abbreviato in BER, e ilnumero di errori nei bit inviati sul totale di bit inviati. Da notare che il bit errorratio e adimensionale, non ha unita di misura. E un numero compreso tra 0 ed 1e se moltiplicato per cento da la percentuale di errore della trasmissione. La biterror probability, BEP, indicato con pe, e il valore atteso del bit error ratio. Eun valore medio, va calcolato su un lungo periodo di tempo e su un alto numerodi errori nei bit.

Ad esempio, se viene trasmesso il valore:0 1 1 0 0 0 1 0 1 1ma viene ricevuto0 0 1 0 1 0 1 0 0 1il numero di bit errati nella trasmissione e 3 (i bit sottolineati). Il BER e quindi

3 bit errati diviso il numero di bit totali (10), quindi 0.3, o 30%.Il numero di pacchetti errati ricevuti sul totale dei ricevuti si chiama packet

error ratio (PER). Anch’esso e adimensionale. La percentuale attesa di pacchettierrati ricevuti si chiama packet error probability e si indica con pp. Su Npacchetti inviati, la pp si calcola come: pp = 1− (1− pe)N .

2.3 Trasmissione asincrona

La trasmissione asincrona si usa quando i dati non vengono spediti continuamentema sporadicamente, ad intermittenza. In questa trasmissione non c’e bisogno dipropagare il clock ne di ricostruirlo. I due dispositivi (TX e RX) hanno due clockdifferenti, quindi l’RX non e a conoscenza della velocita con cui arrivano i dati. Idati sono inviati in pacchetti di dati, detti frame. Un frame e un insieme di pochibit trasmessi sequenzialmente. La lunghezza del pacchetto va definita prima dellatrasmissione ed e formata da 4 parti: un bit di start, i bit del dato (detti payload),eventuali bit per la parita e il bit (o i bit) di stop.

2.3.1 Errori tipici della trasmissione asincrona

Gli errori tipici sono tre:

rilevazione e correzione degli errori. I protocolli possono essere implementati via hardware ovia software. In una stessa comunicazione possono essere presenti piu protocolli, per regolarnei diversi aspetti. In tal caso si parla di suite di protocolli (o protocol stack, se implementati viasoftware

Page 9: Appunti di TePSIT - Altervistaantoniomarino.altervista.org/.../06/Appunti-di-TePSIT.pdf · 2017. 6. 22. · Appunti di TePSIT Antonio Elio Marino ITIS "Marconi" Pontedera (PI) 21

CAPITOLO 2. LA TRASMISSIONE SERIALE 8

• parity error : l’errore di parita si ha quando il valore contenuto nel bit di pa-rita (inviato dal TX) non coincide con il valore calcolato dal RX, segnalandoun errore nella trasmissione;

• framing error : avviene quando non vengono trovati i bit di start e di stop.Cio e dovuto ad un errore di negoziazione: il TX e l’RX non si sono messid’accordo sui parametri della trasmissione, ad esempio sulla lunghezza delpayload, sulla presenza o meno del bit di parita, sulla lunghezza dei bit distop etc...;

• overrun error : avviene quando un altro pacchetto arriva prima che il pre-cedente sia stato letto oppure quando i pacchetti arrivato al buffer dell’ RXpiu velocemente di quanto l’RX riesca a leggerli, provocando una perdita dipacchetti. L’overrun error e dovuto al progettista o al programmatore, chenon ha tenuto conto di questa differenza nelle velocita. Si puo risolvere, adesempio, abbassando la velocita di trasmissione.

2.4 Trasmissione sincrona

La trasmissione sincrona si usa quando i dati vanno inviati continuamente, senzainterruzioni. In questa trasmissione il ricevitore conosce il clock di trasmissioneo perche viene propagato anch’esso (trasmissione locale) o perche viene ricostrui-to dal ricevitore (trasmissione remota), cosicche TX e RX sono costantementesincronizzati. Questo permette di usare un baud rate maggiore rispetto alla comu-nicazione asincrona. In piu non sono necessari i bit di start e di stop, riducendo ilpeso del frame di circa il 20% e aumentando, a parita di baud rate, la quantita didati trasmessi della stessa percentuale.

2.4.1 Trasmissione locale

Nella trasmissione locale il clock viene propagato tramite cavo dedicato.

2.4.2 Trasmissione remota

Nella trasmissione remota il clock non viene propagato ma viene ricostruito dalRX per mezzo del PLL (Phase-locked loop). Il PLL e un sistema di controllo chegenera un segnale in uscita direttamente correlato alla fase del segnale di ingresso.

Un oscillatore genera un segnale periodico e lo manda al phase detector (dettoanche phase comparator o PC), che confronta la fase del segnale periodico conquella del segnale periodico in input. Il phase comparator ha in uscita una tensione,funzione dello sfasamento tra i due input. Tale tensione e detta tensione di errore

Page 10: Appunti di TePSIT - Altervistaantoniomarino.altervista.org/.../06/Appunti-di-TePSIT.pdf · 2017. 6. 22. · Appunti di TePSIT Antonio Elio Marino ITIS "Marconi" Pontedera (PI) 21

CAPITOLO 2. LA TRASMISSIONE SERIALE 9

Figura 2.1: Schema logico del phase-locked loop

e viene inviata al voltage controlled oscillator (o VCO), che modifica la fase delsegnale periodico in input al PC in base alla tensione di errore (per questo si diceche e controllato in tensione, in inglese voltage controlled). Spesso tra il PC e ilVCO viene inserito un filtro passa basso (il low-pass filter dell’immagine).

2.4.3 Errori tipici della trasmissione sincrona

Gli errori tipici della trasmissione sincrona sono due:

• CRC error : il CRC (Cyclic Redundance Check, detto anche polynomial codechecksum), e un metodo basato sulla divisione binaria ed e usato per rilevareeventuali cambi nel dato digitale. Da un punto di vista hardware e facileda implementare. Il CRC aggiunge, al dato da inviare, un numero fissatodi bit di controllo, detto checksum. Il checksum e il resto di una divisionepolinomiale, calcolata dal TX facendo la divisione tra il dato e un polinomioprestabilito. L’RX esegue lo stesso calcolo e confronta il resto della propriadivisione con il checksum ricevuto. Se non coincidono allora si ha il CRCerror;

• underrun error : avviene quando il TX invia i dati piu lentamente di quantol’RX svuota il proprio buffer, interrompendo il flusso continuo tipico dellatrasmissione sincrona. Il rischio e che l’RX continui a leggere dal buffer,ormai vuoto, leggendo dati casuali. Tale errore non puo avvenire nella co-municazione asincrona, perche essendo presente un bit di stop alla fine diogni frame, l’RX puo rilevare l’interruzione della trasmissione.

Page 11: Appunti di TePSIT - Altervistaantoniomarino.altervista.org/.../06/Appunti-di-TePSIT.pdf · 2017. 6. 22. · Appunti di TePSIT Antonio Elio Marino ITIS "Marconi" Pontedera (PI) 21

CAPITOLO 2. LA TRASMISSIONE SERIALE 10

2.5 Le porte seriali

Una porta seriale e un’interfaccia per la comunicazione seriale attraverso cui leinformazioni passano un bit alla volta (diversamente dalla porta parallela doveentrano o escono piu bit contemporaneamente).

Qualche computer usa un circuito integrato detto UART (Universal Asynchro-nous Receiver/Transmitter), che converte caratteri da e per una seriale asincrona.Una porta seriale molto diffusa e la RS-232.

2.5.1 RS-232

L’RS-232 e un protocollo asincrono di comunicazione seriale. E chiamato asincronoperche non e presente un segnale di clock sincronizzante (come in altre comunica-zioni seriali, ad esempio l’I2C e l’SPI). Questo protocollo si sincronizza da se. Percapire quindi la durata di un clock vengono usati due bit, uno di start ed uno distop.

Nell’RS-232 sono presenti due cavi, in cui i dati viaggiano in direzioni opposte,cosicche per il primo cavo un dispositivo e un ricevitore e l’altro un trasmettitore eper l’altro i ruoli si invertono. A volte e presente un terzo cavo, il ground (GND).

Nell’RS-232 l’HIGH e trasmesso tramite un potenziale di -12V e il LOW tramiteun potenziale di 12V (ovviamente rispetto al ground).

Sebbene non ci sia sincronizzazione, esistono comunque delle velocita di tra-smissione dati standard. Il numero di segnali trasmessi per secondo e detto BAUDRATE. Qualche baud rate standard e: 1200, 2400, 4800, 9600, 19200, 38400, 57600,115200.

Per trasmettere un singolo byte, oltre ai classici 8 bit che lo formano, vannotrasmessi anche dei bit di start e dei bit di stop. Il numero di stop bit puo essere1 o 2. Noi useremo il caso singolo (un solo bit di stop). Va trasmesso anche il bitdi parita (vedremo in seguito a cosa serve).

Trasmissione

Quando non c’e trasmissione il cavo e settato al livello HIGH (-12V). Questo statoe detto condizione di stop. Nel momento in cui TX deve spedire un dato metteil cavo di trasmissione a LOW per 104 micro secondi (questo e lo start bit ed esempre 0), poi invia ogni bit con una durata di 104 microsecondi per bit infineritorna allo stato HIGH (stop bit, sempre 1).

Ricezione

Il ricevitore e in attesa dello start bit (ovvero attende che il segnale vada a LOW,-12V). Quando riceve lo start bit aspetta per 52 microsecondi (meta della durata

Page 12: Appunti di TePSIT - Altervistaantoniomarino.altervista.org/.../06/Appunti-di-TePSIT.pdf · 2017. 6. 22. · Appunti di TePSIT Antonio Elio Marino ITIS "Marconi" Pontedera (PI) 21

CAPITOLO 2. LA TRASMISSIONE SERIALE 11

Figura 2.2

dello start bit, 104 microsecondi) e rilegge il segnale, per essere sicuro che siaeffettivamente uno start bit e non una variazione di tensione casuale. Adessoaspetta altri 104 microsecondi e legge il valore (nota che adesso si trova a metadel periodo del primo bit). dopodiche legge ogni 104 microsecondi, cosı da trovarsisempre nel mezzo del bit ricevuto, fino a che la trasmissione non termina.

Converter

Il segnale digitale viaggia attraverso l’RS 232 tra i -12 (HIGH) ed i 12 V (LOW)mentre il microcontrollore e tra gli 0 V (LOW) e i 5V (HIGH). Per farli comunicarebisogna quindi prima usare un level converter, il cui scopo e ovviamente convertirei livelli del segnale.

Si puo comprare su Internet o crearlo facilmente. Una guidaper crearlo e qui: http://extremeelectronics.co.in/avr-tutorials/

rs232-communication-the-level-conversion/, sito da cui sono state presemolte informazioni per scrivere questi appunti.

2.6 UART

Quando inizia la trasmissione, il circuito integrato UART spedisce uno STARTBIT, un bit 0 a 12V, seguito dai dati (normalmente 8 bit, ma possono essere tra5 e 9 bit), infine spedisce uno STOP BIT, un bit di valore 1 a -12 V, poi ripete lasequenza fino a che tutti i dati non vengono spediti. in figura 2.2 viene mostratoil diagramma di un pacchetto trasmesso.

La durata della trasmissione di un pacchetto dipende dal payload (ovvero ilnumero di bit dedicati al dato da trasmettere di un pacchetto) e dal baud rate.Ad esempio un pacchetto con un payload di 8 bit e trasmesso a 9600 Bd impiegaun tempo τ = 10

9600sec ovvero circa 1 msec, con 10 circa il numero di bit in un

pacchetto.Prima di iniziare una trasmissione bisogna conoscere alcuni valori da settare.

Il primo e ovviamente il baud rate. Poi e necessario conoscere la lunghezza di un

Page 13: Appunti di TePSIT - Altervistaantoniomarino.altervista.org/.../06/Appunti-di-TePSIT.pdf · 2017. 6. 22. · Appunti di TePSIT Antonio Elio Marino ITIS "Marconi" Pontedera (PI) 21

CAPITOLO 2. LA TRASMISSIONE SERIALE 12

pacchetto, che dipende anche dal payload, dal numero di bit che formano lo STOPBIT e dal bit di parita. Bisogna conoscere anche se viene trasmesso o meno il bitdi parita e, in caso affermativo, conoscere il tipo di parita. La parita puo esserepari, dispari, MARK, SPACE o nessuna. Se la parita e pari, questo bit sara 1in caso di un numero dispari di 1 presenti nel payload, altrimenti sara 0. Se laparita e dispari il bit di parita sara 1 in caso di un numero pari di 1 presenti nelpayload, 0 in caso di un numero dispari di 1. Se la parita e MARK allora il bit diparita sara sempre un 1 logico, in ogni caso, mentre e uno 0 logico in caso di paritaSPACE. Nel caso di nessuna parita il bit di parita non viene spedito. Bisognaanche conoscere se la trasmissione sara LSB first o MSB first. Si dice LSB (LessSignificant Bit) first se il primo bit spedito e quello meno significativo, mentre sidice MSB (Most Significant Bit) first se il primo bit trasmesso e il piu significativo.

2.7 Rilevazione degli errori

Molti canali di comunicazione sono soggetti a rumore, che puo generare un er-rore durante la trasmissione. Le tecniche di rilevazione e correzione degli erroripermettono di ricostruire il segnale originale in molti casi.

La rilevazione degli errori e comunemente realizzata usando funzioni di hash(o algoritmi di checksum). Una funzione hash aggiunge al messaggio un’etichetta(tag) di lunghezza in bit fissata, il cui contenuto e calcolato dal TX in base alcontenuto del messaggio inviato. Il RX calcolera la tag del messaggio ricevuto e lacompara con la tag ricevuta dal TX. Se non coincidono c’e stato un errore durantela trasmissione. In seguito vengono descritti i principali metodi di rilevazioneerrori.

2.7.1 Ripetizione

In questo caso lo stesso dato viene trasmesso piu volte (almeno tre) e verra con-frontato dal RX. Ad esempio per inviare il valore ”1011” bisognera spedire lasequenza ”1011 1011 1011”, ovvero lo stesso valore inviato 3 volte. Se il RX ricevela sequenza ”1011 1001 1011” notera la differenza tra i secondi bit, scartera il casoricevuto meno volte (in questo caso lo 0) e considerera corretto il dato ”1011”.

Questo metodo e inefficiente, perche rallenta la trasmissione (il tempo di tra-smissione diventa almeno il triplo) e non corregge errori sistematici che agisconosempre sugli stessi bit. In compenso pero e il piu semplice da implementare.

Page 14: Appunti di TePSIT - Altervistaantoniomarino.altervista.org/.../06/Appunti-di-TePSIT.pdf · 2017. 6. 22. · Appunti di TePSIT Antonio Elio Marino ITIS "Marconi" Pontedera (PI) 21

CAPITOLO 2. LA TRASMISSIONE SERIALE 13

2.7.2 Bit di parita

Gia descritto nella sezione sull’UART, purtroppo non sempre riesce a rilevare unerrore. Se ad esempio un numero pari di bit inverte il proprio valore il bit di paritarisulta corretto anche se il messaggio e corrotto. Puo solo rilevare un numerodispari di inversioni di bit nei dati di un frame.

2.7.3 Checksum

Il checksum e la somma (secondo l’aritmetica modulare) del messaggio con unastringa di valori 0 e 1 prefissata. Tale somma viene negata (complemento a uno)prima della trasmissione per rilevare errori risultanti nel messaggio. La sommadeve restituire una serie di 0.

2.7.4 Cyclic redundancy checks (CRC)

Il cyclic redundancy check (CRC) e una funzione di checksum progettata per rile-vare cambi accidentali ma non e affidabile nel rilevare gli errori introdotti volon-tariamente (al contrario di funzioni di hash come l’MD5 e SHA1). Prende il nomedal fatto che i dati di ingresso vengono fatti passare ciclicamente in una rete logicaper essere elaborati.

Nel CRC assieme ai dati viene inviata anche una stringa di bit di controllo. Talestringa si calcola tramite aritmetica modulare. Il calcolo si basa sulla generazionedi un polinomio di grado N − 1, con N il numero di bit su cui si vuole rilevarel’errore. Tale polinomio viene usato come denominatore in una divisione in cui idati fanno da numeratore. Un polinomio molto comune e il CRC-CCITT: x16 +x12+x5+1 Il principio di funzionamento e omesso2. La parita pari e un particolaretipo di CRC, in cui il polinomio divisore e x+ 1.

2.8 La comunicazione seriale nell’ATMega328p

.

2.8.1 USART

L’USART e l’Universal Synchronous Asynchronous Receiver Transmitter. I registridell’USART sono 6:

• UDR (Usart Data Register): e un registro doppio. Contiene i dati chevengono trasmessi o ricevuti;

2Non si esclude un suo futuro inserimento in questi appunti.

Page 15: Appunti di TePSIT - Altervistaantoniomarino.altervista.org/.../06/Appunti-di-TePSIT.pdf · 2017. 6. 22. · Appunti di TePSIT Antonio Elio Marino ITIS "Marconi" Pontedera (PI) 21

CAPITOLO 2. LA TRASMISSIONE SERIALE 14

• UCSRA, UCSRB e UCSRC: Usart Control Status Register. Sono tre registri,l’A, il B ed il C e sono usati per configurare l’USART;

• UBRRH e UBRRL: servono a configurare il baud rate.

2.8.2 UDR

E un registro doppio, due registri fisicamente separati che condividono lo stessoindirizzo I/O. I dati trasmessi e ricevuti sono scritti o letti in questo registro;

2.9 UCSR

I registri UCSR (Uart Control Status Register) sono tre registri ad 8 bit econsentono di configurare l’UART.

UCSRA

E l’Usart Control Status Register A, un registro ad 8 bit descritto di seguito:

numero bit 7 6 5 4 3 2 1 0nome flag RXC TXC UDRE FE DOR PE U2X MPCM

valore di default 0 0 1 0 0 0 0 0

RXC e settato dalla CPU quando l’USART ha completato la ricezione di unbyte ed e possibile leggerlo dentro l’UDR. E possibile usarlo per generare uninterrupt;

TXC e settato dalla CPU quando l’USART ha completato la trasmissione diun byte ed e possibile inviare un nuovo dato tramite l’UDR. E possibile usarlo pergenerare un interrupt;

UDRE: Usart Data Register Empty, se e settato indica che il buffer (l’UDR) epronto a ricevere un nuovo dato. Puo essere usato per generare un interrupt (vediUCSRB). Se e resettato non e possibile scrivere nell’UDR;

FE: Frame Error, e settato se e stato rilevato un errore (ovvero quando il primobit stop del carattere successivo e zero);

DOR: Data OverRun, e settato se e stato rilevato un overrun, ovvero quandoil data buffer e il data shift register sono pieni ed e arrivato un nuovo start bit;

PE: Parity Error, e settato se il parity check bit e abilitato (UPM1=1) e ilcarattere successivo ha un parity error quando e ricevuto;

U2X: settandolo si raddoppia la velocita della comunicazione asincrona;MPCM: Multi Processor Communication Mode: se settato viene abilitato. Non

ci interessa, quindi verra ignorato.

Page 16: Appunti di TePSIT - Altervistaantoniomarino.altervista.org/.../06/Appunti-di-TePSIT.pdf · 2017. 6. 22. · Appunti di TePSIT Antonio Elio Marino ITIS "Marconi" Pontedera (PI) 21

CAPITOLO 2. LA TRASMISSIONE SERIALE 15

UCSRB

numero bit 7 6 5 4 3 2 1 0nome 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 e settato, il corrisponden-te interrupt in UCSRA (flag RXC) e attivato;

TXCIE: Transmit Complete Interrupt Enable – Quando e settato, ilcorrispondente interrupt in UCSRA (flag TXC) e attivato;

UDRIE: Usart Data Register Empty Interrupt Enable - Quando e settato, ilcorrispondente interrupt in UCSRA (flag UDR) e attivato;

RXEN: Receiver ENable - Quando e settato, abilita la ricezione;TXEN: Transmitter ENable - Quando e settato, la trasmissione e 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: e il nono bit del carattere ricevuto quando si usano

frame a nove bit;TXB8: Trasmit data Bit 8: e 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

settate (in base allo scopo).

UCSRC

numero bit 7 6 5 4 3 2 1 0nome 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) condi-vidono lo stesso indirizzo, quindi per determinare quale registro usare bisognamodificare il settimo bit (se e settato verra usato il registro UCSRC, altrimentil’UBRRH. Tale bit si chiama URSEL.

URSEL: Usart Register Select - vedere la nota sopraUMSEL: USART Mode Select - seleziona il modo: se e settato, la

comunicazione sara sincrona, altrimenti e asincrona.USBS: USART Stop Bit Select - questo bit seleziona il numero di bit stop nella

trasmissione. Se e 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 e possibile selezionareanche 5, 6, 7, o 9 bit per frame. Ecco le combinazioni:

Page 17: Appunti di TePSIT - Altervistaantoniomarino.altervista.org/.../06/Appunti-di-TePSIT.pdf · 2017. 6. 22. · Appunti di TePSIT Antonio Elio Marino ITIS "Marconi" Pontedera (PI) 21

CAPITOLO 2. LA TRASMISSIONE SERIALE 16

UCSZ2 UCSZ1 UCSZ0 Character Size0 0 0 5 Bit0 0 1 6 Bit0 1 0 7 Bit0 1 1 8 Bit1 0 0 Reserved1 0 1 Reserved1 1 0 Reserved1 1 1 9 Bit

UBRR: USART Baud Rate Register - e un registro a 16 bit, UBBRH e la partealta e UBBRL e la parte bassa. Il C comunque permette l’accesso a registri a 16bit. Questo registro e usato per determinare la velocita di trasmissione. Non vainserito il baud rate direttamente, ma va prima calcolato secondo la formula:

UBRR =fosc

16 ∗ baudrate− 1

con fosc la frequenza della CPU, in questo caso 16MHz. Ad esempio, se si vuoleusare un baud rate di 9600 bisogna scrivere il valore 103.1667 dentro l’UBRR. L’U-BRR accetta solo valori interi, quindi conviene approssimare il suo valore all’interopiu vicino (103, in questo caso) per minimizzare l’errore.

2.10 Programmare l’USART con la libc

2.10.1 Inizializzazione

Esempio di inizializzazione dell’USART:

1 #inc lude <avr / i o . h>2 #inc lude <i n t t y p e s . h>3

4 void USARTInit ( u i n t 1 6 t ubr r va lue ) 5 // Set Baud ra t e6 UBRR= ubrr va lue ;7

8 /∗ Set Frame Format9 >> Asynchronous mode

10 >> No Par i ty11 >> 1 StopBit12 >> char s i z e 813 ∗/14

15 UCSRC=(1<<URSEL) |(3<<UCSZ0) ;16

Page 18: Appunti di TePSIT - Altervistaantoniomarino.altervista.org/.../06/Appunti-di-TePSIT.pdf · 2017. 6. 22. · Appunti di TePSIT Antonio Elio Marino ITIS "Marconi" Pontedera (PI) 21

CAPITOLO 2. LA TRASMISSIONE SERIALE 17

17 // Enable The r e c e i v e r and t ran smi t t e r18 UCSRB=(1<<RXEN) |(1<<TXEN) ;19

2.10.2 Leggere e scrivere dati

Per leggere e scrivere i dati si possono creare due funzioni ad hoc,USARTReadChar() e USARTWriteChar().

Leggere dall’USART

1 char USARTReadChar ( ) 2 //Wait u n t i l a data i s a v a i l a b l e3 whi le ( ! (UCSRA & (1<<RXC) ) ) 4 //Do nothing5 6 //Now USART has got data from host7 //and i s a v a i l a b l e i s b u f f e r8 re turn UDR;

Scrivere con l’USART

1 void USARTWriteChar( char data ) 2 //Wait u n t i l the t r an smi t t e r i s ready3

4 whi le ( ! (UCSRA & (1<<UDRE) ) ) 5 //Do nothing6 7

8 //Now wr i t e the data to USART b u f f e r9

10 UDR=data ;11

Nota: per trasmettere bisogna scrivere dentro l’UDR, quindi il codice e:

1 UDR = d at o da s pe 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;

2.10.3 Esempio di programma in C

1 /∗2

3 A simple program to demonstrate the use o f USART of AVR micro4

5 ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗

Page 19: Appunti di TePSIT - Altervistaantoniomarino.altervista.org/.../06/Appunti-di-TePSIT.pdf · 2017. 6. 22. · Appunti di TePSIT Antonio Elio Marino ITIS "Marconi" Pontedera (PI) 21

CAPITOLO 2. LA TRASMISSIONE SERIALE 18

6

7 See : www. eXtremeElectron ics . co . in f o r more i n f o8

9 Author : Avinash Gupta10 E−Mail : me@avinashgupta . com11 Date : 29 Dec 200812

13 Hardware :14 ATmega8 @ 16MHz15

16 Su i t ab l e l e v e l conve r t e r on RX/TX l i n e17 Connected to PC via RS23218 PC Software : Hyper te rmina l @ 19200 baud19 No Parity , 1 Stop Bit ,20 Flow Control = NONE21

22 ∗/23

24 #inc lude <avr / i o . h>25 #inc lude <i n t t y p e s . h>26

27 // This func t i on i s used to i n i t i a l i z e the USART28 // at a g iven UBRR value29 void USARTInit ( u i n t 1 6 t ubr r va lue ) 30

31 // Set Baud ra t e32

33 UBRRL = ubrr va lue ;34 UBRRH = ( ubrr va lue >>8) ;35

36 /∗ Set Frame Format37

38 >> Asynchronous mode39 >> No Par i ty40 >> 1 StopBit41

42 >> char s i z e 843 ∗/44

45 UCSRC=(1<<URSEL) |(3<<UCSZ0) ;46

47 // Enable The r e c e i v e r and t ran smi t t e r48 UCSRB=(1<<RXEN) |(1<<TXEN) ;49 50

51 // This func t i on i s used to read the a v a i l a b l e data52 // from USART. This func t i on w i l l wait u n t i l l data i s53 // a v a i l a b l e .54 char USARTReadChar ( )

Page 20: Appunti di TePSIT - Altervistaantoniomarino.altervista.org/.../06/Appunti-di-TePSIT.pdf · 2017. 6. 22. · Appunti di TePSIT Antonio Elio Marino ITIS "Marconi" Pontedera (PI) 21

CAPITOLO 2. LA TRASMISSIONE SERIALE 19

55 //Wait u n t i l a data i s a v a i l a b l e56

57 whi le ( ! (UCSRA & (1<<RXC) ) ) 58 //Do nothing59 60

61 //Now USART has got data from host62 //and i s a v a i l a b l e i s b u f f e r63

64 re turn UDR;65 66

67 // This f u c t i o n w r i t e s the g iven ” data ” to68 // the USART which then transmit i t v ia TX l i n e69 void USARTWriteChar( char data ) 70 //Wait u n t i l the t r an smi t t e r i s ready71

72 whi le ( ! (UCSRA & (1<<UDRE) ) ) 73 //Do nothing74 75

76 //Now wr i t e the data to USART b u f f e r77

78 UDR=data ;79 80

81 void main ( ) 82 // This DEMO program w i l l demonstrate the use o f s imple83

84 // func t i on f o r us ing the USART f o r data communication85

86 // Var r i ab l e Dec la ra t i on87 char data ;88

89 /∗ F i r s t I n i t i a l i z e the USART with baud ra t e = 19200 bps90

91 f o r Baud ra t e = 19200 bps92

93 UBRR value = 5194 ∗/95

96 USARTInit (51) ; //UBRR = 5197

98 //Loop f o r e v e r99

100 whi le (1 ) 101 //Read data102 data=USARTReadChar ( ) ;103

Page 21: Appunti di TePSIT - Altervistaantoniomarino.altervista.org/.../06/Appunti-di-TePSIT.pdf · 2017. 6. 22. · Appunti di TePSIT Antonio Elio Marino ITIS "Marconi" Pontedera (PI) 21

CAPITOLO 2. LA TRASMISSIONE SERIALE 20

104 /∗ Now send the same data but but surround i t in105 square bracket . For example i f user sent ’ a ’ our106 system w i l l echo back ’ [ a ] ’ .107 ∗/108

109 USARTWriteChar( ’ [ ’ ) ;110 USARTWriteChar( data ) ;111 USARTWriteChar( ’ ] ’ ) ;112 113

2.11 Comunicare

2.11.1 Collegarsi ad una porta COM fisica

Se si ha un vecchio pc con porta seriale (una porta trapeziodale con 9 pin), bastausare un converter RS232 - TTL e connettere il microcontrollore al Pc (vedi sezione”Converter” in questa guida).

2.11.2 Collegarsi ad una porta COM virtuale

Se il pc non ha la porta seriale si puo usare un convertitore da USB a RS232. Sipuo trovare facilmente nei negozi online a pochi euro. Dopodiche si connette comenel caso di una porta fisica.

2.11.3 Chip CP2102

Il CP2102 e un chip che converte da USB a UART. E prodotto dalla Silicon Labse si puo comprare su Internet a 3 euro circa.

2.11.4 Chip PL2303

Come il CP2102, prodotto dalla Prolific Technology Inc. Costa una decina di euro.

2.11.5 Leggere da pc

Per leggere da pc cio che l’ATMega328p si possono usare diversi software: puTTY(per Windows), Screen (per Mac, Linux, Windows). I metodi non verranno trattatiqui, anche perche il lettore usa Windows, l’autore usa Linux e non ha vogliadi scoprire come si faccia su Windows. Probabilmente si possono usare ancheHyperTerminal, Coolterm, Hterm o Realterm3.

3Googlate!

Page 22: Appunti di TePSIT - Altervistaantoniomarino.altervista.org/.../06/Appunti-di-TePSIT.pdf · 2017. 6. 22. · Appunti di TePSIT Antonio Elio Marino ITIS "Marconi" Pontedera (PI) 21

Capitolo 3

ADC e catena di acquisizione dati

ADC significa Analog to Digital Converter, ovvero convertitore da analogico adigitale ed e un circuito elettronico in grado di convertire un segnale continuoin una serie di valori discreti. Un segnale e il modo di variare di una qualsiasigrandezza fisica in funzione del tempo.

Una grandezza analogica e sempre costituita da un insieme continuo di valo-ri, mentre una grandezza digitale, per la sua natura binaria, e necessariamentecostituita da un insieme finito di valori possibili. Quindi un segnale analogicodeve essere definito per qualsiasi istante di tempo e la grandezza in oggetto puoassumere tutti i valori di un intervallo, mentre un segnale digitale consiste in unasequenza di N combinazioni di 1 e 0, ed in questa forma puo essere salvata in unsupporto magnetico o trasmessa via cavo o via etere.

Si chiama risoluzione di un ADC il numero di valori discreti che puo produrre.Di solito e espressa in bit, quindi in potenze di 2, o in Volt. Se e espressa inVolt, la risoluzione e la minima differenza di potenziale tra due distinti livelli dipotenziale adiacenti.

Esempio: si supponga di avere un range tra 0 e 10 Volt e di avere unarisoluzione dell’ADC di 12 bit: questo significa che si puo andare da 000000000000(0 volt) a 111111111111 (poco meno di 10 Volt), quindi ci sono 212 = 4096 livellidiscreti (o quantizzati) diversi. La differenza di potenziale tra due livelli discretiadiacenti e 10V/4096 = 0, 00244V = 2, 44mV .

La maggior parte degli ADC e lineare, quindi il valore di uscita (il segnalediscretizzato, digitale) e funzione lineare del segnale in ingresso (il segnalecontinuo, analogico). Esistono anche ADC logaritmici, ma verranno accennati inseguito.

21

Page 23: Appunti di TePSIT - Altervistaantoniomarino.altervista.org/.../06/Appunti-di-TePSIT.pdf · 2017. 6. 22. · Appunti di TePSIT Antonio Elio Marino ITIS "Marconi" Pontedera (PI) 21

CAPITOLO 3. ADC E CATENA DI ACQUISIZIONE DATI 22

La conversione da analogico a digitale non e perfetta; la sua accuratezza di-pende principalmente1 da due tipi di errore2: l’errore di quantizzazione e l’erroredi non linearita:

• L’errore di quantizzazione si ha perche il valore quantizzato non potramai essere perfettamente corrispondente al valore continuo che e statoquantizzato;

• l’ errore di non-linearita: si trova principalmente negli ADC non lineari, incui l’imprecisione e dovuta alla curvatura della funzione di trasformazione(ad esempio logaritmica nel caso di ADC logaritmico). Anche gli ADC linearipossono soffrire dell’errore di non-linearita. dovuto spesso ad imperfezionifisiche e che provocano una trasformazione lineare non perfetta tra valori ininput e valori in output.

Esempio per capire meglio l’errore di quantizzazione: si supponga di avere unasorgente che lavora tra gli 0 e i 10 Volt e un ADC con una risoluzione di 2 bit(questo vuol dire che si possono avere soltanto 4 valori discreti, in bit: 00, 01, 10,11; 2 bit danno spazio soltanto a 4 combinazioni diverse). Se si usa questo ADC a2 bit, esso assocera al valore binario 00 gli 0V, al binario 01 i 2,5V, al binario 10 i5V e al binario 11 i 7.5V.

Si puo vedere facilmente che la differenza di potenziale tra un livello discreto edil successivo e di 2.5V, ovvero 10V/4, cioe la differenza di potenziale tra il valoremassimo (10V) e il valore minimo (0V) diviso 4 (ovvero 2n = 22 con n il numerodi bit).

Come e facile intuire (si vedra meglio in seguito che non e un’intuizione ma c’eun reale motivo dietro), sia il valore di 3.1V che il valore di 3.2V vengono elaboratidall’ADC e approssimati entrambi a 2.5V, quindi alla combinazione in bit 01. C’edunque una perdita di informazioni (il valore in bit 01 corrisponde a 3.2V? A 3.1V?A 3.14159V?). Tale errore e detto di quantizzazione perche avviene ovviamente acausa della quantizzazione del valore continuo.

3.1 Il campionamento

Il campionamento, detto sampling in inglese, in teoria dei segnali e la tecnicadel convertire un segnale continuo nel tempo in un segnale discreto, misurandone

1Si sta volutamente trascurando l’errore dovuto al rumore esterno, argomento troppocomplesso per essere trattato in questo testo.

2Si ricorda che per errore non si intende sbaglio, ma incertezza, dovuta a TUTTI gli strumentidi misura. L’errore e per definizione la differenza tra il valore vero di una misura e il valoremisurato (quello dato dallo strumento di misura).

Page 24: Appunti di TePSIT - Altervistaantoniomarino.altervista.org/.../06/Appunti-di-TePSIT.pdf · 2017. 6. 22. · Appunti di TePSIT Antonio Elio Marino ITIS "Marconi" Pontedera (PI) 21

CAPITOLO 3. ADC E CATENA DI ACQUISIZIONE DATI 23

il valore in tempi regolari. Questo processo avviene prima della quantizzazione.Il campionamento consiste nel leggere il valore del segnale ad istanti di temporegolari, la quantizzazione consiste nel codificare il valori assegnando ad ognunodi essi un valore discreto.

Il tempo che intercorre tra un campionamento ed il successivo e detto periododi campionamento e si indica con T . A volte e piu utile parlare di frequenzadi campionamento, fc, definita come il reciproco del periodo di campionamento:

fc =1

T

La frequenza di campionamento e utile perche, dato un segnale continuo, epossibile campionarlo con una frequenza adatta (quindi ogni quantita di tempo bendefinita), registrarlo in valori discreti e infine, se serve, ”interpolarlo” per renderlodi nuovo continuo. Il problema e che se viene campionato troppo lentamente c’eil rischio di perdere informazioni: se si vuol girare un film, ovvero trasformare lascena a cui si sta assistendo, continua perche e nella vita reale, in una pellicola,ovvero discretizzarla in una sequenza di immagini. Se le immagini della pellicolavengono registrate con una bassa frequenza si vedra il film andare a scatti.

Bisogna fare in modo di avere una frequenza tale da non perdere informazioni,o comunque da poterle ricostruire. Il teorema di Nyquist-Shannon assicurache per poter campionare un segnale senza perdere informazioni nella sua ricostru-zione analogica (quindi renderlo nuovamente analogico dopo averlo registrato comedigitale) va campionato con una frequenza di campionamento fc pari maggiore deldoppio della frequenza massima del segnale iniziale, fm:

fc > 2 · fm

Come si puo trovare la sua frequenza massima? Facendo la trasformata diFourier del segnale analogico (si veda l’appendice su Fourier), si porta nel dominiodelle frequenze e si vede qual e la frequenza maggiore che il segnale possiede.

3.2 Catena di acquisizione dati

Si chiama catena (o sistema) di acquisizione dati un sistema elettronico rea-lizzato per monitorare, registrare ed eventualmente elaborare le misure di una opiu grandezze.

Uno schema molto semplice di catena di acquisizione dati e il seguente:

Page 25: Appunti di TePSIT - Altervistaantoniomarino.altervista.org/.../06/Appunti-di-TePSIT.pdf · 2017. 6. 22. · Appunti di TePSIT Antonio Elio Marino ITIS "Marconi" Pontedera (PI) 21

CAPITOLO 3. ADC E CATENA DI ACQUISIZIONE DATI 24

Figura 3.1: Catena di acquisizione dati

3.2.1 Segnale

Il segnale/informazione e il segnale analogico, la grandezza fisica che va misurata.Questo segnale puo essere banalmente la temperatura di un oggetto, il suono diuna chitarra, l’intensita della luce di una stella etc...

3.2.2 Il trasduttore

Il trasduttore e il primo reale elemento della catena di acquisizione dati (il segnaleanalogico esiste in natura a prescindere dalla presenza o meno di un circuito ingrado di quantizzarlo e memorizzarlo). Esso prende in ingresso una grandezza fisicae restituisce in uscita un’altra grandezza fisica (di solito una grandezza elettrica,ad esempio la tensione).

Un esempio di trasduttore e il potenziometro: si puo descrivere come un resisto-re che permette di cambiare il valore della sua resistenza ruotando una manopola.In questo caso e un trasduttore perche trasduce uno spostamento angolare in unavariazione di resistenza elettrica.

Un trasduttore e definito da una serie di parametri; i piu importanti sono:

• Range di funzionamento: intervallo di valori della grandezza fisica in ingressoall’interno dei quali il trasduttore funziona correttamente;

• Funzione di trasferimento: relazione matematica o grafica tra grandezza inuscita e grandezza in ingresso nel trasduttore. Non per forza deve essere unafunzione lineare;

• Sensibilita: rapporto tra variazione in uscita e variazione in ingresso;

• Risoluzione: il piu piccolo valore da mettere in ingresso per provocare unavariazione in uscita;

• Velocita di risposta: il tempo impiegato dal sensore per fornire una rispostacostante dopo una brusca variazione della grandezza da misurare.

3.2.3 Il circuito di condizionamento

Il circuito di condizionamento, posto dopo il trasduttore, e un circuito chenormalmente adempie a piu scopi:

Page 26: Appunti di TePSIT - Altervistaantoniomarino.altervista.org/.../06/Appunti-di-TePSIT.pdf · 2017. 6. 22. · Appunti di TePSIT Antonio Elio Marino ITIS "Marconi" Pontedera (PI) 21

CAPITOLO 3. ADC E CATENA DI ACQUISIZIONE DATI 25

• amplificare il segnale che arriva dall’uscita del trasduttore;

• convertire in tensione. Spesso dal trasduttore i segnali in uscita sono in cor-rente (o resistenza). Prima di essere processati dal sistema vanno convertitiin tensione dal circuito di condizionamento;

• filtrare il segnale da rumori, distorsioni e interferenze. Poiche questi segnalidistorsivi sono a bassa frequenza, tenendo conto che per Fourier un segnalee scomponibile in una somma di segnali sinusoidali, la frequenza di taglioutilizzata dal filtro e pari alla frequenza dell’ultima armonica;

• linearizzare il segnale in uscita da trasduttori non lineari.

Per amplificare il segnale che arriva dal trasduttore il circuito di condiziona-mento fa uso di un amplificatore operazionale. Un amplificatore operazionale (oop-amp) e un circuito integrato il cui scopo e amplificare una grandezza in ingresso.

Figura 3.2: Schematizzazione di un amplificatore operazionale

Come si vede dalla figura, ha due ingressi, V+ e V−, e in output da la lorodifferenza moltiplicata per un fattore di guadagno G:

Vout = G(V+ − V−)

L’amplificatore usato nella catena di acquisizione dati normalmente ha unguadagno in tensione unitario (questo vuol dire che non amplifica la tensionein ingresso, o meglio la amplifica di un fattore 1, lasciandola cosı invariatamentre il guadagno in corrente puo essere anche di 106 (ovvero la corrente in usci-ta puo essere anche un milione di volte piu grande di quella in ingresso all’op-amp).

Per filtrare il segnale il circuito di condizionamento usa un filtro bassa basso.Tale filtro e detto anche filtro anti-aliasing. L’aliasing e l’effetto, dovuto all’erro-re di quantizzazione, per cui due segnali differenti diventano indistinguibili dopoessere stati campionati. Tale filtro non elimina completamente l’aliasing ma loriduce.

Il fatto che il filtro passa basso non sia presente nella figura che schematiz-za la catena d’acquisizione dati non vuol dire che tale filtro non sia fisicamentepresente, ma semplicemente che e stato inglobato, nella schema, nel circuito dicondizionamento.

Page 27: Appunti di TePSIT - Altervistaantoniomarino.altervista.org/.../06/Appunti-di-TePSIT.pdf · 2017. 6. 22. · Appunti di TePSIT Antonio Elio Marino ITIS "Marconi" Pontedera (PI) 21

CAPITOLO 3. ADC E CATENA DI ACQUISIZIONE DATI 26

3.2.4 Sample and hold

Il sample and hold, spesso abbreviato in S&H o S/H, serve a mantenere ad unvalore fisso il segnale analogico da convertire, e quindi evitare variazioni duranteil processo di conversione.

Dal punto di vista logico il S/H ha due stati di funzionamento:

• Lo stato di sample o tracking, in cui il segnale analogico che si presentain ingresso al componente viene riportato all’uscita in genere con guadagnounitario (ovvero quello che esce dallo stato di sample e uguale a quello cheentra);

• Lo stato di hold, in cui il segnale analogico di ingresso al componente in uncerto istante viene mantenuto costante all’uscita.

Figura 3.3: Sample and Hold

A grandi linee, durante la fase di sample l’interruttore posto al centro e chiusoe l’operazionale a sinistra (gli operazionali sono quelli a forma di triangolo nellafigura qui sopra) puo caricare il condensatore. Durante la fase di hold l’inter-ruttore e aperto e dall’operazionale a destra esce il valore che e stato salvato nelcondensatore. Questo meccanismo serve a evitare che nuovi segnali in ingresso alS/H modifichino il valore mentre esce, tenendolo costante grazie al condensatoree l’interruttore aperto.

3.2.5 ADC

L’ADC si trova alla fine della catena di acquisizione, immediatamente prima del-l’elaboratore. Ha il compito di trasformare il segnale analogico presente al suoingresso in un segnale digitale a N bit. Merita una sezione a parte.

Page 28: Appunti di TePSIT - Altervistaantoniomarino.altervista.org/.../06/Appunti-di-TePSIT.pdf · 2017. 6. 22. · Appunti di TePSIT Antonio Elio Marino ITIS "Marconi" Pontedera (PI) 21

CAPITOLO 3. ADC E CATENA DI ACQUISIZIONE DATI 27

3.2.6 Elaboratore

Scopo dell’elaboratore e ovviamente elaborare i dati forniti dall’ADC per memo-rizzarli, visualizzarli, trasmetterli altrove, eseguire calcoli o altro. Normalmentel’elaboratore e un microprocessore o un computer, che dialoga con l’ADC tramiteun’interfaccia, inserita nel Bus del PC ed e dotata di almeno due porte paralleledi I/O.

3.3 ADC

In elettronica ci sono 5 modi comuni di implementare un ADC:

1. ad approssimazioni successive (SAR - Successive Approximation Register);

2. a conversione diretta (Flash ADC);

3. ad inseguimento (sigma-delta);

4. a singola rampa (Single Slope);

5. a doppia rampa (Dual Slope).

3.3.1 ADC ad approssimazioni successive (SAR)

E composto da un convertitore digitale analogico (DAC) e un comparatore. At-tenzione, si parla di convertitore digitale analogico e non analogico digitale. Inappendice e spiegato il funzionamento del convertitore digitale analogico a scalaR-2R.

Si noti che ogni piolo R-2R del DAC e pilotato da un bit.Questo e lo schema logico di un SAR:Per capire come funziona, si supponga di voler convertire il valore di tensione

definito da Vref (ad esempio 4,2 Volt) in una configurazione di 6 bit (ogni bit e a5V nel caso contenga il valore 1, a 0V nel caso il bit vale 0). Per fare cio si iniziamettendo a 0V tutti i bit eccetto quello piu significativo: ”1 0 0 0 0 0”. Poichee collegato ad un DAC a scala R-2R, in ingresso al - del comparatore si ha unatensione di 5

2Volt.3 Il comparatore e il triangolo in basso a destra. Compara in

valore in uscita dal ladder e in ingresso al proprio - con il valore di Vref e in ingressoal proprio +. Se Vref e maggiore di 2.5V allora il bit piu significativo rimane ad1, altrimenti va a 0. In questo esempio Vref = 4.2V , piu grande dei 2.5V in uscitadal ladder, quindi il bit piu significativo va ad 1.

3Se non si comprende il motivo di tale valore in uscita si legga l’appendice sul DAC

Page 29: Appunti di TePSIT - Altervistaantoniomarino.altervista.org/.../06/Appunti-di-TePSIT.pdf · 2017. 6. 22. · Appunti di TePSIT Antonio Elio Marino ITIS "Marconi" Pontedera (PI) 21

CAPITOLO 3. ADC E CATENA DI ACQUISIZIONE DATI 28

Figura 3.4: Schema logico di un ADC ad approssimazioni successive (SAR)

Lasciando il bit piu significativo a 1, si mette a 1 anche il secondo bit piu signi-ficativo, ottenendo la configurazione ”1 1 0 0 0 0”. In uscita dal ladder abbiamo:V =

(52

+ 54

)Volt = 3.75Volt. Questo valore viene comparato con Vref = 4.2Volt.

Siccome Vref e maggiore di V allora anche il secondo bit deve rimanere ad 1.Lasciando i primi due bit piu significativi, si mette a 1 anche il terzo bit piu

significativo. La configurazione sara ”1 1 1 0 0 0”. In uscita dal ladder si ha: V =(52

+ 54

+ 58

)Volt = 4.375Volt. Questo valore viene comparato con Vref = 4.2Volt.

Stavolta Vref e minore, quindi il terzo bit va messo a 0.Lasciando questa configurazione, si mette ad 1 il quarto bit, ottenendo la con-

figurazione ”1 1 0 1 0 0” e il valore V =(52

+ 54

+ 516

)Volt = 4.0625Volt. Siccome

e minore di Vref il quarto bit deve rimanere 1.Adesso anche il penultimo bit viene settato ad 1 (”1 1 0 1 1 0”) ottenendo in

uscita dal ladder V =(52

+ 54

+ 516

+ 532

)Volt = 4.21875Volt. Siccome e maggiore

di Vref il quinto bit va a 0.Infine l’ultimo bit, quello meno significativo, va ad 1. L’attuale configura-

zione e quindi ”1 1 0 1 0 1”. La tensione in uscita dal ladder vale: V =(52

+ 54

+ 516

+ 564

)Volt = 4.140625Volt. Il comparatore confronta questo valore

con Vref e lascia il bit meno significativo ad 1, perche Vref e minore.La configurazione digitale finale, quella che corrisponde ad una tensione di

riferimento di 4.2 Volt e ”1 1 0 1 0 1”.Nota: introducendo la configurazione ottenuta ”1 1 0 1 0 1” in un DAC con

Vref a 5 Volt non si riottengono i 4.2 Volt iniziali, ma V =(52

+ 54

+ 516

+ 564

)Volt =

4.140625Volt. Questo e un esempio di errore di quantizzazione.

Page 30: Appunti di TePSIT - Altervistaantoniomarino.altervista.org/.../06/Appunti-di-TePSIT.pdf · 2017. 6. 22. · Appunti di TePSIT Antonio Elio Marino ITIS "Marconi" Pontedera (PI) 21

CAPITOLO 3. ADC E CATENA DI ACQUISIZIONE DATI 29

3.3.2 ADC a conversione diretta (Flash ADC)

Figura 3.5: Schema logico di un flash ADC

Come si vede dalla figura, il flash ADC e piu veloce del SAR perche il SAR selavora a N bit deve fare N comparazioni, invece il flash ADC ha tanti comparatoriche lavorano contemporaneamente. Se si vuol trasformare il segnale analogico iningresso (Vref , in alto a sinistra nell’immagine) in una configurazione di N bit ilflash ADC deve avere 2N − 1 comparatori. Siccome ogni resistenza provoca unacaduta di potenziale in ogni comparatore viene comparata una frazione di Vrefsempre piu piccola. Si omettono i calcoli dei valori comparati. Il lettore puoottenerli applicando il teorema di Thevenin.

Le uscite dei comparatori vanno nel priority encoder o encoder a priorita, chetrasforma i valori in ingresso in un binario ad N bit.

Esempio: si supponga di voler codificare una tensione in 4 bit. Il numero dicomparatori presenti nel Flash ADC sono quindi 24 − 1 = 15 . L’encoder creera ilnumero binario in base ai valori in uscita dagi comparatori in questo modo:

Sebbene molto veloci, i flash ADC sono molto piu costosi dei SAR: un SARa 10 bit necessita di circa 20 resistenze e 1 comparatore, un flash ADC a 10 bit

Page 31: Appunti di TePSIT - Altervistaantoniomarino.altervista.org/.../06/Appunti-di-TePSIT.pdf · 2017. 6. 22. · Appunti di TePSIT Antonio Elio Marino ITIS "Marconi" Pontedera (PI) 21

CAPITOLO 3. ADC E CATENA DI ACQUISIZIONE DATI 30

C7C6C5C4C3C2C1 Numero binario in uscita0 0 0 0 0 0 0 0000 0 0 0 0 0 1 0010 0 0 0 0 1 1 0100 0 0 0 1 1 1 0110 0 0 1 1 1 1 1000 0 1 1 1 1 1 1010 1 1 1 1 1 1 1101 1 1 1 1 1 1 111

necessita di circa 1024 resistenze e 1023 comparatori. Il tutto per risparmiare iltempo di 9 comparazioni (nel caso di 10 bit).

3.3.3 ADC a singola rampa

L’ADC a singola rampa confronta il segnale analogico da convertire con un segnalea rampa, cioe una tensione che cresce proporzionalmente col tempo.

Figura 3.6: Schema logico di un ADC a singola rampa

Il triangolo a sinistra, in serie ad una resistenza ed in parallelo ad uncondensatore e un integratore. In ingresso a

un condensatore che si carica in funzione del tempo come:

V (t) = Vine−t/RC

Ovviamente questo andamento decrescente e esponenziale, ma puo essereapprossimato al primo ordine come:

V (t) = Vin(1− t

RC)

ovvero una retta decrescente con coefficiente angolare −VinRC

.

Page 32: Appunti di TePSIT - Altervistaantoniomarino.altervista.org/.../06/Appunti-di-TePSIT.pdf · 2017. 6. 22. · Appunti di TePSIT Antonio Elio Marino ITIS "Marconi" Pontedera (PI) 21

CAPITOLO 3. ADC E CATENA DI ACQUISIZIONE DATI 31

Il vantaggio dell’ADC a singola rampa e lo schema circuitale abbastanza sem-plice (ed economico), lo svantaggio e la necessita di calibrare il clock in base al pe-riodo di salita della rampa. Il tempo di conversione, inoltre, non e predeterminabileperche funzione dell’ampiezza del segnale da convertire.

3.3.4 ADC a doppia rampa

L’ADC a doppia rampa e piu complesso di quello a singola rampa ma ne risolve iproblemi. Lo schema logico del circuito e il suo studio qui vengono omessi. L’ideadi base e la seguente: si carica un condensatore (come nel caso dell’ADC a singolarampa) con la tensione Vin da convertire in digitale per un tempo t1 noto (e laprima rampa); poi usando una tensione nota Vr si fa scaricare il condensatore finoa quando la tensione applicata ad un comparatore non si annulla e si misura iltempo t2 di scarica del condensatore (e la seconda rampa). Il tempo t2 fornisceuna misura diretta del segnale.

Figura 3.7: Tensione in funzione del tempo

Ogni non-linearita del comparatore durante la prima rampa (si ricordi chel’andamento del potenziale e un esponenziale decrescente, come visto nell’ADCa singola rampa) viene compensata dal comportamento opposto della secondarampa. Questo ADC e quindi molto preciso. Il numero di clock necessari allaconversione e dell’ordine di 2N , con N il numero di bit in uscita.

Page 33: Appunti di TePSIT - Altervistaantoniomarino.altervista.org/.../06/Appunti-di-TePSIT.pdf · 2017. 6. 22. · Appunti di TePSIT Antonio Elio Marino ITIS "Marconi" Pontedera (PI) 21

CAPITOLO 3. ADC E CATENA DI ACQUISIZIONE DATI 32

3.3.5 ADC Sigma-Delta

Questi ADC (indicati anche con la notazione Σ∆) consentono di avere risoluzionimolto elevate (anche 24 bit). Sono molto complessi nella parte digitale (che co-munque occupa poco spazio in termini di hardware) e poco complessi nella parteanalogica.

Data la complessita di questo ADC qui verranno trattati soltanto i puntisalienti, evitando una descrizione sommaria di tutto il meccanismo di conversione.

Il suo funzionamento si basa sull’oversampling e sul noise shaping, abbassandoin questo modo il rumore del segnale.

L’oversampling, o sovracampionamento, e un campionamento del segnale aduna frequenza molto maggiore rispetto alla banda del segnale in ingresso (si ricordache in base al teorema di Nyquist la frequenza di campionamento deve esserealmeno il doppio rispetto a quella della banda del segnale da campionare. Si vedal’appendice per ulteriori informazioni).

Il noise shaping e una tecnica di riduzione di bit usata per minimizzare l’erroredi quantizzazione.

L’ADC ∆Σ si chiama in questo modo perche e l’unione di due processi, chiamatiovviamente ”Delta” e ”Sigma”.

La fase ”Delta” (in greco ∆) prende il nome dal fatto che e costituita dauna sequenza di impulsi, equidistanziati nel tempo. Ogni impulso si chiamaDelta di Dirac4 Da qui il nome.

La fase ”Sigma” (in greco Σ) prende il nome da un conteggio sul treno diimpulsi in uscita dalla fase ∆. E una somma e in matematica le sommatorie siindicano con la Σ.

3.4 L’ADC con AVR-libc

In questo capitolo si parla della programmazione del microprocessore ATMega328pin C.

Il microprocessore ha 8 canali di acquisizione (e possibile campionare da 8terminali diversi e convertire i loro valori separatamente) e una risoluzione di 10bit, quindi l’uscita digitale puo andare da 0 a 1023. L’ADC ha anche una tensionedi riferimento, detta Aref . Se la tensione in ingresso vale 0 Volt l’output digitalee 0, se la tensione in ingresso e pari a Aref l’output digitale e 1023.

L’ADC opera con un range di frequenza da 50kHz a 200kHz mentre il µP lavoraa 16MHz quindi e necessario usare un prescaler. I divisori fissi del prescaler sono

4Chi volesse approfondire l’argomento puo cercare informazioni su ”Delta di Dirac” e”Funzione pettine di Dirac” o ”Funzione Shah” o ”treno di impulsi”.

Page 34: Appunti di TePSIT - Altervistaantoniomarino.altervista.org/.../06/Appunti-di-TePSIT.pdf · 2017. 6. 22. · Appunti di TePSIT Antonio Elio Marino ITIS "Marconi" Pontedera (PI) 21

CAPITOLO 3. ADC E CATENA DI ACQUISIZIONE DATI 33

2, 4, 8, 16, 32, 64 e 128. Ad esempio un prescaler a 64 implica un FADC =FµP64

=16MHz

64= 250KHz, con FµP la frequenza del microcontrollore (16MHz).

Per funzionare l’ADC ha bisogno di una tensione di riferimento. Per questomotivo si hanno a disposizione tre pin: AREF, AVCC e GND.

3.5 Registri ADC

3.5.1 ADMUX (ADC Multiplexer Selection Register)

Bit number 7 6 5 4 3 2 1 0Flag REFS1 REFS0 ADLAR - MUX3 MUX2 MUX1 MUX0

Read/Write R/W R/W R/W R R/W R/W R/W R/WValore iniziale 0 0 0 0 0 0 0 0

Descrizione delle flag: REFS - Reference Selection Bits: Sono i 2 bit piu si-gnificativi del registro ADMUX. Le loro configurazioni servono a selezionare latensione di riferimento Aref . Le possibilita sono 4:

REFS1 REFS0 Tensione di riferimento selezionata0 0 AREF, il Vref interno e disabilitato (default)0 1 AVCC con capacita esterna nel pin AREF1 0 RISERVATO1 1 Vref interna a 2.56 Volt con capacita esterna nel pin AREF

Se si lavora con la configurazione di default e possile collegarsi ad AREF eGND. Se si mette un condensatore tra AREF e GND si previene il rumore. Se sivogliono 5V come tensione di riferimento si puo usare la seconda configurazione,altrimenti la quarta. La terza non e disponibile;

ADLAR – ADC Left Adjust Result: se settato, attiva il left adjust. Permaggiori informazioni si rimanda al capitolo sui registri ADCH e ADCL;

MUXn con n tra 0 e 3, sono 4 bit che permettono di selezionare il canaleeffettivo per la conversione:

Le configurazioni con MUX3 settato non sono previste nell’ATMega328p.

3.5.2 ADCSRA (ADC Control and Status Register A)

Descrizione delle flag:ADEN (ADC Enable): Se settato si abilita l’ADC;

ADSC (ADC Start Conversion): Va settato ogni volta che si vuol iniziare

Page 35: Appunti di TePSIT - Altervistaantoniomarino.altervista.org/.../06/Appunti-di-TePSIT.pdf · 2017. 6. 22. · Appunti di TePSIT Antonio Elio Marino ITIS "Marconi" Pontedera (PI) 21

CAPITOLO 3. ADC E CATENA DI ACQUISIZIONE DATI 34

MUX3 MUX2 MUX1 MUX0 Single ended input0 0 0 0 ADC00 0 0 1 ADC10 0 1 0 ADC20 0 1 1 ADC30 1 0 0 ADC40 1 0 1 ADC50 1 1 0 ADC60 1 1 1 ADC7

Bit number 7 6 5 4 3 2 1 0Flag ADEN ADSC ADFR ADIF ADIE ADPS2 ADPS1 ADPS0

Read/Write R/W R/W R/W R/W R/W R/W R/W R/WValore iniziale 0 0 0 0 0 0 0 0

una conversione e va a 0 appena si completa la conversione. Puo essere controllatoin polling se si vuol sapere se la conversione e completata:

ADFR (ADC Free Running Select): Se settato l’ADC va in free running mode

ovvero l’ADC acquisisce e converte senza soluzione di continuita5, aggiornandoi registri dei dati, Per interrompere la conversione va messo in single conversionmode resettando il flag;

ADIF (ADC Interrupt Flag): e un flag di interrupt, va automaticamente a 1quando la conversione e completata e i registri sono stati aggiornati. Per attivarel’interrupt e necessario che il bit ADIE di questo registro e il bit di interrupt delloStatus Register (il bit 7 del SREG) siano settati. Per resettare l’ADIF bisognascrivere 1 dentro questo bit. Attenzione, va scritto 1 dentro ADIF per resettarloa 0;

ADIE (ADC Interrupt Enable): va settato se si vuol attivare gli interruptdell’ADC. Affinche l’interrupt possa essere generato e necessario che anche ilflag di interrupt dell’SREG sia a 1 e che il flag ADIF vada a 1 (viene settatoautomaticamente via hardware se la conversione e stata completata);

ADPS (ADC Prescaler Select Bits): come si intuisce dal nome, sono 3 bit chevanno configurati per poter scegliere il prescaler dell’ADC. Le configurazioni peravere i vari divisori del prescaler sono elencate di seguito:

5E un modo complicato per dire ”continuamente”.

Page 36: Appunti di TePSIT - Altervistaantoniomarino.altervista.org/.../06/Appunti-di-TePSIT.pdf · 2017. 6. 22. · Appunti di TePSIT Antonio Elio Marino ITIS "Marconi" Pontedera (PI) 21

CAPITOLO 3. ADC E CATENA DI ACQUISIZIONE DATI 35

ADPS2 ADPS1 ADPS0 divisore Frequenza per l’ATMega328p0 0 0 2 8 MHz0 0 1 2 8 MHz0 1 0 4 4 MHz0 1 1 8 2 MHz1 0 0 16 1 MHz1 0 1 32 500 KHz1 1 0 64 250 KHz1 1 1 128 125 KHz

3.5.3 ADCL e ADCH (ADC Data Register)

Questi due registri servono a memorizzare il valore ottenuto dalla conversionedell’ADC. Il nostro ADC e a 10 bit, quindi un singolo registro non basta. Vieneletto prima il registro LOW, ADCL, e poi l’HIGH. Tra la lettura dei due registrinon avviene il loro l’aggiornamento fino a che anche ACDH non e stato letto.

Il numero binario da 10 bit ottenuto dalla conversione si memorizza nei dueregistri nel modo mostrato nella seguente tabella. Questa modalita e detta rightadjust).

Bit 15 14 13 12 11 10 9 8ADCH - - - - - - 10th bit 9th bit

Bit 7 6 5 4 3 2 1 0ADCL 8th bit 7th bit 6th bit 5th bit 4th bit 3rd bit 2nd bit 1st bit

E possibile usare una conversione ad 8 bit. Per far cio bisogna attivare illeft adjust, ovvero spostare tutti i bit della conversione verso sinistra, riempendocompletamente il registro ADCH e lasciando nel registro ADCL i due bit menosignificativi (che vanno scartati se si vuol lavorare a 8 bit). Per attivare il leftadjust va settato il flag ADLAR del registro ADMUX.

La configurazione del left adjust e la seguente:

Bit 15 14 13 12 11 10 9 8ADCH 10th bit 9th bit 8th bit 7th bit 6th bit 5th bit 4th bit 3rd bit

Bit 7 6 5 4 3 2 1 0ADCL 2nd bit 1st bit - - - - - -

Page 37: Appunti di TePSIT - Altervistaantoniomarino.altervista.org/.../06/Appunti-di-TePSIT.pdf · 2017. 6. 22. · Appunti di TePSIT Antonio Elio Marino ITIS "Marconi" Pontedera (PI) 21

Capitolo 4

AVR libc

Si suppone che il lettore abbia le conoscenze basilari di C per riuscire a scrivereautonomamente del codice.

Questi appunti NON sono un corso di C e quindi parecchie cose verranno dateper scontate.

Se il lettore si accorge di avere delle lacune sara suo dovere colmarle.

4.1 Tipi di dato

In questo corso avremo bisogno di variabili ad 8 bit o a 16 bit. Di seguito sonoelencati i tipi definiti dentro la libreria C stdint.h:

1 typede f s igned char i n t 8 t ;2 typede f unsigned char u i n t 8 t ;3

4 typede f shor t i n t 1 6 t ;5 typede f unsigned shor t u i n t 1 6 t ;6

7 typede f long i n t 3 2 t ;8 typede f unsigned long u i n t 3 2 t ;9

10 typede f long long i n t 6 4 t ;11 typede f unsigned long long u i n t 6 4 t ;

Si ricorda che gli interi a 8 bit possono assumere qualsiasi valore intero tra 0e 255, gli interi a 8 bit con segno tra -127 e 128, gli interi a 16 bit tra 0 e 65535mentre gli interi a 16 bit con segno tra -32767 e 32768.

4.2 Gli header

Per poter usare gli header AVR e ovviamente necessario includerle nel codice.

36

Page 38: Appunti di TePSIT - Altervistaantoniomarino.altervista.org/.../06/Appunti-di-TePSIT.pdf · 2017. 6. 22. · Appunti di TePSIT Antonio Elio Marino ITIS "Marconi" Pontedera (PI) 21

CAPITOLO 4. AVR LIBC 37

Di seguito c’e l’elenco di header che si possono usare e la loro descrizione:

LIBRERIA DESCRIZIONE<avr/boot.h> Bootloader Support Utilities

<avr/cpufunc.h> Special AVR CPU functions<avr/eeprom.h> EEPROM handling;<avr/fuse.h> Fuse Support

<avr/interrupt.h> Interrupts<avr/io.h> AVR device-specific IO definitions<avr/lock.h> Lockbit Support

<avr/pgmspace.h> Program Space Utilities<avr/power.h> Power Reduction Management<avr/sfr defs.h> Special function registers<avr/signature.h> Signature Support<avr/sleep.h> Power Management and Sleep Modes<avr/version.h> avr-libc version macros<avr/wdt.h> Watchdog timer handling

E possibile trovare dettagli su questi header al seguente indirizzo: http://

www.atmel.com/webdoc/avrlibcreferencemanual/assembler.html

Page 39: Appunti di TePSIT - Altervistaantoniomarino.altervista.org/.../06/Appunti-di-TePSIT.pdf · 2017. 6. 22. · Appunti di TePSIT Antonio Elio Marino ITIS "Marconi" Pontedera (PI) 21

CAPITOLO 4. AVR LIBC 38

4.2.1 <avr/io.h>

Leggere un registro

Per leggere il contenuto di un registro (ad esempio PINx) e possibile usare il codiceseguente:

1 #inc lude <avr / i o . h>2 #inc lude <s t d i n t . h>3 u i n t 8 t pippo ;4

5 i n t main ( ) 6 pippo = PINB ;7 re turn 0 ;8

dove il contenuto di PINB viene memorizzato dentro la variabile pippo (interoad 8 bit, unsigned).

Leggere un bit

Per leggere un bit di un registro e possibile usare due macro contenute dentroavr/io.h:

• bit is set(<Register>, <Bitnumber>), che restituisce 1 se il bitinterrogato vale 1, altrimenti restituisce 0;

• bit is clear(<Register>, <Bitnumber>), che restituisce 1 se il bitinterrogato vale 0, altrimenti restituisce 0.

Il prossimo esempio mostra del codice che mette in input la porta B quandoil pin 3 della porta C vale 0 e mette in output se lo stesso pin vale 1, usandobit is clear :

1 #inc lude <avr / i o . h>2

3 i n t main ( ) 4 i f ( b i t i s c l e a r (PORTC, 3) 5 DDRB = 0x00 ;6 e l s e 7 DDRB = 0xFF;8 return0 ;9

Nota: esistono anche le funzioni loop until bit is set e loop until bit is clear,che ciclano fino a quando il bit interrogato e, in ordine, settato o resettato. Allettore e lasciato, come esercizio, il compito di capire quale possa essere la sintassidi entrambe le funzioni.

Di seguito e listato il DEFINE di entrambe le macro:

Page 40: Appunti di TePSIT - Altervistaantoniomarino.altervista.org/.../06/Appunti-di-TePSIT.pdf · 2017. 6. 22. · Appunti di TePSIT Antonio Elio Marino ITIS "Marconi" Pontedera (PI) 21

CAPITOLO 4. AVR LIBC 39

1 #d e f i n e l o o p u n t i l b i t i s c l e a r ( s f r , b i t )2 do whi le ( b i t i s s e t ( s f r , b i t ) )

1 #d e f i n e l o o p u n t i l b i t i s s e t ( s f r , b i t )2 do whi le ( b i t i s c l e a r ( s f r , b i t ) )

con sfr lo special function register e bit il suo bit.

Scrivere in un registro

1 #inc lude <avr / i o . h>2 . . .3

4 i n t main ( ) 5 DDRA = 0 x f f ; // Setto t u t t i i b i t d e l l a porta A in output6 PORTA = 0x03 ; // Setto in HIGH s o l o i b i t 0 e 1 , g l i a l t r i in LOW7 . . .8

Nota che qui non e stato necessario includere stdint.h, perche non abbiamoavuto bisogno di una variabile di appoggio (a 8 o a 16 bit).

E possibile scrivere dentro un registro in diversi modi:

1 #inc lude <avr / i o . h>2 . . .3 DDRB = 0x1F ;4 DDRB = 0b00011111 ;5 DDRB = (1 << DDB0) | (1 << DDB1) | (1 << DDB2) | (1 << DDB3) | (1 <<

DDB4) ;

Tutti e tre i modi assegnano lo stesso valore in DDRB (ovvero mettono in outputi pin 0,1,2,3 e 4 della porta B).

Per maggiori informazioni sull’ultimo metodo leggi il paragrafo ”Scrivere inun bit”.

Scrivere in un bit

Per scrivere in un bit useremo le classiche operazioni sui bit del C:

1 X |= (1 << Bitnumber ) ; // s c r i v e 1 dentro un b i t2 X &= ∼(1 << Bitnumber ) ; // s c r i v e 0 dentro un b i t

Bitnumber e ovviamente la posizione del bit.

1 #inc lude <avr / i o . h>2 . . .3 #d e f i n e NumeroBIT 2 // p o s i z i o n e de l b i t4 . . .5 PORTA |= (1 << NumeroBIT) ; // mette 1 ne l b i t 2 d e l l a porta A6 PORTA &= ∼(1 << NumeroBIT) ; // mette 0 ne l b i t 2 d e l l a porta A

Page 41: Appunti di TePSIT - Altervistaantoniomarino.altervista.org/.../06/Appunti-di-TePSIT.pdf · 2017. 6. 22. · Appunti di TePSIT Antonio Elio Marino ITIS "Marconi" Pontedera (PI) 21

CAPITOLO 4. AVR LIBC 40

L’uso del define in questo esempio non e stato un vezzo, anzi e altamente consi-gliato: immaginate di aver scritto migliaia di righe di codice lavorando ad esempiosul pin 3 della porta D e adesso dovete cambiare pin e porta. Buona fortuna nelcercare e sostituire in tutto il codice la porta ed il pin, ne avrete parecchio bisogno...

Posso usare l’OR per cambiare contemporaneamente il valore di piu bit:

1 #inc lude <avr / i o . h>2 DDRA &= ∼( (1<<PA0) | (1<<PA3) ) ; // metto in output i b i t 1 e 3

d e l l a porta A3 PORTA |= (1<<PA0) | (1<<PA3) ; // metto i b i t 1 e 3 d e l l a porta A in

HIGH

Operatori bit a bit

Ecco un veloce elenco degli operatori che useremo:| bit OR& bit AND∼ bit NOT∧ bit EXCLUSIVE OR<< bit LEFT SHIFT>> bit RIGHT SHIFTQuesti operatori lavorano sui bit e non su valori logici. Nota che il NOT e

rappresentato dalla tilde (ALT+0126) e non dal punto esclamativo.Come ben sappiamo, in C possiamo scrivere le operazioni in modo diverso dal

tradizionale. Ad esempio:var = var + 1 puo essere scritto var + + oppure var+ = 1;var = var << 1 puo essere scritto var <<= 1;var1 = var1&var2 puo essere scritto var1& = var2;var1 = var1 | var2 puo essere scritto var1 |= var2;var = var ∧ (1 << 0) puo essere scritto var∧ = (1 << 0).Gli operatori possono essere usati, ovviamente, come condizione dentro i cicli:

1 #inc lude <avr / i o . h>2 . . .3 i f ( PINC & (1<<PINC1) ) 4 // fa qua lcosa se i l pin 1 d e l l a porta C va l e 15 6

7 i f ( ! ( PINB & (1<<PINB2) ) ) 8 // fa qua lcosa se i l pin 2 d e l l a porta C va l e 09

10 . . .

Page 42: Appunti di TePSIT - Altervistaantoniomarino.altervista.org/.../06/Appunti-di-TePSIT.pdf · 2017. 6. 22. · Appunti di TePSIT Antonio Elio Marino ITIS "Marconi" Pontedera (PI) 21

CAPITOLO 4. AVR LIBC 41

Registri a 16 bit

I registri ADC, ICR1, OCR1, TCNT1 e UBRR sono a 16 bit. Per usarli abbiamoquindi bisogno di interi unsigned a 16 bit:

1 #inc lude <avr / i o . h>2 #inc lude <s t d i n t . h>3 . . .4 u i n t 1 6 t foo ;5 f oo=ADC; // foo adesso cont i ene i l va l o r e d i ADC

Il contenuto di una variabile a 16 bit puo essere diviso manualmente dentrodue variabili a 8 bit:

1 #inc lude <avr / i o . h>2 #inc lude <s t d i n t . h>3 #i f n d e f F CPU //Lo scopo d i F CPU viene sp i e ga to in segu i to ,

ne l c a p i t o l o s u l l ’UART4 #d e f i n e F CPU 36864005 #e n d i f6 #d e f i n e UART BAUD RATE 9600 // vedi c a p i t o l o s u l l ’UART7

8 typede f union9 u i n t 1 6 t i 16 ;

10 s t r u c t 11 u i n t 8 t i 8 l ;12 u i n t 8 t i8h ;13 ;14 convert16to8 ;15 . . .16 convert16to8 baud ;17 baud . i 16 = F CPU /(UART BAUD RATE ∗ 16L)−1; // questa formula v i ene

sp i e ga ta in s e g u i t o18 UBRRH = baud . i8h ; // parte a l t a d i UBRR19 UBRRL = baud . i 8 l ; // parte bassa d i UBRR

In alternativa si puo usare il seguente codice per dividere un registro a 16 bitin due variabili a 8 bit:

1 #inc lude <i n t t y p e s . h>2 u i n t 1 6 t wFoo16 ;3 u i n t 8 t bFooLow , bFooHigh ;4

5

6 wFoo16 = 0xAA55 ; // v a r i a b i l e a 16 b i t7 bFooHigh = ( u i n t 8 t ) (wFoo16 >> 8) ;8 bFooLow = ( u i n t 8 t ) (wFoo16 ) ;

Page 43: Appunti di TePSIT - Altervistaantoniomarino.altervista.org/.../06/Appunti-di-TePSIT.pdf · 2017. 6. 22. · Appunti di TePSIT Antonio Elio Marino ITIS "Marconi" Pontedera (PI) 21

CAPITOLO 4. AVR LIBC 42

Come ben sapete, (int8 t) e un cast e quindi non lo annoiero spiegando cos’ee come funziona1.

(wFoo16 >> 8) sposta a destra gli 8 bit piu significativi rendendoli i meno signi-ficativi. In questo modo, facendo il cast a 8bit, verranno scritti dentro bFooHigh.Si noti che ovviamente lo shift non e stato fatto per bFooLow.

Se ci sono dubbi in merito potete chiedere chiarimenti in classe in qual-siasi momento (anche durante la vostra interrogazione, sebbene sia altamentesconsigliato).

4.2.2 <avr/interrupt.h>

Ecco l’elenco di interrupt per l’ATMega328p e loro descrizione ufficiale:

INTERRUPT DESCRIZIONEADC vect ADC Conversion Complete

ANALOG COMP vect Analog ComparatorEE READY vect EEPROM Ready

INT0 vect External Interrupt 0INT1 vect External Interrupt Request 1

PCINT0 vect Pin Change Interrupt Request 0PCINT1 vect Pin Change Interrupt Request 1PCINT2 vect Pin Change Interrupt Request 2SPI STC vect Serial Transfer Complete

SPM READY vect Store Program Memory ReadTIMER0 COMPB vect Timer Counter 0 Compare Match B

TIMER0 OVF vect Timer/Counter0 OverflowTIMER1 CAPT vect Timer/Counter Capture Event

TIMER1 COMPA vect Timer/Counter1 Compare Match ATIMER1 COMPB vect Timer/Counter1 Compare MatchB

TIMER1 OVF vect Timer/Counter1 OverflowTIMER1 OVF vect Timer/Counter1 OverflowTIMER2 OVF vect Timer/Counter2 Overflow

TWI vect 2-wire Serial InterfaceUSART RX vect USART, Rx CompleteUSART TX vect USART, Tx Complete

USART UDRE vect USART Data Register EmptyWDT vect Watchdog Timeout Interrupt

1Se in questo esempio ci sono stati problemi con struct, union, cast e inttypes.h forse e meglioriprendere in mano il manuale di C.

Page 44: Appunti di TePSIT - Altervistaantoniomarino.altervista.org/.../06/Appunti-di-TePSIT.pdf · 2017. 6. 22. · Appunti di TePSIT Antonio Elio Marino ITIS "Marconi" Pontedera (PI) 21

CAPITOLO 4. AVR LIBC 43

Il seguente codice include la libreria necessaria per gli interrupt (avr/inter-rupt.h), abilita gli interrupt (tramite sei(), SEt the global Interrupt flag) e lidisabilita (tramite cli(), CLear the global Interrupt flag):

1 #inc lude <avr / i n t e r r u p t . h>2 . . .3 i n t main ( void ) 4 s e i ( ) ; // ho a t t i v a t o g l i i n t e r r u p t5 . . . // v i ene f a t t o qua lcosa6 c l i ( ) ; // l i d i s a t t i v o7

Note sugli interrupt

Un interrupt e un evento (interno o esterno al microcontrollore) che mette in pausal’attivita corrente del processore e permette l’esecuzione di qualcos’altro. Appenaha finito ritorna all’attivita precedente. A differenza del polling, dove dobbiamocostantemente controllare se un determinato evento e avvenuto (la pressione di uninterruttore, un overflow di un timer), con gli interrupt non dobbiamo preoccuparcidi cio, saranno le routine di interrupt ad avvertire appena l’evento succede.

Per far cio dobbiamo attivare l’Interrupt Service Routine, abbreviato in ISR.Gli interrupt possono essere hardware o software. Noi ci occuperemo soltan-to di quelli hardware. Per avere un elenco completo degli interrupt si puo fareriferimento al manuale del microcontrollore.

Tenete presente che all’arrivo di un interrupt la CPU resetta automaticamenteil bit relativo al Global Interrupt Enable (per evitare che un secondo interruptinterrompa l’esecuzione del codice relativo al primo interrupt) per poi settarloautomaticamente dopo averlo servito.

Il codice per gestire un interrupt e il seguente:

1 #inc lude <avr / i n t e r r u p t . h>2

3 ISR (Vector Source v e c t ) 4 // Codice da e s e g u i r e in caso d i i n t e r r u p t5

Vector Source e il nome della sorgente dell’interrupt.

Se ad esempio volessi usare TIMER0 OVF potrei scrivere il seguente codice:

1 #inc lude <avr / i o . h>2 #inc lude <avr / i n t e r r u p t . h>3

4 i n t main ( ) 5 // cod i c e de l main , t ra cu i l e i n i z i a l i z z a z i o n i6 s e i ( ) ; // a t t i v o g l i i n t e r r u p t

Page 45: Appunti di TePSIT - Altervistaantoniomarino.altervista.org/.../06/Appunti-di-TePSIT.pdf · 2017. 6. 22. · Appunti di TePSIT Antonio Elio Marino ITIS "Marconi" Pontedera (PI) 21

CAPITOLO 4. AVR LIBC 44

7 f o r ( ; ; ) // c i c l o i n f i n i t o , per a t t endere l ’ i n t e r r u p t8 9 re turn 0 ;

10 11

12 ISR (TIMER0 OVF vect ) 13 // Codice da e s e g u i r e in caso d i i n t e r r u p t dovuto14 // a l l ’ over f l ow de l TIMER015

4.3 Esempi di codice

I seguenti esempi sono inseriti per comprendere meglio l’uso delle strutture spiegateprima, non devono essere usati come codice gia pronto da implementare nei propriprogetti.

4.3.1 Inviare valori ad una porta

Scrivere un programma che invia in ordine i valori esadecimali 0, 1, 2, 5, A, B, Ce D alla porta B.

1 #inc lude <avr / i o . h>2

3 i n t main ( ) 4 unsigned char e l enco [ ] = ”0125ABCD” ; // e l enco de i v a l o r i da

i n v i a r e a l l a porta B5 unsigned char z ;6 DDRB = 0xFF ; // metto l a porta B in output7 f o r ( z =0; z<8; z++) // i v a l o r i da i n v i a r e sono 88 PORTB = e l enco [ z ] ;9

10 re turn 0 ;11

Notare l’uso di char ”elenco[ ]” per inviare una sequenza di caratteri alla portaB.

4.3.2 Time delay

Ci sono tre modi per scrivere un timer in AVR C: usando il ciclo for, usando lalibreria predefinita del C util/delay.h e usando i timer AVR.

Page 46: Appunti di TePSIT - Altervistaantoniomarino.altervista.org/.../06/Appunti-di-TePSIT.pdf · 2017. 6. 22. · Appunti di TePSIT Antonio Elio Marino ITIS "Marconi" Pontedera (PI) 21

CAPITOLO 4. AVR LIBC 45

Tramite ciclo for

Scrivere un programma C che inverte continuamente tutti i bit della porta B ogni100 ms.

1 #inc lude <avr / i o . h>2 void delay100ms ( void ) 3 unsigned i n t i ;4 f o r ( ; ; ) 5 6

7 i n t main ( ) 8 DDRB=0xFF ;9 whi le (1 )

10 PORTB = 0x00 ;11 delay100ms ( ) ;12 PORTB = 0xFF ;13 delay100ms ( ) ;14 15 16 re turn 0 ;17

util/delay.h

La libreria util/delay.h offre due macro interessanti: delay ms(int i) e delay us(inti) con i un numero intero, che definisce rispettivamente di quanti millisecondi (ms)o di quanti microsecondi (us) deve essere il delay.

Come sopra, ecco un esempio di programma che inverte continuamente tutti ibit della porta B ogni 100 ms, stavolta usando la libreria util/delay.h:

1 #inc lude <u t i l / de lay . h>2 #inc lude <avr / i o . h>3

4 i n t main ( ) 5 void de lay ( i n t d) 6 delay ms (d) ;7 8 whi le (1 ) 9 DDRB= 0xFF ;

10 delay (100) ;11 PORTB = 0X00 ;12 delay (100) ;13 14 re turn 0 ;15

Page 47: Appunti di TePSIT - Altervistaantoniomarino.altervista.org/.../06/Appunti-di-TePSIT.pdf · 2017. 6. 22. · Appunti di TePSIT Antonio Elio Marino ITIS "Marconi" Pontedera (PI) 21

CAPITOLO 4. AVR LIBC 46

AVR timer

CODICE DA SCRIVERE

4.3.3 Inviare dati tra due porte

In questo esempio viene mostrato come inviare sulla porta C i dati che vengonoricevuti sulla porta B.

L’esempio verra sviluppato tre volte, in tre modi diversi.

Primo modo

1 #inc lude <avr / i o . h>2

3 i n t main ( ) 4 unsigned char temp ;5

6 DDRB = 0x00 ; // imposto l a porta B in input7 DDRC = 0xFF ; // imposto l a porta C in output8

9 whi le (1 ) 10 temp = PINB ; // cop io i l contenuto d e l l a porta B dentro l a

v a r i a b i l e temp11 PORTC = temp ; // i n v i o i l contenuto d i temp n e l l a porta C12 13 re turn 0 ;14

Notare che in questo esempio e stata usata la variabile temp e non e stato scrittodirettamente PORTC = PINB.Secondo modo

Usando l’operatore ∼:

1 #inc lude <avr / i o . h>2 i n t main ( ) 3 DDRB = 0xFF ; // metto l a porta B in output4 PORTB = 0x00 ;5 whi le (1 )6 PORTB = ∼PORTB; // i n v e r t o i l va l o r e d i PORTB tramite l ’

opera tore ∼7 re turn 0 ;8

Terzo modo

Usando l’operatore ∧:

Page 48: Appunti di TePSIT - Altervistaantoniomarino.altervista.org/.../06/Appunti-di-TePSIT.pdf · 2017. 6. 22. · Appunti di TePSIT Antonio Elio Marino ITIS "Marconi" Pontedera (PI) 21

CAPITOLO 4. AVR LIBC 47

1 #inc lude <avr / i o . h>2

3 i n t main ( ) 4 DDRB = 0xFF ;5 PORTB = 0x00 ;6 whi le (1 )7 PORTB = PORTB ˆ 0xFF ;8 re turn 0 ;9

4.3.4 Pilotare un pin tramite un altro pin

In questo esempio il pin 4 della porta B verra messo in input se il pin 7 della stessaporta legge 1, altrimenti verra messo in output.

Questo esempio, sebbene concettualmente molto semplice, si adatta perfetta-mente al controllo di un led (posto sul pin 4 della porta B) tramite un interruttore(posto sul pin 7 della medesima porta).

1 #inc lude <avr / i o . h>2

3 i n t main ( ) 4 DDRB = DDRB & ∼(1<<7) ; // i l pin 7 d e l l a porta B v iene messo in

input5 whi le (1 ) 6 i f (PINB & (1<<7) )7 DDRB = DDRB & ∼(1<<4) ; // i l b i t 4 d i DDRB viene messo

in input8 e l s e9 DDRB = DDRB |(1<<4) ; // i l b i t 4 d i DDRB viene messo in

output10 11 re turn 0 ;12

Si lascia al lettore la riflessione sul perche sono stati scelti quegli operatori suibit per mettere il bit 4 di DDRB in input o in output.

Page 49: Appunti di TePSIT - Altervistaantoniomarino.altervista.org/.../06/Appunti-di-TePSIT.pdf · 2017. 6. 22. · Appunti di TePSIT Antonio Elio Marino ITIS "Marconi" Pontedera (PI) 21

Capitolo 5

Appendice

5.1 Le leggi di Ohm

Questa sezione non trattera le definizioni e le nozioni basilari di elettrostatica,perche sono state gia trattate in altre materie e si suppone che lo studente le abbiagia interiorizzate e fatte proprie.

5.1.1 La prima legge di Ohm

Un conduttore, sottoposto ad una differenza di potenziale ∆V ai suoi capi, vienepercorso da una intensita di corrente elettrica I proporzionale a ∆V :

∆V = RI

Tale costante di proporzionalita, R, e detta resistenza elettrica.L’unita di misura della differenza di potenziale e il V olt (simbolo: V ) e quella

dell’intensita di corrente e l’Ampere (simbolo: A). Quindi l’unita di misura dellaresistenza elettrica e il Volt su Ampere, detto Ohm (simbolo: Ω): 1Ω = 1V

A.

5.1.2 La seconda legge di Ohm

La resistenza opposta da un corpo al passaggio di corrente elettrica (dovuta, comeenunciato dalla prima legge di Ohm, a una differenza di potenziale applicata a duecapi del corpo stesso) dipende dalle sue caratteristiche fisiche e geometriche.

In particolare, nel caso di un corpo formato da un solo materiale, di lunghezzal e sezione S, la resistenza elettrica del corpo vale:

R = ρl

S

48

Page 50: Appunti di TePSIT - Altervistaantoniomarino.altervista.org/.../06/Appunti-di-TePSIT.pdf · 2017. 6. 22. · Appunti di TePSIT Antonio Elio Marino ITIS "Marconi" Pontedera (PI) 21

CAPITOLO 5. APPENDICE 49

con rho una proprieta intriseca del materiale, detta resistivita elettrica. La resi-stivita di un materiale e l’attitudine del materiale stesso ad opporre resistenza.Maggiore e tale valore maggiore sara la resistenza opposta dal corpo al passaggiodi corrente elettrica. L’unita di misura della resistivita e l’Ohm per metro (Ωm).

Materiali con bassa resistivita conducono (ad esempio 10−8Ωm) facilmente lacorrente elettrica e sono detti conduttori (un esempio tipico sono i metalli), mentremateriali con alta resistivita (anche dell’ordine di 1016Ωm) non conducono la cor-rente elettrica e prendono il nome di isolanti (ad esempio il vetro, l’aria, il legnoetc...).

5.1.3 Dipendenza della resistivita dalla temperatura

La resistivita di un materiale dipende quasi sempre dalla sua temperatura1, inparticolare nei conduttori essa aumenta all’aumentare della temperatura, negli iso-lanti diminuisce all’aumentare della temperatura. In entrambi i casi la variazionedi resistivita segue la legge:

ρ(T ) = ρ0(1 + α∆T )

dove ∆T e la variazione di temperatura a partire da una temperatura di rife-rimento T0, ρ0 e la resistivita del materiale alla temperatura di riferimento T0 eα e il coefficiente termico del materiale, che descrive come varia la resistivita alvariare della temperatura2. Per quanto detto in precedenza, α e positivo in casodi materiali conduttori e negativo in caso di materiali isolanti (nullo nel caso dellacostantana).

5.2 Trasformazioni lineari

Si supponga di avere un trasduttore che il cui range in output e tra gli 0 ed i 5Volt e un ADC che lavora tra gli 1 ed i 3 Volt in ingresso (sono valori di esem-pio, non riflettono i reali range dei due dispositivi). Affinche l’informazione possapassare correttamente e necessario trasformare i valori in uscita in valori accetta-bili per l’ingresso dell’ADC. Si puo fare in molti modi ed e possibile trasformarliusando diverse funzioni matematiche, ad esempio la funzione lineare, logaritmica,esponenziale etc... (non tutte le funzioni elementari vanno bene: la funzione di

1Esistono materiali, come la costantana (una lega di rame e nichel) in cui la resistivita nonvaria al variare della temperatura.

2Per i piu in gamba: α altro non e che il valore della derivata prima della resistivita in funzionedella temperatura e la formula descritta altro non e che lo sviluppo di Taylor, al primo ordine,di tale funzione.

Page 51: Appunti di TePSIT - Altervistaantoniomarino.altervista.org/.../06/Appunti-di-TePSIT.pdf · 2017. 6. 22. · Appunti di TePSIT Antonio Elio Marino ITIS "Marconi" Pontedera (PI) 21

CAPITOLO 5. APPENDICE 50

trasferimento deve certe caratteristiche, in primis la continuita e la biiettivita, macio non e d’interesse ai fini di questo testo).

Questo capitolo si concentrera sulla trasformazione lineare. Si supponga divoler trasformare i valori tra Vout− = 0V e Vout+ = 5V in valori tra Vin− = 1V eVin+ = 3V , facendo in modo che a 0V corrisponda un Volt, a 5V corrispondano3V e i valori intermedi siano proporzionali.

La relazione matematica che caratterizza una trasformazione lineare e:

Vin = mVout + q

con Vin la tensione che si vuol ottenere (tra 1 e 3 Volt), Vout quella che esce daltrasduttore (tra 0 e 5 Volt) ed m e q due valori che vanno calcolati usando leseguenti formule:

m =Vin+ − vin−Vout+ − vout−

q = −Vout−Vin+ − vin−Vout+ − vout−

+ Vin− = −Vout−m+ Vin−

Esempio: usando i valori precedenti, si supponga che dal trasduttore escano 2Volt (Vout) e si voglia sapere quanti devono entrarne nell’ADC (Vin) mantenendola proporzione:

Vin = Voutm+ q

I valori di m e q sono:

m =Vin+ − vin−Vout+ − vout−

=3− 1

5− 0= 0.4

q = −Vout−m+ Vin− = −0 ∗ 0.4 + 1 = 1

quindi la trasformazione lineare sara:

Vin = 0.4Vout + 1

e, nel nostro caso,Vin = 0.4 ∗ 2 + 1 = 1.8

5.3 DAC

La figura seguente mostra un DAC ladder R-2R a 4 bit. L’interruttore a sinistrarappresenta il bit meno significativo, mentre quello a destra e il bit piu significativo.Vref e la tensione di riferimento mentre Vout e la tensione in uscita, il valore in bitconvertito in tensione. Il valore minimo diverso da 0V disponibile in uscita e

Vmin =Vref2N

Page 52: Appunti di TePSIT - Altervistaantoniomarino.altervista.org/.../06/Appunti-di-TePSIT.pdf · 2017. 6. 22. · Appunti di TePSIT Antonio Elio Marino ITIS "Marconi" Pontedera (PI) 21

CAPITOLO 5. APPENDICE 51

con N il numero di bit.Ogni interruttore puo connettersi a Vref o a massa, a seconda del valore

contenuto nel rispettivo bit (rispettivamente 1 o 0).

Figura 5.1: Convertitore digitale analogico

Per capire come funziona si puo misurare il valore in uscita per ogni singolopiolo R-2R:

Inizialmente si chiude l’interruttore relativo al bit piu significativo (MSB) suVref mentre tutti gli altri interruttori vanno a massa, ottenendo la configurazione

in bit ”1 0 0 0”. Il valore che verra misurato in uscita saraVref21

=Vref2

.Adesso si chiude su Vref il secondo bit piu significativo e si mettono a massa

tutti gli altri interruttori, ottenendo la configurazione in bit ”0 1 0 0”. In questocaso la tensione in uscita sara

Vref21

=Vref4

.Chiudendo su Vref il terzo bit piu significativo e mettendo tutti gli altri inter-

ruttori a massa, ottenendo la configurazione in bit ”0 0 1 0”, la tensione in uscitasara

Vref22

=Vref8

.Chiudendo su Vref il bit meno significativo e mettendo tutti gli altri interruttori

a massa si ottiene la configurazione in bit ”0 0 0 1”. In questo caso la tensione inuscita sara

Vref23

=Vref8

.In pratica per calcolare quale tensione si ha in uscita da un singolo piolo R-2R

bisogna dividere Vref per 2n con n la posizione del relativo bit contando dal piusignificativo (n=1 per il bit piu significativo, 2 per il secondo eccetera, fino ad Nper il bit meno significativo, con N il numero totale di bit).

Nel caso di chiusura di piu interruttori su Vref contemporaneamente dobbiamosommare le tensioni in uscita relative ad ogni bit. Quindi ad esempio la configu-razione in bit ”1 0 1 1” (con il bit piu significativo a sinistra) restituisce in uscitala seguente tensione:

Vout =Vref21

+Vref23

+Vref24

=11

16Vref

Page 53: Appunti di TePSIT - Altervistaantoniomarino.altervista.org/.../06/Appunti-di-TePSIT.pdf · 2017. 6. 22. · Appunti di TePSIT Antonio Elio Marino ITIS "Marconi" Pontedera (PI) 21

CAPITOLO 5. APPENDICE 52

.Si noti che l’uscita minima corrisponde alla configurazione ”0 0 0 0”, cor-

rispondente a 0V, mentre l’uscita massima e a ”1 1 1 1”, corrispondentea

Vout =Vref21

+Vref22

+Vref23

+Vref24

=15

16Vref

Il valore massimo in uscita non e uguale al valore di riferimento, ma poco meno.In generale vale 2n−1

2nVref .

5.4 Fourier

Attenzione: questa sezione conterra imprecisioni e semplificazioni estreme, vistala complessita dell’argomento.

5.4.1 Serie di Fourier

All’inizio dell’Ottocento il matematico francese Joseph Fourier ha dimostrato chee possibile scrivere una funzione periodica (ovvero che si ripete uguale a se stessaad intervalli regolari detti periodi) come somma infinita di sinusoidi:

f(x) =A0

2+∞∑n=1

An · sin(ωnx+ ϕn)

dove A0/2 e il valore medio della funzione in un periodo, gli An sono leampiezze delle varie sinusoidi in cui la funzione periodica e scomponibile, ωn sonole pulsazioni delle sinusoidi e ϕn sono gli sfasamenti delle sinusoidi.

Le pulsazioni ω sono legate alle frequenze f dalla formula ω = 2π · f .

5.4.2 Trasformata di Fourier

Una funzione periodica nel tempo F (t) (cioe che ritorna uguale a se stessa dopoun certo periodo temporale) si dice che e definita nel dominio del tempo.

Data una funzione periodica nel tempo f(t), di periodo T , nulla vieta di fareil seguente integrale:

f(ω) =1

T

∫ T/2

−T/2f(t)e−i2πωtdt

il risultato sara un’altra funzione, f(ω), stavolta in funzione della pulsazioneω.

Page 54: Appunti di TePSIT - Altervistaantoniomarino.altervista.org/.../06/Appunti-di-TePSIT.pdf · 2017. 6. 22. · Appunti di TePSIT Antonio Elio Marino ITIS "Marconi" Pontedera (PI) 21

CAPITOLO 5. APPENDICE 53

Questo integrale prende il nome di trasformata di Fourier e si dice che si e neldominio delle frequenze e non piu in quello del tempo.