Progettazione ElettronicaAlberto Tibaldi 16 ottobre 2010 Indice 1 Capitolo 1 Lezione 01 1.1 Protocollo One-Wire Un protocollo spesso utilizzato in ambito di elettronica ` il cosiddetto “protoe collo one-wire”, circuitalmente implementabile mediante il seguente stratagemma: In un protocollo di trasmissione digitale si possono trasmettere sostanzialmente due segnali: un ‘1’ logico e uno ‘0’ logico. Il concetto di questo tipo di protocolli ` il seguente: utilizzando il segnale logico affermato sia come e informazione sia come alimentazione per gli inverter, ` possibile risparmiare e in termini di alimentazione. Quando “non si parla”, la capacit` si carica; a il fatto che questa si carichi permette di mantenere l’alimentazione anche per gli istanti di tempo in cui si trasmettono segnali negati, ossia ‘0’ logico. Naturalmente, se non vi sono lunghe sequenze di zeri, questo sistema potr` a funzionare, esclusivamente su di un filo. 1.2 Materiali Piezoelettrici Su materiali in genere fortemente anisotropici quali quarzi o ceramiche, atomi caricati positivamente e negativamente sono posti in una struttura irregolare, che tende a generare, a livello macroscopico, effetti abbastanza particolari. Un classico esempio ` quello dei materiali piezoelettrici, materiali che, di fate to, rappresentano un’unione tra il dominio meccanico e quello elettrico. In altre parole, a causa delle grosse anisotropie dei materiali, una sollecitazione meccanica del materiale comporta il generarsi di una carica elettrica; dualmente, la presenza di una differenza di potenziale ai capi del circuito provoca variazioni nelle dimensioni meccaniche del materiale. 2 Materiali di questo tipo genericamente vengono classificati come isolanti, ma in questi casi, il fatto che venga su di essi sollecitata la suddetta forza, provoca la generazione di cariche. Si pu` dire che la piezoelettricit` sia o a modellizzabile mediante un coefficiente che lega la carica Q presente sulla superficie del materiale con la forza F impressa su di esso: Si ` detto che: e Q ∝F C Si pu` tradurre la forza in differenza di potenziale V , considerando la o capacit` del dispositivo piezoelettrico, modellizzabile come un generatore di a corrente in parallelo a una capacit` (data dalle propriet` dielettriche del a a materiale) e una resistenza che modellizza i fenomeni di perdite, che dissipano immediatamente la carica nel materiale. La prima applicazione che si pu` dunque pensare per blocchi basati su o questo materiale ` la trasduzione meccanico-elettrica. Applicazioni in cui si e possono trovare quarzi sono ad esempio trasduttori di rugosit` di un matea riale, o microfoni (poich` le onde sonore tendono a deformare il quarzo per e via delle oscillazioni meccaniche che inducono, oscillazioni che poi verranno amplificate mediante stadi di amplificazione). Tendenzialmente, tensioni di 50 ÷ 100 V producono spostamenti di qualche µm. Altra applicazione ` quele la di “cicalino”, “buzzer”: dal momento che l’applicazione di una tensione provoca variazioni nelle dimensioni fisiche, riuscendo a farlo “suonare” si pu` o ottenere quello che ` il buzzer presente in ciascun computer (specialmente e fisso): In questo modo si pu` usare quindi la deformazione meccanica del quarzo o per far muovere una membrana. Di fatto, un piezoelettrico ` modellizzabile mediante una capacit` non e a lineare. Per pilotarlo, esistono diverse strategie, diversi trucchi comunemente utilizzati, per farlo ad esempio oscillare o farlo comportare in diverse maniere: Q ∝ F =⇒ V = • Un esempio potrebbe essere quello di usare un circuito logico sequenziale instabile, costituito anche di semplici porte quali NOT logici: Polarizzando, il segnale continua a invertirsi, ottenendo di fatto un’onda quadra che pilota il piezoelettrico. Volendo ` possibile variare questo e fenomeno introducendo, al posto delle porte logiche, amplificatori di potenza. • Variante dello schema precedente ` il cosiddetto “pilotaggio a ponte” o e a “H”: 3 In questo caso si parla di piezoelettrici, ma un pilotaggio di questo genere potrebbe essere utilizzato con carichi di tipo pi` svariato, quali u ad esempio motori elettrici. • Avendo una matrice, un blocco in grado di trasdurre in maniera idonea le variazioni del quarzo, ` possibile fare ancora qualcosa di interessante, e quale un oscillatore. Utilizzando uno schema concettualmente di questo tipo: Si pu` pensare che esista la seguente equivalenza: o Utilizzando dunque una struttura di questo tipo, ` possibile ottenere e un oscillatore basato sul quarzo. Sostanzialmente, si pu` vedere che la o frequenza di oscillazione di un quarzo ` abbastanza elevata: e fquarzo ∼ 215 Hz Utilizzando un blocco di amplificazione o una porta logica o elementi pi` complessi quali una FPGA, ` possibile ottenere un oscillatore u e digitale al quarzo: Al fine di far lavorare il quarzo in questa maniera, tendenzialmente lo si af lavorare al centro della caratteristica, ottenendo una frequenza di lavoro del tipo: f= 1 √ 2π LC1 ⊕ C2 Dove C1 e C2 sono capacit` introdotte dall’utente. In realt` ` possibile a ae sfruttare gli effetti capacitivi parassiti contenuti all’interno del quarzo, ottenendo ottimi risultati. L’uso come “oscillatore” ` probabilmente uno dei pi` interessanti per il e u quarzo. Esso ` cos` frequentemente utilizzato che spesso si trovano dei bundle e ı pre-montati sotto il nome di XCO. Di frequente, nei sistemi a microprocessore, si tende addirittura a inserire il quarzo assieme alla CPU, in modo da sfruttare direttamente un segnale di temporizzazione prodotto all’interno del sistema per la gestione delle attivit` di elaborazione. a 1.3 Pilotaggio di schermi a cristalli liquidi (LCD) Uno schermo a cristalli liquidi (LCD : Liquid Crystal Display) ` sostanziale mente un sistema di visione basato su di una matrice di elementi allineati 4 questo tipo di fenomeno provoca l’introduzione dell’opacit` lattiginosa. Il campo elettrico riesce infatti a muovere e orientare questi cristalli.tra due elettrodi trasparenti. introducendo una nore male tensione continua (DC). Per questo motivo si utilizza di solito un conduttore trasparente basato sull’indio-stagno (ITO). in AC. in modo da non far migrare gli elettroni ed evitare i danni. si continua a “girare” e “girare” le molecole. risulterebbero essere. Continuando a invertire la polarizzazione. dunque. oltretutto. questo liquido tuttavia presenta propriet` particolari. tra cui propriet` elettrolitiche: nel caso si utilizzi una a a DC. implementanti capacit` di tipo a “non lineare”. Prima di introdurre il campo questi cristalli in fase liquida si organizzano in modo da essere complessivamente neutri. “gria gia”. e due filtri polarizzanti (al fine di visualizzare correttamente l’immagine prodotta dai cristalli). a valor medio nullo! Anche solo una componente continua nella AC porterebbe al fenomeno di elettromigrazione. danneggiando il dispositivo. lo schermo non funzioner` di certo (e anzi a probabilmente si dannegger`): gli elettrodi che si utilizzano per la polariza zazione sono di fatti immersi nel liquido. Quali caratteristiche aggiuntive deve avere questa tensione di polarizzazione? Bisogna prestare molta attenzione perch`. utilizzando una metallizzazione tra i cristalli si potrebbe comunque introdurre una polarizzazione. Si noti che esistono problemi di banda passante: come qualsiasi sistema. a causa della loro costituzione (materiale + dielettrico “particolare”). ottenendo immagini. Per ciascuna cella di cristallo liquido. Ci` che bisogna fare dunque. dunque emette luce. Questi “liquidi” hanno una sorta di “testa polarizzata”: introdotte in un condensatore. potrebbe essere la seguente: Introducendo una topologia a righe e colonne si pu` ottenere un array o bidimensionale. si avrebbe un fenomeno di elettrolisi che provocherebbe un’elettromigrazione nel liquido. ` sostanzialmente necese sario un pilotaggio mediante questo tipo di “condensatori trasparenti”. ` utilizzare rigorosamente tensioni/correnti ale ternate. rappresentato dai due elettrodi. Introducendo questi famosi elettrodi e applicando il campo ` possibile orientare e produrre luce. dal momento che il campo e elettrico risulta essere perpendicolare a esse. propria degli LCD. pilotando con varie tensioni i cristalli si riesce dunque ad introdurre un colore. ma in maniera casuale. Il fatto che gli elettrodi siano trasparenti deve essere ovvio: ci` che si intende ottenere ` un dispositivo o e che produce immagini. nella fattispecie. ` possibile sfruttare la polarizzazione di queste “teste” per e orientare in diverse maniere ciascuno di questi liquidi. se il segnale di eccitazione ` troppo rapido si ha il rischio di non far proprio e 5 . questi condensatori. ma non si potrebbe visualizzare la luce. L’idea. per polarizzare e dunque o pilotare uno schermo LCD. 2 V Naturalmente. in modo da polarizzarli opportunamente. ` l’avere a che fare e con piste estremamente lunghe. realizzate mediante condensatori. quali perdite o lentezza nel raggiungimento dell’alimentazione. Ci` che si fa dunque ` dimensionare una o e piccola capacit`. 1. un “rifornimento e temporaneo” continuo di carica. C= 6 .2 V. dunque. dunque. e mediante la definizione di capacit` (lineare). ottenere qualcosa del tipo: a 1 µC Q = = 50 µF V 0. in circuiti stampati. in modo da un lato da introdurre una piccola caduta di tena sione. volendo compensare una caduta di carica dell’ordine di 1 µC. uno su tutti di tipo induttivo: Il fatto che si abbia a che fare dunque con piste di questo genere potrebbe provocare fenomeni negativi.4 Condensatori di bypass Una cosa che potrebbe capitare.muovere le molecole. introdurre una capacit` molto vicina al punto in cui l’alimentazione a ` necessaria fornisce. introducendo la possibilit` di compensare perdite anche a a superiori alle massime. si possono tollerare tranquillamente perdite di tensione di 0. nel caso di lentezza di propagazione. Queste capacit`. a vengono comunemente dette “condensatori di bypass”. Ciascuna pista tuttavia potrebbe presentare fenomeni di diverso tipo. Bisogna per questo motivo documentarsi sulle informazioni dei cristalli. ` possibile. nel caso la loro costante di tempo sia troppo alta rispetto all’eccitazione. Ci` che viene fatto. dall’altro comunque la possibilit` di compensare perdite dovute alle a piste induttive. buona cosa potrebbe essere quella di sovradimensionare queste capacit`. ` introdurre delle capacit` o e a (mediante condensatori) in modo da ottenere un effetto “serbatoio”: dal momento che l’induttanza insita nella pista rallenta la propagazione dell’alimentazione. Supponendo di aver a che fare con circuiti alimentati con 5 V. 2. dal e momento che i riferimenti sono tra loro disaccoppiati. Il trasformatore sostanzialmente ` un filtro passa-alto: le tene sioni di polarizzazione. La carica elettrostata a ica nei blocchi esterni nella fattispecie potrebbe provocare problemi di vario tipo. ossia separare le masse e il potenziale di riferimento del processore.1 Isolamento galvanico Uno dei problemi principali che si hanno utilizzando processori o altra elettronica se montata in sistemi esterni di vario tipo ` il fatto che si possa avere e una suscettibilit` di diversa entit` ai problemi esterni. principali cause di scariche in sistemi non isolati. Una delle idee alla base di questi meccanismi di protezione potrebbe essere l’isolamento galvanico: volendo trasferire informazione ad esempio a un calcolatore senza dover prestare troppe attenzioni.1 Trasformatore Induttivo Esistono diversi modi per ottenere un isolamento di tipo galvanico. Ci` che si pu` fare per evitare il propagarsi o o di questi problemi ` dunque utilizzare sistemi di protezione per le scariche e elettrostatiche. dal momento che tra primario e secondario non esiste una continuit` metallica che possa in qualche modo collegare i due a riferimenti. non possono passare. non ` detto che anche l’altro subisca qualcosa di simile. un’idea potrebbe essere quella di disaccoppiare i riferimenti dei circuiti esterni e di quelli interni. il pi` u classico senza dubbio ` il trasformatore induttivo: e Se vi fosse una tensione di disturbo tra i due. sotto questo punto di vista. dal momento che un trasformatore di questo tipo isola la 7 . Primario e secondario possono tra loro “flottare”. onde evitare fenomeni di folgorazione. ossia se uno tra primario e secondario per esempio si trovasse ad alte tensioni a cause di variazioni dei riferimenti.Capitolo 2 Lezione 02 2.1. la filtra. • Informazioni sulle collisioni avvenute: il protocollo ethernet richiede controlli di questo tipo. Dal momento che spesso tuttavia i disturbi possono essere di tipo impulsivo. o a dunque. si dovrebbe fare qualcosa del genere: un segnale digitale ` un segnale tendenzialmente e costante. ossia di temporizzazione per il protocollo. il fatto di comunicare mediante questi u microtrasformatori permette di isolare galvanicamente tutto. • Segnale di clock. Ci` che pu` passare tuttavia potrebbe essere una compoo o nente alternata: la capacit` modellizza infatti il fatto che tensioni a frequenze a sufficientemente elevate (si spera siano segnali) possano tranquillamente passare per il trasformatore. non ` possibile inviare una trasmissione con molti e zeri o molti uni consecutivi: introdurre sempre lo stesso dato rende il segnale 8 . di fatto. ottenendo un circuito equivalente di questo tipo: Le due capacit` permettono sostanzialmente di trasformare il sistema a filtrante da passa alto a passa banda: un segnale statico come prima non pu` o passare. ` sostanzialmente il contributo armonico contenuto tra fmin e fmax . a a quindi fare danni. per ora. trasformatori che trasportano informazioni relative a tre elementi: • Dati da trasmettere da una parte all’altra della connessione. almeno una buona parte delle armoniche che costituir` l’impulso (segnale a larghissimo contenuto spettrale) potr` passare. Mediante queste tre informazioni ` possibile ottenere un dialogo tra monte e e valle. a causa dell’effetto passabasso introdotto dallo schermo. Esempio di uso di trasformatori induttivi: RJ45 Il tipo di spinotto RJ45 (tipico delle connessioni via ethernet). ` costituita e da tre trasformatori piccolissimi. ma neanche un segnale ad alta frequenza. Si noti che. in modo da rendere “passabile” il segnale e poterlo quindi interpretare “dall’altra parte”. se la linea da una parte o da un’altra subisse cambiamenti di riferimento per i motivi pi` svariati. Dal momento che il segnale statio co non pu` passare. tutto ci` che potr` passare di un segnale. questo sistema potrebbe essere inadatto. Ci` che si pu` fare ` migliorare il trasformatore medio o e ante uno schermo elettrostatico tra i due avvolgimenti.continua. che pu` assumere due valori. nei segnali digitali. Ci` che si o o potrebbe fare ` modulare la parte continua mediante una portante a free quenza idonea. e Ci si potrebbe a questo punto porre una domanda: e se si intendesse monitorare una continua? Beh. Si usa di solito una modulazione di tipo “Manchester”. Si noti che anche parlando di questi tipi di sistemi. ma ha un grosso difetto: il e fatto che si introducano dei diodi nel sistema. cosa che richiede dunque l’introduzione di una certa circuiteria anche a valle del sistema. per far ci` si utio lizzano convertitori basati su comparatori di soglia. nel caso le scariche abbiano basse entit` ma siano a molto frequenti. Questo dispositivo ha una transcaratteristica di questo tipo: Questo tipo di schema ` molto interessante nel caso si abbiano scariche e poco frequenti ma ingenti. un’alternativa potrebbe essere quella di utilizzare inoltre operazionali dotati di uscita open collector: considerando come due possibili stati la saturazione o l’interdizione. ossia una modulazione digitale di fase. linee accoppiate. diodi tipicamente a giunzione. mediante o trasformatori elettromagnetici dai 100 ai 100 MHz. la protezione con il circuito di clipping ` pi` indicata. mediante amplificatori operazionali. si deve poter rendere il dato “interpretabile” dal calcolatore in uscita dal pin “a valle”. o o “transil”. ma quindi sostanzialmente utilizzare delle linee di trasmissione. Il dispositivo introdotto ` detto “TVSD” (Transient Voltage e Suppression Diode). si crea un corto circuito verso il potenziale di riferimento del sistema. Oltre a modulare. Una protezione un po’ pi` “moderna” della precedente potrebbe essere u la seguente: Ci` che si pu` fare ` mettere un circuito come questo a valle del trasforo o e matore: se si hanno picchi di tensione il fusibile si fonde. dunque verr` filtrato. che annulla dunque le sovratensioni/sovracorrenti. per quanto comunque ottima.sostanzialmente prossimo ad una continua. Una protezione spesso utilizzata ` la seguente e (circuito di clamping o di clipping): Questo sistema ` molto utilizzato e funziona. e u 9 . al fine di evitare questo probleo e ma. Mediante trasformatori normali si pu` ottenere una banda dai 20 ai 100 kHz. al fine di fare ci`. si tratta in sostanza di una coppia di diodi zener in antiserie: quando essi vanno in rottura elettrostatica. Ci` che si dovrebbe inoltre fare ` “proteggere la protezione”: essa non ` o e e assoluta. ma quindi trasformatori di tipo elettromagnetico (sostanzialmente a parametri distribuiti). di conversione. Volendo andare ad alta frequenza. danneggiandosi ma non facendo danneggiare tutto il resto: meglio sostituire un fusibile che l’intera CPU. dopo aver demodulato. con un trasformatore galvanico. a seconda della ditta che lo distribuisce. ci` che si a o pu` fare ` tuttavia utilizzare un modulatore. ` necessario demodue lare. Esso si pu` trovare anche sotto il nome “tranzorb”. si pu` introdurre il significato di “0” o o “1” logico. rendendolo inevitabilmente lento. o serve inoltre un trasformatore a banda larga. restringe la banda passante del sistema. ` nece essario introdurre protezioni. dunque nella guida ottica vi ` il buio. una semplice guida o e d’onda ottica: mediante uno spazio libero e delle lenti. spesso rappresentati mediante il seguente simbolo: In questo modo si riesce a disaccoppiare in maniera ottimale le due parti dell’amplificatore operazionale. ossia un dispositivo in grado “naturalmente” di passare da una continua ai THz. non e si approfondisce l’argomento. Questo ` sostanzialmente il principio di funzionamento degli e optoisolatori. se si invia nel LED un flusso e e di cariche. Il fotodiodo “catturer`” fotoni emessi dall’optoisolatore a a e li trasformer` in tensione/corrente. ` il LED: accendendo/pilotando un led ` possibile genere e are infatti un segnale elettromagnetico a frequenza elevatissima.2 Optoisolamento Come abbiamo detto l’isolamento galvanico ` assolutamente d’obbligo.Cenni al disaccoppiamento capacitivo Una tecnica alternativa per l’isolamento galvanico ` basata sull’introduzione e di due capacit` nel circuito. modulare. Ci` che si fa in sostanza ` utilizzare una coppia LED + Fotodiodo di o e questo tipo: Quando nel diodo LED scorrono pochi microampere esso sostanzialmente ` spento. sotto il punto di vista della semplicit` almeno? Beh. non ` molto “semplice”. per esempio “otticamente”. aba biamo capito. Un sistema di questo tipo ` riscontrabile in alcuni amplificatori e operazionali della Analog Device. dall’altro isolamento ottico e dunque galvanico (poich il collegamento tra i due segnali non ` elettrico bens` esclusivamente ottico). 2. 10 . permette di a non far passare le frequenze basse sui segnali di “andata” e “ritorno” dal circuito. ottenendo da un lato trasmissione di a segnale. dunque si ottiene una luminosit` intensa. come isolamento galvanico. Si pu` fare di e o meglio. Altro modo per disaccoppiare potrebbe essere quello di usare dei rel`. ottenendo sostanzialmente tra “primario” e a “secondario” qualcosa del genere: Questo tipo di disaccoppiamento. Ci` e o che abbiamo introdotto. si ottiene qualcosa del genere. ` brutto: serve una sorgente elettromagnetica che permetta di e essere isolata in modo diverso. Un “modulatore naturale”. tuttavia. in modo da discretizzare l’uscita. si arriva a correnti anche dell’ordine dei mA. basato sulle due capacit`. Ci` che si o pu` fare dunque ` utilizzare. In uscita dal e ı fotodiodo spesso si introducono comparatori di soglia. ottenendo dunque una reattivit` molto elevata.Come si fanno in pratica? Beh. si pu` ottenere un LED che si acceno der` molto di meno. Un esempio di funzionamento per qualcosa.1 =⇒ R1 . Introducendo una resistenza bassa. avena e dolo molto acceso tuttavia la sensibilit` ` bassa. potrebbe essere il seguente: A seconda della resistenza introdotta si pu` ottenere oggetti pi` “veloci” o u o pi` “sensibili”: la velocit` e la sensibilit` sono sostanzialmente dipendenti u a a dal punto di funzionamento in cui si utilizzano questi blocchi: Mediante la resistenza si pu` scegliere quanta corrente/tensione introo durre al LED. La resistenza di pull-up per il a u fotodiodo si pu` dimensionare in questo modo: o 11 . ma molto pi` lento il circuito. al e u contrario. dal momento che distinguere le variazioni per quanto concerne un LED molto acceso ` pi` complicato. si fa correre molta corrente. si fa correre molta corrente. e la relativa trasformazione in corrente. avendoa e lo molto acceso tuttavia la sensibilit` ` bassa. ma dunque sostanzialmente quanto amplificare la percezione della luce in ingresso. dunque la transcaratteristica da considerare sar` fondamentalmente ribaltata rispetto a quella appena a vista: Mediante la resistenza si pu` scegliere quanta corrente/tensione introo durre al fotodiodo. Per quanto riguarda invece il fotodiodo. l’optoisolamento intrinsicamente contiene modulazione. cosa positiva sotto il punto ae di vista della reiezione dei disturbi in ingresso. La resistenza di pull-up u per il LED si pu` dimensionare in questo modo: o VAL − VM IN ≤ Imax R1 Dati dal datasheet i vari dati della formula si pu` ricavare semplicemente o Rpu. con una resistenza elevata. rendendo dunque sensibili le variazioni di a luminosit`. come si vede dallo schema esso viene sostanzialmente polarizzato inversamente. rendendo dunque sensibili le variazioni di luminosit` in a a funzione dei disturbi. dunque non ` di solito e necessario introdurre ulteriori sistemi di modulazione. ottenendo dunque una reattivit` molto elevata. si pu` ottenere un fotodiodo o che si accender` molto di meno. mediante fotodiodi+comparatori integrati. al contrario. ma molto pi` lento il circuito. da un lato esistono moduli con optoisolamento incorporato. dal momento che distinguere ae le variazioni per quanto concerne un fotodiodo molto acceso ` pi` complie u cato. ad esempio un lanciamissili. dal momento che il diodo ` molto acceso. dal momento che il diodo ` molto acceso. con una resistenza elevata. Introducendo una resistenza bassa. ma dunque sostanzialmente quanto renderlo luminoso. si pu` causare un cambio di corrente nel fotodiodo e accendere o il TRIAC ad esempio. O si mette un MOS/BJT di potenza. Queste tecniche possono trovare applicazioni nei pi` svariati campi. i TRIAC. o si utilizzano interruttori elettronici di potenza. ı 12 . ma spesso vengono usati ad esempio come sensori di posizione: Quando il fotodiodo non ` pi` alimentato significa che c’` qualcosa in meze u e zo al supporto propagativo ottico. e il carico mediante un rel`. si riesce a costruire un sistema di rilevamento per la presenza di oggetti in un dato spazio.3 V). ` possibile e e fare ci`. la presenza di metalli in un liquido per esempio.3 volt ` possibile e da un lato trasformare il segnale digitale in segnale discreto di comando. si deve introdurre un’uscita in grado di interfacciare correttamente l’optoisolamento con il motore per il lanciamissili. Utilizzando una batteria di LED/fotodiodi. In sostanza. considerando il trigger di Schmitt come pilotato da una logica standard (sui 3.2 ≤ 100 kΩ Se la tensione varia troppo lentamente (in dipendenza del punto di lavoro scelto) allora non ` neanche lontanamente prossima all’essere digitale.10 kΩ ≤ Rpu. in grado da fare da open collector e pilotare il carico. Modificando la lunghezza della guida d’onda sar` possibile ottenere dia verse tensioni: Per quanto riguarda a questo punto l’interfaccia con il motore. in grado di o ee trasformare un livello di tensione in un altro (i rel` di solito si pilotano a e tensioni alte. Volendo usare per problemi di questo tipo. quali u la rilevazione di variazioni ottiche: spesso vengono da un lato usati come “fine corsa” nei sistemi meccanici. come gli SCR. sfruttando il e principio della magnetoresistenza e cos` trovando qualcosa. Realizzando un demodulatore pilotato da un fotodiodo. Per pilotare il rel` ` necessario un traslatore di livello. ` sufficiente utilizzare un rilevatore Hall e un piccolo magnete. dunque possono commutare anche a frequenze molto pi` elevate. ottenendo e la traslazione di livello. come 12 V). Pilotando il circuito mediante un transistore. in modo e da avere condizioni di scatto brusche con isteresi. e pilotare un dispositivo di potenza. assolutamente scorrelati dall’isolamento galvanico. dal momento che non si hanno poli dettati dai u limiti delle latenze meccaniche. ottenendo un “optorel`”! In questo modo. si pu` fare qualcosa o del genere: Si ricordi che correnti troppo elevate sono sempre svantaggiose: correnti troppo elevate potrebbero in questo caso bruciare i contatti. per e questo motivo ` necessario in uscita utilizzare un Trigger di Schmitt. gli IGBT: Questi sono interruttori non-meccanici. anche con una normale logica da 3. la memoria dati e quella codice sono separate). assieme ad esso. • Segnali di controllo. bisogna tener conto di alcune cose: • Controllare che ci sia memoria sufficiente per eseguire l’algoritmo e il programma (utilizzando margini larghi per la realizzazione: le implementazioni in linguaggio macchina potrebbero nascondere sorprese sotto questo punto di vista). la periferica in questione. ossia programmi o dati che potrebbero essere eseguiti. u Alcune altre osservazioni: sempre tenersi larghi. • Dati. ottenendo dunque un comportamento pi` o meno equivalente del sistema finale. • Controllare che il microprocessore sia appropriato per le operazioni da svolgere (in termini di parallelismo dei dati da gestire: 8. mediante una descrizione VHDL. sulla a memoria ROM. l’architettura Harvard ` decisamente preferie bile. interfacce per periferiche di vario genere. • Guardare cosa c’` nelle periferiche standard a disposizione. come gi` detto. si manda il codice che si intende eseguire al microprocessore. e Le periferiche standard sono periferiche normalmente introdotte assieme a microprocessore e memoria al fine di eseguire del codice. al fine di evitare false interpretazioni. Dai dati. nella memoria codice. trasporta tre tipi di dati: • Indirizzi. in questo caso. il quale a sua volta lo carica su di 13 . Solitamente. Potrebbero non essere presenti tuttavia periferiche standard idonee allo svolgimento di particolari operazioni. un’idea potrebbe essere quella di simulare. 32 bit di parallelismo a seconda dei casi). 16.2. per ordine del processore. alcuni altri blocchi: Vi ` un bus al quale son collegate tutte le strutture con cui il microprocese sore deve interagire: memoria (nel caso di architettura Harvard. generalmente.3 Microprocessori e Sistemi Digitali Normalmente un microprocessore viene fornito in schede in cui sono contenuti. una volta portati. Il bus. il blocco di memoria considerato separatamente dal microprocessore contiene memoria dati. per il codice. Un sistema elettronico digitale completo potrebbe avere questa topologia: Dato a disposizione un sistema del genere. dunque si pu` riprendere in seguito.una memoria ROM. si riesce a far aumentare la frequenza dell’oscillatore. facendolo operare u molto pi` rapidamente. esso ha un consumo ridotto. Tenere in reset il sistema finch` la frequenza di PLL non si ` stabilizzata e e al valore corretto di funzionamento. Fare un conteggio di prova. Il cristallo al quarzo alla base dell’oscillatore in uso (generalmente. la macchina a stati realizzata dal processore si ferma. ` pure possibile mandare in ibernazione il sistema elettronico: e fermando il clock e abbassando la tensione. Controllare che le informazioni siano presenti e corrette. esattamente da dove si ` rimasti. i dati elaborati dal processore fino ad un certo istante vengono mantenuti. Temporizzare il circuito. e Molte schede hanno un oscillatore interno.4 GHz. in modo da aumentare la frequenza di clock e dunque temporizzare il circuito con un segnale molto pi` veloce. l’elaborazione. dunque “sganciare” il processore che dovr` a lavorare correttamente (power-on reset). ma un PLL fa aumentare la frequenza: Utilizzando una portante di 2. 3. il cristallo continua a lavorare a questa e frequenza. in modo da poter generare un segnale di temporizzazione all’interno del sistema elettronico stesso. Quando il sistema ` in uso normale. Alimentare il circuito. mediante un qualche evento o (in seguito descritto). Spegnendo mediante comandi questo clock. in questo modo. dal momento che la memoria codice ` collegata direttamente al processore. aggiornare il sistema e caricare i condensatori di controllo. 2. ancora mentre esegue la n-esima. e Se poi la memoria di dato (non direttamente collegata al processore) ` e una SRAM. 32 kHz): una volta che si mano da il sistema in ibernazione. un oscillatore di Pierce) viene fatto oscillare alla minima frequenza che pu` generare (nel caso da noi analizzato. dal momento che non vi ` trasporto di codice sul bus di dati: ` possibile effettuare contemporaneae e mente i preparativi per la futura operazione e al contempo lavorare sul bus. ` e necessario seguire i seguenti passi: 1. 5. al fine di garantire un corretto funzionamento. il sistema viene congelato su di uno stato. u In un sistema digitale. Mantenendo in zone diverse le memorie il program counter (PC) pu` o incrementarsi tranquillamente. dunque il processore “fetchare” l’istruzione (n + 1)-esima. 4. 14 . ma generalmente programmabile (dunque Flash o EEPROM). dunque abbassando le tensioni ` possibile fermare lo stato e del circuito. Si aspetta per un certo numero di clock in uno stato di reset. come gi` detto.3. con un’interfaccia USB. • Routine legate ad eventi aperiodici. segnale che informa l’alimentazione che il PLL converge a una certa frequenza. introducendo dati e programmi in memoria che simulino una certa periferica. sostanzialmente riconducibili per` a due tipi: o • Routine legate ad eventi periodici. ossia un segnale in cui si o ordina di salvare tutte le informazioni salvabili su di una ROM. dunque su di una memoria non volatile. e producendo dunque risultati errati. hard-reset. Esso ` programmabile e mediante l’introduzione di dati da un computer a una memoria flash. Questa pu` essere o fatta sostanzialmente in due maniere: • Mediante software. e altri e meccanismi di power-on reset): ` infatti necessario mantenere “fermo” il e processore. a • Collegando periferiche vere e proprie al processore. con 112 piedini di I/O. dunque non prevedibili e non ripetitivi. al fine di dare priorit` a 15 . nella fattispecie il MC9S12E128 della Motorola (ora Freescale). dopo di che l’alimentatore riceve un segnale di “power good”. in cui la frequenza tuttavia potrebbe non essere dettata dal clock (processi ripetitivi). Lo stesso circuito (generalmente un comparatore) che controlla e invia il power good pu` generare un “power fail”.1 Introduzione al Motorola MC9S12E128 Il processore che verr` descritto e utilizzato per il resto delle lezioni sar` un a a HCS12. affinch` non parta ad effettuare le elaborazioni da stati errati. per poi “uccidere” il sistema. Una cosa che pu` essere molto importante ` l’interfaccia elettrica tra un o e componente generico e il microprocessore in questione. dunque in cui si campiona qualcosa ad intervalli regolari. Si tratta di un processore a 16 bit. Ci` che ` possibile ` che sia necessario interrompere il PC (program o e e counter) e far partire una procedura di interrupt. 2. Uno degli elementi pi` interessanti del processore ` il controllore degli u e interrupt: per qualsiasi tipo di operazione sar` sempre necessario effettuare a diverse routine. una volta capito dove e come mettere qualcosa sull’uscita.Tra gli altri sotto-sistemi presenti generalmente in un sistema digitale del tipo descritto ce n’` anche di altri generi (watchdog. 16 . sono in grado di ricevere segnali in grado di avviare una procedura di interrupt ed eventualmente risvegliare il processore e fargli eseguire qualcosa. anche a processore spento. Esistono porte sempre aperte e pronte che. una routine pu` dunque svegliarla! Ci` sar` o o a interessante in seguito.a un evento piuttosto che a un altro. Una cosa importante ` essere in grado di e scrivere processore per svolgere le varie funzioni dell’interrupt: se la macchina era ibernata in hardware. quali u osservare con l’oscilloscopio i segnali sulla scheda su porte di servizio. Esso permette di sostituire lavori pi` complicati ad esempio in fase di debug. ossia quello su cui scrive l’indirizzo per poi ritrovarsi 17 . per la gestione di dato inoltre servono altri due registri e altre due linee da 32 bit: il Memory Address Register (MAR). e si prevede di utilizzare quattro linee: una per il program counter. Si avrebbe una struttura di questo genere: Ciascuna linea ha parallelismo 32. Esistono e diverse tecniche per la gestione dell’interrupt: • MMC : Controllore mappatura di memoria: si tratta tutto sostanzialmente come memorie. verso la memoria di codice. parametro molto importante.Capitolo 3 Lezione 03 3. • Bus Multiplexato (Multiplexed external bus interface): si legge la memoria e si scrive un’istruzione. periferiche e altro sempre come si accede ad indirizzi di memoria. idem tra memoria di codice e istruction register. accedendo dunque a registri. si pu` utilizzare una mappatura a memoria per le suddette periferiche.1. Attribuendo alle periferiche ad esempio indirizzi poco interessanti in quanto non utilizzati. vi ` una certa latenza. o • BDM : Modulo di bus presente : ` come avere un processo in parallelo al e programma eseguito che osserva un registro di memoria.1 Aspetti del microprocessore MC9S12E128 Cenni sull’interrupt Un parametro molto importante per quanto riguarda il processore ` la coside detta “interrupt latency” (tempo di latenza dell’interrupt): da quando si invia un segnale per richiedere un interrupt a quando il processore si “sveglia” e lo esegue.1 3. le ultime due sotto il punto di vista del codice vero e proprio. dove sar` disponibile. dal momento che le prime due sono differenti sotto il punto di vista della scelta e dell’indirizzo codice da prelevare. mediante il comando “LOAD 5000” l’instruction register (IR). anzich` inviare 4 bit per volta. in cui nel primo si “scrive” l’indirizzo da dove si vuol leggere/scrivere. software) circa: 4 × 32 = 128 Ossia 128 pins. e l’instruction register piuttosto che il memory data register: si tratta di scelte coerenti. ma si vuole ribadire il seguente concetto. esistono alcune linee (16) sempre in attesa. le tensioni basse. Nel processore in questione c’` una cosa di questo genere: e Si ha un sistema di multiplexing del bus tale da ridurre ulteriormente le linee di bus. dal a momento che si riduce il parallelismo della trasmissione di dati. Con una struttura di questo tipo si dovrebbero saldare (a livello comunque alto. Ci` che si pu` fare con il multiplexing. che comunque verr` ri-ribadito e ripreso: anche se il sisa tema sta dormendo. sveglie. Per un sistema piccolo un numero cos` elevato di interı connessioni pu` essere inutile. dopo di che si porta indietro. 18 . a e se ne pu` inviare 1 per volta. si preleva dalla memoria il dato ad esso corrispondente.il dato nell’altro (Memory Data Register): si tratta in sostanza di due registri temporanei. nell’altro si legge/scrive il contenuto. ossia se il clock ` fermo. Si noti ancora una volta: si parla di interrupt. risparmiando sul parallelismo dell’address bus. a che possono svegliare il processore quando ` necessario (un po’ come nei pc. Si noti che ` sempre necessario passare dall’address a e bus. quindi si scrive nel MAR l’indirizzo di 5000. o ma perdendo in velocit`: al posto di 4 colpi di clock se ne impiegano 16. dunque la e macchina a stati fissa ad uno stato e senza possibilit` di riprendersi di “proa pria spontanea volont`”. o o o ` ci`: e o Si sceglie in sostanza “cosa far interagire”: si pu` scegliere se inviare o nel bus il program counter piuttosto che il memory address register. Si usa concettualmente qualcosa di questo genere: si porta a 1000. Se non si hanno problemi di velocit`. e lo si scrive nell’MDR. e con lo stato di “stand by”: quando si preme un tasto. il computer torna a funzionare). utilizzando come frequenza dedicata a ciascuna operazione una sottomultipla della frequenza dell’orologio quarzato (frequenza molto elevata). si riesce a ottenere il Tclk del timer. nel mentre non sarebbe possibile leggere la posta o ascoltare musica. si potrebbe utilizzare l’interrupt: il limite temporale sarebbe di fatto la latenza di interrupt. il processore sarebbe sostanzialmente in grado di portare avanti solo un’operazione per volta: supponendo di stampare un libro mediante interrupt. – Sequenze di impulsi (in grado ad esempio di identificare gli stati di un qualcosa. se si e intende utilizzare la PWM (Pulse Width Modulation) per il sistema. senza contatori esterni. della Freescale. risolvendo dunque i problemi di non simultaneit` delle operazioni.2 Periferiche standard del sistema Verranno a questo punto elencate le periferiche standard del sistema elettronico digitale in studio. 19 . I timer servono per u definire: – Segnali periodici (atti a campionare ogni tot istanti. come di un semaforo). Usando invece un hardware dedicato che conta il tempo. Spesso questo tipo di periferica non ` fondamentale. dunque l’unico tempo che separerebbe due operazioni sarebbe la latenza che trascorre a causa dell’interrupt. ossia il MC9S12E128. mediante il timer. • Timer : per ogni applicazione si ha sostanzialmente un automa a stati finiti che va descritto basandosi su durate temporali. mediante una sorta di “sveglia periodica”). A partire da esso si possono richiamare in maniera “ordinata” le chiamate ad interrupt. • ADC e DAC a 8 bit: dal momento che serve un buon compromesso tra il parallelismo di bit e la velocit` del sistema sono stati scelti 8 bit per a la suddetta periferica. potendone a gestire. Si hanno a disposizione 16 canali e 1 convertitore multiplexato per cui si usa un canale alla volta. Generalmente la conversione D/A ` poco e utilizzata. Avendo a disposizione solo il processore. L’interrupt per` non ` la soluzione a tutti i problemi: o e se si usassero sempre e comunque solo interrupt. trattato mediante un sistema di sample and hold. pi` di una per volta.3. si considera il seguente esempio: si vuole valutare la costante di tempo del circuito. ` necessario usare delle resistenze supe plementari. queste verranno dimensionate in modo da limitare la corrente sul diodo (LED). Esercizio 01 Volendo pilotare un LED accendendolo con 10 mA a Vγ = 1. una per ciascun quesito. o o e utilizzare la seguente formula: τ= ∆Q = (Vnom − Vmin ) · C 20 . 4 V. in modo da fissare alcune idee riguardo gli argomenti precedentemente proposti.Capitolo 4 Lezione 04 Si propone a questo punto una piccola correzione del test effettuato in aula. Si pu´ stimare o la costante di tempo τ come: L = 100 ms R Ci´ che si pu´ fare dunque ´. Ci` che si deve fare ` usare due porte logiche in parallelo. Come IOL si hanno 6 mA. 2 V mediante l’uscita di un microprocessore con VOL = 0. data una tensione minima consentita Vmin . Esercizio 02 Per quanto riguarda i condensatori di bypass. in modo da evitare problemi nella ricezione dell’alimentazione per la porta logica. Dal momento o e che esse non si comportano tuttavia in modo ideale. Si divide in 7 sezioni. nel senso che non sono in grado di autolimitare la corrente. ottenendo ci´ che si vuole. mediante un oscillatore. quando la VAL ´ a regime e i controlli e per i colpi di clock scelti dal progettista sono positivi. Esercizio 03 Per XTAL si intende un generico cristallo. e scaricandosi mediante il diodo. un inverter con selezione. 21 . quindi quando la macchina ´ ben cadenzata in modo da non far finire i tutto in stati non e previsti. dunque si pu´ visualizzare la presenza di qualcosa. ricaricandosi mediante R. Per spegnerlo. ´ sufficiente e e mandare il segnale in fase. Se il dato ´ 0 si ha il clock in e fase. Esercizio 04 Dal momento che l’LCD non deve subire fenomeni di elettromigrazione. Il condensatore permette di dare lo “sgancio”. Ci si pu´ aspettare una capacit´ o a nell’ordine dei nF. Mediante entrambi si ottiene disaccoppiamento dal riferimento di rete. o Nel secondo modo oltretutto si riesce a visualizzare otticamente la presenza della tensione. altrimenti si inverte. in modo da non farla mai scaricare del tutto. a si ottimizza introducendo un margine. come ben noto dalla teoria o o e dei sistemi digitali. si pu´ sganciare il reset per entrare nello stato di funzionamento o regolare. Ci´ si pu´ fare utilizzando un EXOR: esso ´. ad esempio quello di Pierce. a partire da un e elemento piezoelettrico quale il quarzo.Aumentando la capacit´. Ci´ che si deve fare o ´ usare un segnale in controfase a media nulla. esso deve essere pilotato in modo che la continua sia nulla. o Esercizio 07 Sono gi´ stati spiegati due sostanziali metodi per la presenza di tensione: a trasformatore e optoisolatore. Esercizio 06 Per quanto riguarda il power-on reset. esso ´ realizzabile. Parlando di RS233. si o e parla delle seriali del computer. ordine di a trasmissione. si considera un livello alto compreso tra i 3 e i 30 V. Semplicemente. Al fine di utilizzarla ´ e necessario specificare il protocollo. quali oscillatori vari e PLL. e si evita di avere problemi. per comunicare per l’appunto serialmente tra calcolatori o tra un calcolatore e periferiche. Si ha inoltre un certo numero di fusibili. nella fattispecie. ı 4. perch´ al primo colpo si forza il segnale. in modo 22 . Questo circuito non ha problemi (se si imposta una resistenza R “forte”). possibile mente separando le alimentazioni “di potenza” da quelle “pulite”. le VDD e le frequenze dei PLL vengono generate automaticamente dal sistema. e Esercizio 09-10 Ci´ di cui si parla ´ uno standard di comunicazione. ripristinabili. ad esempio uno “0” o molto forte. • Farlo funzionare. Questo circuito pu´ essere utilizzato per uno scopo ben preciso: come o circuito “antirimbalzo”. Di solito. Per alimentare un circuito bisogna gi` prestare alcune attenzioni: bisogna a utilizzare il manuale e scoprire quali piedini ` necessario utilizzare. quando si ha a che fare con un sistema elettronico le regole e d’oro sono sempre le stesse: • Alimentare il circuito. • Cadenzarlo (temporizzarlo). si pu´ utilizzare l’interruttore forzando un certo segnale. ci` che si fa quindi ` mettere o e capacit` di bypass. Per ogni contatto meccanico si ha un “rimbalzo” (click).1 Introduzione al Laboratorio Come ` ben noto. Si possono dunque introdurre specifiche logiche di protocollo quali velocit´. in modo da filtrare ed evitare i problemi riguardo le linee a induttive. le pi´ u critiche. e cos´ via.Esercizio 08 Il seguente circuito: Sarebbe semplicemente un bistabile. sarebbe una sorta di flip-flop che si autosostiene. sia sotto il punto di vista meccanico. basso tra i -3 e i -30 V. Per poter imporre un valore in memoria. sia dal punto di vista elettrico. del connettore. per la e corrente al suo interno. un’uscita digitale. 23 . in modo da visualizzare */ } Questo codice andr` sulla flash e far` ci` che ` stato detto. assegnando agli indirizzi a fisici nomi simbolici. in modo da fornire. Spesso si deve fare uso delle seguenti routine. si pu` impostare tutto.da poter evitare danni permanenti alle parti pi´ sensibili. quale ad esempio quella di mappare le porte. con il software “Codewarrior”: esso ` sostanzialmente un compilatore C ad-hoc per la scheda col quale. Porta T) o comanda i led o fa da timer. /* Inizializzazione delle periferiche */ EnableInterrupts. Ci` che non si pu` fare ` o o e comandare direttamente i led con il timer: si passa per T. La porta T a a o e (PTT. ) { /* For ever */ if(ATDSTAT_CCF0) /* Se tutto \‘e pronto */ PTT = ATDDROH. /* Lo metto sull’uscita dei LED. /* Valore di default in uscita */ DDRT = 0xFF /* 8 vit della porta t diventano uscite e si usa sempre questo ordine Si potrebbe ad esempio introdurre un codice di questo tipo: main() { PeriphInit(). elencati sul manuale. Il comportamento di questo pu` o essere regolamentato mediante il calcolatore. e caricando alcune librerie. quale ad esempio u il processore. /* Routine di abilitazione degli interrupt */ for( . . Il potenziometro ha un comportamento di questo tipo: Un convertitore ADC ` collegato al trimmer. Le librerie hanno diverse o utilit`. per l’inizializzazione delle periferiche: PTT = 0x00. • Capire cosa succede quando si compila. quindi a verranno proposte alcune indicazioni per l’uso corretto del processore. esse sono basate sui seguenti a due concetti: • Utilizzare il C in maniera corretta.Capitolo 5 Lezione 05 Questa lezione sar` prevalentemente sulla parte software del microprocesa sore. 24 . 5. Gli strumenti a disposizione sia per la programmazione sia per il debugging sono limitati: in un microprocessore non ` possibile effettuare operazioni di debug mediante e printf(). Usare un debugger a livello di calcolatore che effettua la programmazione inoltre ` antipatico. dal momento che non si hanno periferiche di output a terminale. Verr` fornita un’infarinatura sullo stile da adottare per il codice. di fatto. linka. carica su scheda il programma. dal momento che si parla o e u di sistemi embedded. dunque. ci` ora non ` pi´ possibile. le cui risorse sono di fatto minime. dunque il programma potrebbe andare molto pi´ piano rispetto alla realt`. in quanto la temporize zazione del debugger e quella del microprocessore non coincidono.1 Programmare BENE in C Il microprocessore in uso si programma mediante il linguaggio C. Ci` che si deve fare. Esistono tecniche atte a permettere di scrivere programmi con una quantit` minima di codice. se dai corsi di informatica si ` abituati a programmare su processori e e dalle risorse immense. Troppa u a velocit` potrebbe causare problemi che un debugger non sarebbe in grado di a mettere in evidenza. dunque si pu` dire o o che il debugging sia complesso. sono 8 led. Il problema ` che. ` imparare a scrivere un o e codice meno errato possibile. Tutto ci` che si ha a disposizione. abbondando con le parentesi. tra le altre cose che fa. ma solo dichiarati: le definizioni vanno contenute negli omonimi . abbastanza gratuitamente. B) ((A)+(B)) Come mai questa grande abbondanza di parentesi? Il motivo ` abbastane za semplice: le parentesi evitano incomprensioni tra gli operatori: dal momento che gli operatori nel linguaggio C hanno una certa precedenza rispetto ad altri. in modo da poter richiamare il loro contenuto. utilizzando due fondamentali tipi di files sorgenti: i “.c” son ben noti dunque ` inutile parlarne. effettuate dal precompilatore: il precompilatore. enorme. Se ne fa un esempio: #DEFINE SUM(A. C ` preferibile ad Assembly: a meno e che non si debbano scrivere pochissime righe per implementazioni rapide.Il codice deve essere semplice. Ci si potrebbe a questo punto chiedere: come si scrive in maniera decente il codice? Beh. in modo da meglio permettere la comprensione.c . definire anche le macro: esse o o e sono sostanzialmente delle sostituzioni letterali a parti di codice. in questi header file. Assembly ha i problemi opposti: il codice non ` portabile e aggiorne abile. Ci` che si pu` fare `. poich` e si fa in modo da “disaccoppiare” le varie espressioni letterali dagli operatori. Esse vana no generalmente scritte in maiuscolo. ossia i cosiddetti “header files”. Si noti che negli header files non vanno definiti oggetti. per programmare sistemi embedded. 25 . Le macro o aumentano la leggibilit` del codice. o che devono soddisfare alcune operazioni altrimenti non realizzabili. quello che pu` capitare ` che le istruzioni nelle macro siano male o e interpretate. letteralmente. per quanto riguarda gli header files. I “. sostituisce ci` o che sta dopo il “#define” dovunque sia usato nel codice. e seguendo alcune regole tipografiche assolutamente non banali. rendendo insignificanti le precedenze. dunque per ogni upgrade andrebbe riscritto da 0.c” e i “. B) ((A)>(B) ? (A) : (B) ) Si propone a questo punto un esempio di header file. per` molto facile da o usare. anche lento. cercando di ordinare il codice. in modo da effettuare tutto ci` che sarebbe anche senza la macro. Per questo motivo. Altro esempio di macro potrebbe essere il seguente: #DEFINE MAX(A.h”.c . e in sostanza essi servono a contenere le dichiarazioni dei files omonimi . si evitano incomprensioni. c .h Il che permetter` di includere nel file tutte le funzioni definite in pippo. ci` o che si fa in pratica ` caricare l’eseguibile nella memoria RAM (molto grossa). e quindi eseguirlo. void f_2(char *b). Questo header file. Ci` che si fa in pratica ` utilizzare memorie ROM o e (pi´ lente in scrittura ma molto meno costose) non volatili per il codice. Date le piccole possibilit` dell’embedded a volte si cambia qualcosa. per poi aggiornare la ROM solo quando e se necessario. se gi` non esiste (IFNDEF) un certo header o a o PIPPO H.c a . in modo da introdurre i principali tipi di variabili: 26 .exe” nel caso di sistemi Windows-like.2 Storage class Quando da informatici si compila un file. ad esempio “. floag g_xx(void). lo si pu` definire. sar` a richiamabile mediante il seguente comando: #include pippo. di conseguenza bisogna e muoversi in modo diverso. associato a un certo pippo. u quindi memorizzare in RAM solo le variabili. pronto per essere eseguito. al suo interno saranno dichiarate tutte le varie define e funzioni interessanti. si produce un file eseguibile. In un calcolatore ordinario. u 5. altrimenti potrebbe non funzionare pi´ niente. Il contenuto di questo file ` e codice macchina. a Osserviamo a questo punto un piccolo spezzone di codice. dopo di che si potr` chiudere la IFNDEF mea diante una ENDIF.#IFNDEF PIPPO_H #DEFINE PIPPO_H void f_1(int a). Si noti che tra header file e c-file vi deve essere assoluta coerenza di tipi di funzioni e parametri passati. In un sistema embedded una cosa di questo tipo non ` e fattibile: la RAM in esso non ` assolutamente grossa. #ENDIF Come funziona ci`? Beh. /* Variabile locale */ static int b.c le variabili globali possono essere lette. } } Sono state qua analizzati tre tipi di variabili: • Variabili globali: sono in RAM fino alla fine per un programma (sempre. ma si hanno pi´ registri a disposizione. mediante un’apposita parola chiave: 27 . Le variabili globali occupano posizioni preferenziali in RAM. Variabili globali e statiche sono inizializzate a zero. dal momento che esse sono abbastanza antipatiche sotto il punto di vista dell’implementazione in hardware. le variabili locali no. In un altro file . derivante dalle differenze filosofie e hardware utilizzate nella storia: un tempo. nella quale vengono introdotte per ordine di dichiarazione. ossia avere processori in grado di eseguire operazioni estremamente complesse.. interno alla RAM stessa. pi´ semplice.. Vi ` un altro problema implementativo.. basate sull’idea del RISC. . si utiu lizzava l’idea CISC.. a costo di avere poco spazio per i registri. in modo da u u avere memoria veloce a disposizione pi´ rapidamente. dunque ottimizzare. queste no. nelle tecnologie pi´ nuove. nei processori pi´ vecchi. Ci` che si potrebbe fare tuttavia ` introdurre o e nei registri direttamente variabili locali. esse sono tra le prime cose che il compilatore cerca di semplificare o ridurre. quelle locali vengono messe in uno stack. si ha un insieme di operazioni u ridotto. /* Variabile globale */ void f(int x).main(){ int g. • Variabili locali “static”: diventano globali. ma con visibilit` limitata al a file .c in uso. • Variabili locali: la loro vita ` limitata alla durata di una funzione. /* Variabile locale static */ . mediante funzioni di PUSH implementate nel microprocessore. e dunque la memoria assegnata per esse viene rilasciata al termine della funzione. u Le variabili globali vengono introdotte nei registri. int a. per un embedded). /* Eseguita */ Venga eseguita esclusivamente l’ultima. data la seguente istruzione: . per il compilatore. mediante il comando &i. Quando dunque si dichiara una variabile come volatile... . proprio nei registri di sistema... anzich` la variabile. si ha la garanzia che essa non subisca alcun tipo di ottimizzazione.. Si pu` desiderare il contrario. Ci` si pu` fare utilizzando. /* Non eseguita */ i = 0xAA.. per ora non nominato: . ossia che una certa variabile non venga o messa nei registri. Ci` che in pratica si ottiene. ottimizzarla costringerebbe la perdita di informazione. Mediante “register” si impone il fatto che la variabile sia introdotta. . register int i.. volatile int i. Il tipo “volatile” identifica variabili che possono essere modificate da oggetti esterni. ` una variabile che non pu` essere ottimizzata dal compilatore C: e o dal momento che volatile ` un tipo di variabile che pu` essere molto spesso e o modificata. Una soluzione ulteriore. richiede l’introduzione di un altro tipo di variabile. Non dichiarando volatile. 28 .. i = 0x55... salvata. che pu` essere o molto utile per un altro motivo. parlando di sistemi del noso tro tipo.. dal momento che la prima risulterebbe essere.. potrebbe capitare che. inutile. int i. il suo o o e indirizzo.. . ` quello che permee tte questa astrazione. Si ha in sostanza uno schema a blocchi di questo tipo: Osserviamo passo-passo cosa capita: 1.3 Sistemi a microprocessore Molto spesso. ` introdurre una serie di sostituzioni o e testuali dettate da queste operazioni. Si ha un qualcosa del genere: a In pratica. si prende (mediante il compilatore) il file c preprocessato.c”. si eseguono tutte le direttive per il processore. ad esempio come: unsigned char *ptr = 0x1000. dunque ` possibile recuperare il set di istruzioni assembly (e/o C) e per utilizzarle. Leggendo il manuale e osservando gli esempi si pu` capire come effettuare queste o operazioni 5.5. ` usare librerie che contengano l’assoa e ciazione tra gli indirizzi di memoria (fittizi. ossia le #DEFINE. come se fossero celle di memoria. nel caso o del convertitore A/D. Quello che si fa.1 Compilazione A questo punto ci si pu` chiedere cosa capita al momento della compilazione. le #INCLUDE. Per poter usare le varie porte/periferiche. in un sistema a microprocessore. e dichiarare puntatori. l’HAL. 29 . potrebbe essere la lettura della corrente/tensione dal trimmer. di fatto. Ci` che accade a questo livello. traducendolo in istruzioni elementari assembly. le #IFNDEF. ad esempio. 2. ci` che si fa. Mediante il pre-processing. ossia Hardware Abstraction Level. Bisogna creare un livello di astrazione hardware in modo da aumentare la portabilit` del software. come gi` accennato. pu` essere o necessario usare l’algebra dei puntatori. o nell’ambito dei sistemi elettronici che si stanno trattando. in pratica. e le varie parenti. dunque. mediante un certo livello di ottimizzazione. 3. le periferiche sono “memory mapped”: esse sono visualizzate e accessibili. Si parte dal progetto del file “. poich` vi son collegate periferiche) e in modo da trattarli mediante acronimi semplici. Una volta effettuate le sostituzioni letterali.3. per trasformarla in un segnale luminoso mediante i LED. Una volta ottenuto un file “.o”. Dati i diversi file “. 30 . ossia file oggetto.s”. il compito del linker sar` quello di produrre un eseguibile finale. ossia assembly. ` come se fossero costituiti e da un certo insieme di blocchi. viene introdotto il link tra le operazioni assembly e il codice macchina.o”. l’eseguibile sar` dunque pronto a per essere eseguito dall’hardware. Da qui si avr` un certo numero di file “. scollegati. a 5. con dei “ganci” sul vuoto. dettante le operazioni esatte che il processore deve effettuare per eseguire il programma. dal processore.4. mediante a l’unione tra loro di tutti questi “ganci”. dal momento che bisogna essere in grado di fronteggiare anche altri tipi di problemi.Capitolo 6 Lezione 05 In questa lezione ci si occupa sostanzialmente di due argomenti. ossia quando il cadenzamento non ` ancora ben e definito. al fine di salvare dati e per l’analisi “postmortem”. potrebbe essere utilissimo sotto questo punto di vista). in un processore il POR (Power a On Reset) ` fondamentale. riguardo aspetti interni del microprocessore: i meccanismi di “reset” e di “interrupt”. su quello utilizzato in a laboratorio. nel sistema. 6. Il reset. in modo a da riportare “manualmente” la macchina in uno stato predefinito dal progettista del sistema. Come gi` detto. il reset potrebbe essere utile. In totale tuttavia non sono solo presenti sistemi di reset di questo tipo. alcuni tipi di reset interni al sistema introdotti nell’HC12 sono ad esempio i seguenti: • XTAL Reset (atto a resettare in caso di problemi nella temporizzazione del sistema: se il quarzo per qualche motivo subisse danni o smettesse di funzionare. • Low Voltage Reset (atto a resettare in caso di brown-out o black-out del sistema: se per qualche motivo la tensione va sotto la soglia. dal e momento che un cattivo cadenzamento del circuito provocherebbe l’ingresso in stati indesiderati. dunque i “timer”. facendo nascere problemi nell’elaborazione). ossia l’HC12. come processore. 31 . al fine di poter evitare che la macchina inizi a e lavorare “in transitorio”. Si introduce inoltre la possibilit` di avere un reset esterno. con la memoria flash EEPROM. ` necessario interrompere l’elaborazione del sistema. come in una scatola nera di un aereo.1 Reset e Interrupt Ci si concentrer` sostanzialmente. dunque non si o “d` da mangiare” al cane. Le altre modalit` di reset di default non sono abilitate dunque. 6. La gestione “a banchi” della flash (da 4000 a 8000. ossia “cane da guardia”: si ha sostanzialmente un’idea di questo tipo: Si ha TC. la flash non viene mai utilizzata per dati volatili.• COP : Correct Operating Properly: si ha una sorta di contatore che. Questo ultimo esempio ` molto simile a ci` che viene comunemente chiame o ato “watchdog”. dopo dati). dunque significa che in qualche modo il sistema ` in uno stato di malfunzionae mento. se arriva a “0”. utilizzata per la memorizzazione delle variabili da gestire. e fa partire un segnale a di reset in modo da bloccare tutto e cercare di stabilizzare. ci` che deve capitare o ` qualcosa del genere: e Se gli impulsi non partono. ossia la “soglia di riferimento” per quanto riguarda lo 0. il LOAD non pu` avvenire. si pu` anche evitare di preoccuparsi: comandano il reset esterno e il o POR. nel quale si introduce il codice da eseguire. se si a intende usarle nel proprio sistema. ` necessario abilitarle mediante le funzioni e C esplicate nel manuale del processore. e poi via per diversi blocchi) ` scelta in quanto si vuole e disaccoppiare il codice dai dati salvati (fino a 8000 ` codice. il condensatore non si ricarica. Il problema ` e se neanche il watchdog funziona: a questo punto solo un buon reset esterno pu` mettere a posto tutto o quantomeno far uscire la macchina dallo stato. che dopo un po’ si arrabbia. Questo circuito si basa sostanzialmente sulla seguente idea: Si dimensiona la resistenza R in modo che se il condensatore non viene ricaricato entro un certo tempo scatta un allarme.2 Organizzazione della memoria / Interrupt La memoria nel processore che si intende utilizzare ha un’organizzazione di questo tipo: All’inizio. In e 32 . in quanto molto lenta. dettati ad esempio dall’oscillatore. nel caso in cui il sistema funzioni correttamente. fa partire il reset. in modo da non farlo arrivare a e “0”. da 0x0000 a 0x0400 si han indirizzi assegnati per le periferiche. Il registro ` quello che “carica” il contatore. ossia la memoria volatile del sistema. se ci sono dei problemi. da 2000 a 4000 si ha a a che fare con la RAM. In termini di programmazione del circuito: se non si intende usare alcuna feature. e si deve introdurre il reset. o “uccidendo” il suo lavoro. gestite mediante la modalit` “memory mapped”. Da 4000 a 8000 si ha un banco di flash. dal momento che le Flash sono memorie non volatili (per quanto purtroppo meno potenti). quindi ri-caricare lo stato dallo stack e proseguire l’esecuzione. non salvando nulla nello stack. ma viene eseguita in base alla sua priorit`. l’ultima zona di indirizzi riguarda la interrupt vector a table. Negli ultimi due byte c’` anche l’indirizzo a cui andare quando si e riceve un segnale di reset (0xFFFE . in coda. assolutamente senza o o e scrivere. effettuare l’operazione richiesta da chi ha richiesto l’interrupt. si ha la interrupt table. a • XIRQ : Interrupt Request Non Mascherabile : ha la priorit` su qualsiasi a altra operazione. detto “boot e loader”. si carica un’istruzione che non si conosce. Dopo diversi banchi di dato o flash.questo modo si pu` estendere l’indirizzamento. la reset vector table e anche il boot loader: questa zona ` off-limits. Come gi` accennato. quale ad esempio la divisione per 0. • Ambiente chiuso: si blocca l’esecuzione della macchina. • SWY : Routine software di interrupt. che permette di far riavviare la macchina anche dopo lo spegnimento dal codice introdotto dal progettista. si ha a che fare sostanzialmente con due tipi di ambienti: • Ambiente aperto: si va ad una routine che ` ritornata dopo l’operazione e di interrupt. 33 . Tra reset e interrupt vector table ci sono le cosiddette “TRAP”: quando si richiede di effettuare operazioni inesistenti. ossia il link da cui si riparte quando si resetta la macchina).o” vanno tutti nella flash. Parlando di reset e interrupt. in modo da non impallare tutto. illegali. Esistono diversi tipi di interrupt: • IRQ : Interrupt Request Mascherabile : questa non fa accantonare l’operazione sul momento eseguita. dal momento che non si intende proseguire con le operazioni da fare. Altro indirizzo notevole ` il 0xFFFC: ossia il vettore a e cui si salta nel caso in cui l’oscillatore (XTAL) smetta di funzionare. il reset “blocca” violentemente l’esecuzione. In una ROM vi ` un programma. che fa bloccare. eseguita mediante una chiamata al sistema operativo. Da qua si pu` notare quale sia la differenza tra interrupt e reset: una proo cedura di interrupt permette di salvare lo stato della macchina nello stack. nel e senso che si pu` solo utilizzare ci` che vi ` contenuto. I “. e anche se questi controlli faranno sprecare tempo. l’interrupt non o e a funzioni mai. Si pu` comparare l’uscita con uno “0”. o nel caso si carichino in diversi colpi. Se invece uso il RTI. devo controllare molto spesso che ci sia. a Ci` che si usa a tal fine ` un “prescaler”: si tratta di un divisore di frequenza o e per divisore M . mediante un meccanismo di questo tipo. si introduce l’OR. ottenendo un generatore di onda quadra. o Un altro problema `: non ` possibile utilizzare direttamente il clock come e e contatore. ma solo un’abilitazione all’inizio dell’interrupt) e fa saltare al processo indirizzato nel RTI. Quello che pu` succedere ` che. 6. La partenza ` legata dunque al e fatto che alcuni bit vengano modificati. quando si voglia. tuttavia. quello che si pu` fare ` usare un RTK (Real Time Kernel): il o e main non esiste pi´. mentre faccio altre cose. dal momento che ci si aspetta di avere frequenze molto elevate. in modo da mantenere stabile l’impulso in uscita dal contatore. Questi due bit possono mascherare o meno il segnale di interrupt. Volendo e un registro ripetitivo. dunque conti molto veloci e la conseguente necessit` di registri molto grossi. a causa della priorit`. i primi contatori utilizzati erano dei “down counters”. Esistono diverse modalit` pi´ “moderne” e che possono portare ad altre a u idee per quanto riguarda la realizzazione di timers o la loro applicazione.3 Timer Storicamente. se ` poco probabile. nella fattispecie. ` il RTI (Real Time u e Interrupt) : data una main() che chiama una procedura all’infinito. quello sta nel loop e ogni tanto viene chiamato. a causa di differenze tra i parallelismi. dal momento che solo gli interrupt vengono man mano u eseguiti e le loro procedure autochiamate. quindi si blocca l’esecuzione del main() a (nella quale non dovran esserci controlli.Per le prime due si ha qualcosa di questo genere: Si han due bit di controllo atti ad abilitare o meno l’interrupt nel registro di controllo. u 34 . una volta introdotti i bit. L’interrupt pi´ interessante e importante. verranno ora esposte le idee fondamentali dietro i contatori pi´ moderni. Potrebbe essere d’altra parte necessario mantenere un’uscita stabile. si deve partire a contare. ho un timer che ogni tot d` un interrupt. ci` che si deve fare. Uno schema poteva essere per esempio il seguente: I registri contengono i numeri da cui si deve partire a contare. in modo da poter ripartire da capo al momento desiderato. ossia contatori alla rovescia. se si ha un evento raro. ` controllare sul manuale quale parte del registro caricare all’inizio. ci` si pu` fare introducendo un flip flop prima del pad di o o uscita. e si attiva una flag indicante il fatto che un’ora ` stata registrata. ` possibile e generare un evento. si registra l’ora (timestamp) del medesimo. una volta che il contatore raggiunge una certa cifra calcolata internamente si invia un segnale all’esterno del timer in modo da riattivare il sistema intero.• Input capture : si tratta di una sorta di “fotografia” dell’ora (interna alla macchina) in cui avviene un certo evento esterno al sistema. un segnale in uscita all’ora desiderata. Dato questo evento. • Output compare : una volta memorizzata una certa ora. basandosi sulla base tempi interna al sistema. e contato mediante un contatore un certo tempo a partire da essa. Basandosi su di e questi timestamp sar` possibile effettuare altre operazioni temporizzate a in un certo modo. Basandosi sempre sui contatori. in modo da assicurarsi sull’informazione. in modo da garantire una certa frequenza. si freeza il counter in un registro. o creare un frequenzimetro. ` possibile effettuare cose interessanti. Per evitare di leggere cose sbagliate. si “campiona” l’ora in cui si spegne. Volendo ad esempio svegliare il computer dopo una certa ora. e quali contare impulsi (clockando il contatore mediante un qualche generatore di impulsi). clockando mediante una AND di un certo “tick” e di un treno di impulsi. 35 . e si avvia un contatore in grado di arrivare ad una certa cifra. rispetto a ci` a cui o si ` abituati: la macchina su cui si lavora ` diversa da quella in cui si compila e e l’applicativo. diverse runtime. poich` l’assembly ` l’implementazione e e e ultima del C. passare a un linguaggio di alto livello non ` assolutamente facile. 7. in memoria. Pase sare da assembly a C non ` assolutamente facile. richiama in s` diverse librerie.Capitolo 7 Lezione 06 In questa lezione ci si occuper` nuovamente degli aspetti software della a progettazione elettronica.1 Cross compilation In un sistema embedded si ha un qualcosa di particolare. La scorsa volta si ` parlato di linguaggio di programmazione C. tornare al C significa semplicemente costruire un programma in grado di fare le stesse cose. e questo prezzo ` il costo. semplicemente associando e ai codici delle istruzioni un’istruzione assembly. Sarebbe molto meglio (ipotizzando che il processore usi di queste funzioni) usare una putf(). in e termini di spazio. dal momento che bisogna e “decompilare” (o “reversare”) il codice. a ri-ottenere lo stesso assembly. istruzione apparentemente banale. in questo ambito. ma ci` si pu` o o fare in molti modi. Si ricordi: “la generalizzazione ha un prezzo”. che semplicemente stampa stringhe. Si parla. ossia “troppo portabile”: una printf(). cosa assurda per degli embedded. anche se spesso (sempre quasi) questa opere azione ` effettuata mediante strumenti automatici (detti compilatori). una e funzione di questo genere da sola occuperebbe 500 k di roba. Passare e da C ad assembly ` molto facile. Un altro aspetto che pu` essere critico in sistemi embedded ` avere un o e codice molto “generale”. Ci` che si pu` fare. di “cross compilation”: 36 . dato un programo o ma. ` ricavare le istruzioni assembly che effettua. elaborati. • Debug hardware: il BDM permette di fare il “watch” di una variabile. Questo tipo di debug ` detto “non-intrusivo”. e permette la visualizzazione. ma senza BDM non si potrebbe scoprire. Ci` che si fa e e o 37 . mentre nel calcolatore il software che si usa per la compilazione contiene un sotto-software in grado di interpretare i dati elaborati dalla macchina per gestire il debug. Nei processori Motorola / Freescale esiste qualcosa di pi´ interessante. ossia il u BDM (Background Debug Module): si tratta di un blocco hardware che si interfaccia alla memoria come il processore. All’interno del targer. che eseguir` il codice. dunque non ` mai possibile “trovare il tempo per accedervi” in e maniera consona. dal momento che se ci sono dei blocchi del processore in istanti non richiesti. Solo in questo caso si blocca l’esecuzione per far parlare il vero processore. osservando il BUS indirizzi. A questo punto si ha un problema: su di un sistema embedded pu` capo itare di non avere un loader. il BDM blocca il processore. modificando la memoria codice (ottenendo dunque qualcosa di intrusivo). e solo a scopi di debug. Questo tipo di debug sfrutta dunque il raccoglimento dal processore di dati. esiste un software per la comunicazione. dal momento che l’ape plicazione non viene interrotta.La compilazione avviene sul computer. significa che c’` qualcosa che non e funziona. e il microprocessore principale continua a lavorare. che e si interfaccia alla memoria come un processore normale. dunque mediante USB si programma il dispositivo. ossia del circuito programmabile. cosa che costa in termini di calcoli e operazioni da far eseguire al processore. a questo punto si legge quel che si vuole. ossia proporre diverse o u tecniche di debug. si manda un interrupt software. a La domanda interessante a questo punto `: dove e come si debugga? A e domande di questo tipo si pu` rispondere in pi´ modi. in modo assolutamente intrusivo: comunicare dati comporta fare operazioni. Ci` ` interessante oe anche al fine di rilevare bachi. che modifica una certa variabile. al posto di una certa istruzione. Unico limite ` che non si pu` leggere dai registri: essi variano trope o po in fretta. dal momento che la RAM ` volatile. effettuando il debug indipendentemente dal processore e senza togliere tempo all’esecuzione. aspettando che il BUS sia libero e leggendo. Esistono sostanzialmente due modi per fare debug: • Debug software: nella memoria codice. Quando sul bus si mette l’indirizzo dell’istruzione interessante. L’unico punto in cui si pu` mettere un programo ma ` la memoria Flash. Il BDM ` un altro sottoprocessore. indipendentemente da esso. Esso contiene informazioni sulle dimensioni delle RAM/ROM. Esiste una funzione assembler. senza avere possibilit` di e a scelta. che permette di copiare tutti i bytes interessanti dalla flash a dove si vuole. non \‘e parte del codice */ /* Inizio codice /* memory { page(0) (vwx) : origin = 0x0000 lenght = 0x0040 text(vx) : origin = 0x7000 lenght = 0x4000 /* ROM da 16 kB */ data : origin = 0x2800 lenght = 0x4000 /* RAM */ Mediante files di questo tipo ` possibile mappare il codice e i dati dove si e vuole.x /* Nome del file. 38 . Potrebbe essere importante comunicare le dimensioni al linker. Ci` che si deve fare come prima cosa ` inizializzare lo stack. Lavorare sulla Flash ` impossibile. chiamata “map data section”. e Nella memoria ROM Flash si ha un salvataggio delle variabili da inizializzare. Poi conviene abilitare gli interrupt. e dello stack da inizializzare. specificando le caratteristiche e le dimensioni della memoria. a patto di ordinare immediatamente il ripristino dello stato del sistema. ma salvare i dati una sola volta e per poter ripartire da l` a sistema riattivato dopo spegnimento ` assolutaı e mente possibile e anche molto furbo. dunque o e la cosa migliore ` mettere lo stack all’inizio della RAM. di questo tipo: memory. variabili che vengono mandate in RAM.` far eseguire il programma dal primo byte in poi. mediante n file di testo creato a priori. L’idea da sfruttare 39 . TON . attribuendo importanza soprattutto a questo secondo aspetto: Quello che si fa in pratica ´ quello che potremmo chiamare “dimmer”: un e regolatore elettronico in grado di attenuare a proprio piacimento il segnale di pilotaggio di un motore (in egual maniera. a dei LED). come gi´ detto. unico svantaggio di questi motori ´ che spesso e bisogna gestire l’elettronica di potenza atta a pilotarli. • Hanno una coppia pi´ elevata a parit´ di caratteristiche rispetto ai u a motori tradizionali (sono dunque pi´ efficienti). uno dei o a motivi per cui esso pu´ essere importante.Capitolo 8 Lezione 07 Molto importante pu´ essere. si analizzeranno le idee o atte a generare un segnale PWM utilizzando i canali “timer” del HCS12. l’idea fondamentale sar´ quella di avere qualcosa di simile a tre sinua ◦ soidi sfasate tra loro di 120 . dunque si potrebbero avere complicazioni legate a ci´. Uno dei o e vari utilizzi che si pu´ fare di un timer ´ la generazione della modulazione a o e larghezza di impulso (PWM : Pulse Width Modulation). fondamentale per pilotare dispositivi di vario genere. dal momento che: • Sono molto piccoli. rispetto ai motori elettrici tradizionali. Ci interessa definire il periodo dell’impulso Tp e il tempo in cui sta alto il segnale. attivare l’interrupt. u • Raggiungono velocit´ superiori. Trattandosi di motori trifase. I motori brushless sono molto interessanti per l’elettronica moderna. Nel nostro caso. ´ la gestione del timer. a Mediante un microprocessore ´ dunque possibile generare un segnale mode ulato in PWM atto a pilotare motori di questo genere. L’obiettivo che ci si pone in questa lezione ´ vedere come si pu´ pilotare e o un motore elettrico. brushless (la cui velocit´ varia a seconda della frequenza a del segnale di pilotaggio). 55 MHz Sar´ dunque necessario usare un prescaler. e uno per TON .per un dimmer ´ la seguente: se si definisce un periodo Tp complessivo breve e abbastanza da avere una frequenza molto superiore rispetto al polo meccanico del motore (o se si vuole. Servono per definire questo tipo di regolatore due registri: uno per avere informazioni su Tp . si avr´ come massimo timer possibile (a partire ovviamente dal a PWM per fare il timing): fM AX. al “polo dell’occhio”). il fatto di non poter percepire le variazioni ´ a nostro favore. 2. elemento circuitale che nasconde una triste caratteristica: il fatto che far variare la corrente troppo rapidamente comporta enormi variazioni di tensione. Si usa uno schema di questo genere: A partire dalle specifiche che si intende soddisfare. 55 MHz 40 . ossia per il periodo di accensione. dal momento che in questo e modo si permette di considerare non tutte le variazioni. nel caso di LED. si manda un segnale di interrupt. si ricava il valore di divisione per N per il prescaler.timer = 100 × 216 = 6. dunque come si programma ai fini di utilizzarlo. 4427 6. Abilitazione dell’interrupt e dei piedini utili. dunque si specificano gli estremi di variazione per il duty cycle.timer = 16 MHz = 2. atto a ridurre la frequenza alla a massima consentita per il timer. ai fini di non “bruciare tutto”. Sull’HCS12 (sui relativi manuali e sulle application note) si legge come funziona il timer. Attribuzione di un significato ai piedini che si vogliono usare. Calcolare il tempo di interruzione e abilitare un interrupt. ossia sul periodo globale. Nprescaler = fCLK fM AX. I passi da seguire sono fondamentalmente i seguenti: 1. A questo punto ´ necessario avere alcune informazioni: la frequenza di e PWM e il duty cycle. ottenendo una sorta di media integrale reale (l’idea alla base del televisore). Si immagini che: fP W M = 100 Hz. fCLK = 16 MHz Supponendo di aver a disposizione un contatore da 16 bit per effettuare il timing. Si noti che sull’accensione e sullo spegnimento di un motore si possono avere problemi: il motore ´ sostanzialmente modellizzabile e mediante un’induttanza. Ogni volta che si arriva all’output compare. in modo da poter usare il clock. Bisogna stare attenti a queste. ma solo la “media”. dal momento che essi sono a tensioni elevate. si utilizzano sei canali di questo tipo: Maggiori informazioni si possono trovare sul manuale del microprocessore. Rs . dunque i due transistori dello stesso lato non devono mai essere gestiti assieme. mediante un comparatore di soglia. un esempio su titti potrebbe essere il ponte H: o Ci sono diversi modi per realizzarlo. o Altra cosa da evitare ´ il fatto che vi sia un “overlap” sui segnali di pie lotaggio A e B: introducendo un margine temporale minimo che garantisca che i due segnali non assumano mai lo stesso valore. la questione non ´ cos´ facile: sar´ necessario utilizzare dei traslae ı a tori di livello. scaricando cos´ l’energia su di essi. un motore elettrico ´ sostanzialmente assimilabile a un a e sistema trifase di tipo induttivo. dunque a qualcosa di questo tipo: Per ogni induttore. e i primi due come interruttori high-side e gli ultimi due come interruttori low-side. in modo da rovinare il ponte e il motore. si possono accendere solo i transistori alti o solo quelli bassi. si riesce a ottenere buoni risultati. Si noti che si punta a far scorrere la corrente da un lato a un altro.1 PWM con Fault Protection Come gi´ detto. in modo da poterli gestire. Altro posto su cui si pu´ usare il comparatore di o 41 . a seconda che si fosse a 1 o a 0 nel colpo precedente. o Introducendo un diodo si pu´ bloccare la tensione. Buona cosa ´ introdurre protezioni: dal momento che si ha a che fare e con induttori. ı Alcune migliorie effettuabili sul sistema sono ad esempio una resistenza di sense. ma in microprocessori un po’ sofisticati si usano hardware dedicati per gestire il PWM. in caso di emergenza. Volendo fermare il motore. 8. Fino a qua si usa il timer per fare il PWM. I low-side sono facili da pilotare: dal momento che essi sono tra polarizzazione e massa. la loro gestione ´ banale.Fatto ci´. per questioni di sicurezza. atta a vedere quanta tensione/corrente vi sia su. Un punto interessante ´ come far partire o fermare questa procedura: il e motore pu´ essere comandato in modo da “partire piano” o “fermarsi piano” o ad esempio. Si accendono i transistori per far scorrere corrente e invertire il campo generato. Un modo un po’ costoso ma di sicuro efficiente ´ quello di utilizzare quattro transistori nMOS a effetto di campo. hardware di questo tipo: si ha un contatore dedicato con prescaler e registri in cui si introducono TON e TOF F desiderati. Per quanto riguarda gli e high-side. usando variazioni brusche si pu´ far salire troppo la tensione. quando si arriva a fine conteggio si introduce TON o TOF F dopo o un interrupt. si pu´ effettuare il pilotaggio mediante un circuito o atto a far ci´. soglia. in modo da permettere al ricevitore di rilevare l’evento di inizio. e un tempo in cui si resta a zero. a 3. ´ sufficiente avere uno shift e register con qualche controllo. la cui frequenza sia intorno alle 16 volte maggiore e rispetto al clock del trasmettitore. campionando tre o quattro volte per vedere che lo start “permane” e non ´ solo un impulso di linea. per la trasmissione. quando e u si deve campionare al fine di avere un’informazione corretta. Lo standard permette l’opzione di un bit di parit´. si deve inviare il dato (frame). terminando verso l’MSB. e costa due tempi di segnalazione in pi´. Come livello “basso” si considerano -12 V. Questo ponte ´ realizzabile u e e sia con FET sia con BJT. di fatto. Oltre a mandare simboli di n bit. sono i seguenti parametri: 1. il che significa avere la possibilit´ di trasmettere a una tra 256 informazioni. 8. in modo da dare e rispettare riferimenti temporali. Avendo a disposizione in sostanza un segnale binario. come livello “alto” +12 V. Ora si usano. Da definire. ´ iniziare a clockare sull’ingresso di start. La ricezione ´ pi´ complcata da trattare: non si sa. Ci´ che si fa. Un primo problema per la comunicazione ´ l’avvio: quando si inizia a e trasmettere si utilizzano i bit di start. o o La trasmissione appena descritta viene detta “trasmissione asincrona”. Si trasmette partendo dal LSB. in modo da avere la certezza di acquisire correttamente lo start. dal momento che non si ha una base dei tempi in comune tra trasmettitore e ricevitore. si pu´ iniziare a parlare di trasmissione. verificando tuttavia o e che esso non sia un disturbo. ´ ai capi dell’induttanza. 8 bit. a e di un segnale di stop. Ci´ che serve e o dunque ´ un orologio locale. si devono avere due valori di riferimento per il segnale. sapendo a questo punto a quanto si trasmette. 2. Numero di stop. si 42 . Lunghezza di simbolo (appena discussa). Definito tutto ci´. in questo secondo caso si faccia attenzione. u Al fine di realizzare il sistema di trasmissione. dal momento che i BJT soffrono maggiormente per la thermal runaway. Tipo di parit´.2 Comunicazione Seriale Una delle comunicazioni pi´ utilizzate in assoluto ´ la cosiddetta “comuniu e cazione seriale”. Si hanno dunque i tempi di segnalazione (di simbolo). anche pi´ utile. ´ il cosiddetto “baud rate generator”: e Si ha un prescalamento per un N sconosciuto. Come e detto. dopo un po’ si avrebbe uno sfasamento. Ci´ a o che si realizza in pratica. Un altro tipo di metodo ´ il RZI. dal momento che gli oscillatori hanno una precisione finita. Questo protocollo a e e volte ´ utilizzato anche nei sistemi wireless. Si passa a questo o a punto il PL e il En del contatore che fa da orologio. Utilizzando tre canali separati per la trasmissione del segnale.sovracampiona e rileva. In generale. • RZ (Return to Zero) : dualmente a prima. Una volta fatto ci´ si pu´ o o trovare la potenza. in modo sincrono o quasi rispetto allo start. tale da far rimanere tutto sincronizzato. Se il simbolo (8 bit) fosse lungo. ossia frequenza di baud. fasarsi. e non si fa niente quando si ´ a “1”. Lo standard volendo prevede anche la possibilit´ di trasmettere una quana tit´ infinita di simboli. 43 . Per comunicare esistono in sostanza le seguenti modalit´: a • Full-duplex: si utilizzano sostanzialmente tre fili: un riferimento comune. ´ possibile inviare e ricevere e contemporaneamente segnale. a proponendo dunque una trasmissione seriale sincrona. sono le USART (Universal Synchronous Asynchronous Receiver Transmitter). • Interrupt: una modalit´ ´ quella di effettuare una richiesta di interrupt ae ogni qual volta si intenda trasmettere qualcosa. si ritorna a zero. in grado di implementare questo standard. bloccando le operazioni e trasmettendo. e serve e un prescaler in grado di fornire la frequenza alla velocit´ del baudrate. e Un problema ´ che spesso si ha un XCO (oscillatore a cristallo). per cui chi parla deve anche trasmettere il clock. in grado di comunicare con l’IRDA : il ritorno a zero invertito. lo start. le periferiche utilizzate per la realizzazione di porte di questo tipo. come detto. dunque contando fino a 8 di 16 (dove 16 il multiplo della frequenza del segnale) ci si pu´ trovare bene a met´. rimane mai a 0. Esistono alcune tecniche per la trasmissione: • NRZ (Not Return to Zero) : non si ritorna. ci´ ´ perfetto per comunicare con le infrarosse: si d´ l’impulso al LED oe a quando si ´ a zero. in modo da ottenere una fB . Si noti che una volta fasato tutto non si rimane sincroni per sempre. spesso. • Half-duplex: si risparmia un filo (poich´ si ha sempre filo di trasmissione e e filo di riferimento) ma solo uno per volta pu´ trasmettere: si trasmette o e riceve in tempi diversi. un filo per l’invio e uno per la ricezione. 4 Inter Integrated Circuit (I2C) Uno standard per le comunicazioni (della Philips ma molto utilizzato) ´ il e cosiddetto I2C. dunque si vuole trasmettere scrivendo nel trasmettitore solo quando il buffer ´ vuoto. 8. bens´ attraverso due fili: un segnale di riferimento (temporizı zazione. dunque la comunicazione si avvier´. introducendo un master e degli slave. Il controllore di tutto ci´ ´ la oe periferica I2C. Sostanzialmente sono possibili quattro simboli. Se ci´ funziona si pu´ trasmettere o o sul serio all’esterno. “start”. ossia di seriale come mezzo di comunicazione per periferiche. vedendo che tutto effettivamente funzioni. Il baud rate a a generator produrr´ gli 8 impulsi.Esistono alcune casistiche importanti da cosiderare: trasmettitore vuoto e ricevitore pieno. non e solo per un pezzo. clock sostanzialmente fornito dal master del sistema. In pratica “ci si ascolta da soli”. 44 . Si ha un segnale di start e un segnale di stop. fermandosi. “stop”. ossia nello shift register. Si fa qualcosa del genere: e La S viene introdotta subito dopo che A va nel trasmettitore. a a 8. La cosa importante per i dispositivi ´ quella di essere e interpellati dopo che l’intero dato ´ stato completamente assemblato.3 SPI Quando si parla di SPI. e un segnale half-duplex. “1”. altrimenti si ferma tutto. un clock). in modo che tutta la A trasmessa nello shift register esca. dal momento che il REGTX in questo modo risulta essere libero. Una pratica frequente per testare la comunicazione seriale ´ quella di e partire con un loop back: trasmettendo e mettendo il sistema in loopback il ricevitore riceve quello che si manda fuori. tutto verr´ pilotato dallo a stesso clock. ci´ che si deve sostanzialmente fare ´ attribuire priorit´ alle varie o e a periferiche. Esso ´ utilizzato come standard per la comunicazione tra e circuiti integrati. ossia “0”. dopo di che si modula il dato in RZ. Il master sar´ quello che avr´ il diritto di scrivere nello shift. L’idea ´ quella di far parlare il master con memorie non e in parallelo. bit per bit. Bisogna quindi aspettare per un po’. ma solo latch. in modo da non dover usare flip flop. Se poi dall’altra parte si riceve il segnale che dice che si ´ pronti. quindi ci si mette in ascolto. Quando lo strobe ´ attivo. gli indirizzi. Quando si manda via il pacchetto si d´ a lo start. e viceversa. si continua con la trasmissione e dell’informazione. 45 . Se il dato va a zero mentre il clock ´ e e fermo si ha lo start.8.5 EIA RS Standard Un ultimo standard che si intende citare ´ questo: il clock ´ pi´ breve del e e u dato. il dato deve stare fermo. Le porte hanno tre alimentatori in sostanza: Vmicro (tensioni per l’alimentazione di circuiti logici. circuiti normalmente in o vendita sui cataloghi. Interfacce quali ethernet o USB permettono prestazioni molto maggiori rispetto alla seriale per quanto riguarda le comunicazioni. I segnali in uscita da 57 e 58 sono in uscita da delle porte CMOS. per poter avere ±VRS .3 V. Per aggiornamenti di un certo prodotto. allora continuer´ probabilmente a funzionare bene anche senza aga giungere velocit´ di trasmissione per le comunicazioni.. con una nuova interfaccia. Ci´ che bisogna fare a o in pratica ´ capire a priori (prima del progetto) quali siano i requisiti del sise tema. da 59 a 60 si ha il canale 1.. dunque. servono componenti elettronici in grado di fornirle. Questi possono essere messi nel connettore a vaschetta. cambiare tutto potrebbe essere molto complicato. Al momento di fare un nuovo progetto. per la trasmissione dati. sar´ necessario progettare a dei traslatori di livello.Capitolo 9 Lezione 08 Quasi tutte le interfacce utilizzate per sistemi di tipo embedded si basano sulla RS232. 46 . con dei moduli poco costosi (dai 10 ai 15 euro) in grado di interfacciare standard pi´ moderni (quali ethernet o u USB) alla seriale. 3. ossia su di un’interfaccia di tipo seriale. dal momento che se il sistema funzionava bene o e prima. per questo motivo si punta ad utilizzare sempre la seriale. dunque utilizzare un protocollo fatto apposta: deve essere l’applicazione a dettare i vincoli sulla velocit´ dello standard da utilizzare. le porte 57 e 58. le specifiche. come quella che ´ stata e finora descritta. Al fine di trasmettere correttamente. dunque le classiche 5 V. a Per comunicare si ha uno schema di questo tipo: Si hanno. dunque saranno presenti tensioni definite tra -3 V e +3 V. 3 V. utilizzare la seriale potrebbe essere l’idea migliore.). da -15 V a + 15 V. Per fare ci´ si usano componenti quali l’MC1488 o l’MC1489. spesso tuttavia tutto ci´ non ´ necessario. tuttavia. dal momento che la pompa impiega molto tempo per generare la tensione e portare la carica. Nelle flash. nei processori. Idea pratica per trasmettere Un’idea per procedere potrebbe essere questa: si pu´ misurare la velocit´ di o a un impulso e quella sar´ la velocit´ standard del sistema (sistema di autoa a baud. si pu´ usare un qualcosa di questo genere: o La topoogia generale ´ quella di un doppio-condensatori commutati: quane do il sistema va a regime. impostandosi su qualcosa di diverso. Le flash memories sono catalogate come ROM. ossia di sintonizzazione automatica su di una certa frequenza). e si mantengono in modo da recuperarle al cambio di ogni canale. Una volta scela to il baud rate (SCIBR). al fine di effettuare la programmazione servono tensioni molto grosse. e si trasmette in polling (SCISR1). o In totale. Un’idea per avere altre velocit´ potrebbe essere la seguente: a Si possono utilizzare transistori programmabili. Un esempio in cui si fa ci´. per porte parallele. la pompa di carica ´ fondamentale dal momento e che permette di tirare su le tensioni e permettere semplicemente la programmazione dei dispositivi. si configura la lunghezza della parola (SCICR1). mediante il solito circuito di clamp: Un optoisolamento pu´ essere sempre ottimale. ci´ ´ oe bello. Ci´ si pu´ implementare mediante le seguenti istruzioni o o assembly: 47 . ottenendo di fatto una pompa di carica. che fa da e “volano”: esso sostanzialmente serve per ricaricare molto rapidamente tutto il sistema.Il ricevitore ha bisogno solo di un’alimentazione. dunque si abilitano trasmissione Tx e ricezione Rx (SCICR2). ´ nei televisori o e moderni: si memorizzano nei transistori le informazioni sulla frequenza. al fine di fornire una corretta alimentazione ed evitare e problemi. si campiona il disturbo e la sua relativa velocit´. permettendo oltre a tensioni alte anche un’elevata rapidit´. l’interfaccia al micro ´ un qualcosa di questo genere: e Al fine di aumentare la tensione. I transistori vanno su di un DAC potenziometrico che fa da “potenziometro digitale”. Il a ICL7690 fa “questo di mestiere”. si “tosa” il segnale in ingresso. Nel caso ci fossero. Un’implementazione a MOSFET ´ la seguente: e Nello schema generale si ´ introdotto un secondo condensatore. in grado di ricordare le configurazioni. ma anche alcuni ms. in quanto il segnale che arriva ´ molto intenso. ad ogni switching si ha un raddoppiamento della tensione. se non ci sono disturbi. e si leggono velocemente ma programmano lentamente: per ogni bit scritto bisogna aspettare parecchi µs . output char. Per trasmettere bisogna capire se il trasmettitore ´ pronto. input DR. 2. e Idea pratica per ricevere Dualmente a quanto detto per la trasmissione. visto che e non si pu´ mettere di brutto ci´ che si vuole nello shift. il JZ torna al loop. Un’idea potrebbe essere la seguente: 1. mediante “output char”. Operazione di mascheratura: a seconda dei bit o si d´ “0” o un numero a che non ´ 0! Se si ha “0”. and mask. bisogna leggere o o lo stato del periferico (mediante “input status” e vedere se il buffer ´ e vuoto. Prendere in ingresso ci´ che c’´ nel data register. altrimenti significa che il e buffer ´ da svuotare. altrimenti tornare a leggere lo stato. Si noti una piccola variante: 48 . e 3.. e 2.. Leggere lo stato del periferico.Txchar: Loop : input status. and . jz loop.. Se c’´ qualcosa andare avanti. SCRDRL dice cosa c’´ nell’input. Vediamo a che serve: 1. o e Si avr´ qualcosa di questo tipo: a Rxchar: Loop : input SR. si pu´ proporre ora un’idea o pratica per la ricezione di caratteri.. jz loop. Si introducono a questo punto due condensatori. input DR.. dunque anche per la porta seriale. ceramico. e 9.. L’impedenza del sistema condensatore+filo ´ un a e qualcosa del tipo: L C Dove L ´ l’induttanza dei fili. pi´ vicino all’uscita. ret Si introduce un “ritorno con eco”: si “rimanda indietro” ci´ che ´ arrivato. .RxcharWithRet Loop : input SR. Il condensatore elettrolitico ´ una sorta di riserva per le “grosse” u e richieste. uno elettrolitico (grosso) e uno pi´ ridotto. Z= 49 . dunque non si possono avere picchi di corrente nel sistema. per le basse frequenze. o e in modo da dimostrare al trasmettitore che ´ arrivato correttamente. jz loop. call Txchar. semplicemente fornisce piccole cariche. mediante due condensatori e due induttori. C la capacit´ del condensatore.. Questo e a schema ha il pregio di limitare la inrush current: gli induttori limitano la variazione di corrente.1 Background per la porta seriale Lo schema di alimentazione del sistema elettronico complessivo. ´ un qualcosa di questo genere: e In sostanza si ha un primo circuito di filtraggio... nel cau so ci sia questa necessit´. dal momento che un semplice condensatore ceramico non sarebbe in grado di fornire molta carica se necessario. mentre il secondo condensatore.. si introduce dunque un diodo.. atto a proteggere il sistema da eventuali inversioni di alimentazione. . and .. quali un touchpad. dunque passando per un amplificatore operazionale per il disaccoppiamento e dunque per un ADC. 50 . e comportarsi in modo diverso a seconda del segnale che viene inviato per questo motivo. mediante il quale si ottiene un potenziometro digitale equivalente. in grado di evidenziare un valore di α e uno di β. o cose di moda di questo tipo. dunque il buffer ´ buona cosa per disaccoppiare le impedenze. Spesso questi ADC sono realizzati mediante condensatori commutati. o meglio di potenziometri equivalenti: a seconda di dove si posiziona il dito sullo schermo si ottiene sostanzialmente un doppio potenziometro (poich´ il dominio dello schermo ´ planare). I processori a questo punto possono valutare il valore della resistenza.Capitolo 10 Lezione 09 10. si seleziona un punto particolare. Ci´ che si pu´ pensare ´ che il sistema sia un qualcosa di questo genere: o o e Si pu´ riportare sostanzialmente tutto ad un insieme di resistenze equivo alenti. caratterizzato da due parametri e e α e β caratterizzanti il valore della resistenza ottenuta per una certa posizione del dito.1 Touchpad Ci´ che spesso si potrebbe dover fare ´ introdurre interfacce gradevoli per o e l’utenza. Si ha a che fare dunque con due potenziometri. e Il senso della cosa si riporta al concetto di R : dal momento che si schiaccia. un touchscreen. della R (costante in ogni punto). i cui valori di resistenza possono essere stimati mediante una misura di tensione.