Simulazione dei microcontrollori con Proteus

Utilizziamo il potente simulatore della labcenter electronics per testare e collaudare i propri progetti a microcontrollore.

Ne hanno fatto di strada i software di simulazione elettronica. Inizialmente essi riuscivano a simulare solamente i circuiti statici ed analogici. Col tempo furono introdotte le possibilità di simulazione nell’ambito del transitorio e del digitale. Oggi i moderni programmi riescono a fare ben altro. Sono in grado infatti di simulare non solo i normali circuiti digitali ed analogici, ma anche di eseguire il software presente all’interno dei microcontrollori, utilizzati quali componenti virtuali del circuito preso in esame. un’applicazione completa al computer, simulando  il circuito come se lo si avesse realmente tra le mani.

Microcontrollori e Microprocessori

Il Proteus prevede, nell’ambito delle proprie librerie, una grande varietà di microprocessori e microcontrollori. Tutti perfettamente “funzionanti” e in grado di eseguire la simulazione per la quale essi sono stati programmati. Sono previsti dispositivi prodotti dalla Motorola (ad es. Una possibilità che finalmente consente al progettista di evitare l’inutile utilizzo di basette di prova, millefori e saldature volanti. Tutto il lavoro si riduce infatti in il 68000 ed il 68010), alcuni micro prodotti dalla Intel, dalla Philips, dalla Atmel, dalla Parallax, dalla Maxim, Harris, dalla Zilog e dalla Microchip.

I Compilatori

Per poter simulare un circuito che preveda un microcontrollore, è necessario disporre di un compilatore di un qualsiasi linguaggio. Pertanto vanno senz’altro bene tutti i tools di sviluppo in Basic (come il Mikrobasic), il linguaggio C (come il MikroC, il CC5X),  il Pascal,  il Ladder (ad esempio Ldmicro) e addirittura l’Assembler. Requisito essenziale è infatti disporre del file eseguibile finale (con estensione HEX nel caso dei microcontrollori PIC) che è generato dal compilatore stesso. Gli esempi trattati sono creati utilizzando l’ambiente di sviluppo Mikrobasic, ma con opportune e semplici modifiche al codice, qualsiasi ambiente può andar senz’altro bene. Quello che serve realmente è, ripetiamo, il file eseguibile prodotto dal compilatore.

Prima  simulazione: lampeggio di un Led

Quando si scrive per la prima volta un programma, è consuetudine stampare a video la frase “Salve mondo”. Allo stesso modo, quando si progetta il primo circuito a microcontrollore, si inizia sempre con il semplice lampeggio di un diodo Led. Si utilizzerà allo scopo un microcontrollore Pic 16F84.

Schema  elettrico

Lo schema elettrico, da approntare con il Proteus, è composto semplicemente dal microcontrollore Pic 16F84, da una resistenza da 220 ohm e da un diodo Led rosso. Per il posizionamento  dei componenti occorre premere il pulsante P posto sulla sinistra della videata (vedi figura 1).

Figura 1: layout vuoto in attesa dello schema

Figura 1: layout vuoto in attesa dello schema

Si digiti pertanto nella casella “keywords” la stringa “16f84”. Il  relativo microcontrollore verrà visualizzato sulla finestra di lista componenti (figura 2).

Figura 2: il micro 16F84 prelevato dalla libreria.

Figura 2: il micro 16F84 prelevato dalla libreria.

Si selezioni pertanto il componente e si prema il tasto OK. Si ripeta la stessa procedura per gli altri due componenti, digitando come parametri di ricerca le stringhe “220 resistor” e “LED RED”. I componenti prelevati dalla libreria si posizioneranno sulla barra sinistra dei dispositivi (figura 3).

Figura 3: i componenti scelti per il primo esempio

Figura 3: i componenti scelti per il primo esempio

Per il funzionamento  del controllore non sono necessari i condensatori  di oscillazione ed il quarzo. Non c’è bisogno neanche di collegare il pin MCLR del micro (reset). Selezionando adesso i componenti prescelti, si piazzino sulla board, in modo da disegnare lo schema visibile in figura 4.

Figura 4: lo schema del lampeggiatore.

Figura 4: lo schema del lampeggiatore.

Si noti che il diodo Led è collegato sulla porta RB0, tramite la resistenza di limitazione. In questo momento, la simulazione non potrà avvenire in quanto, pur essendoci tutti i  componenti vitali, manca il  programma da implementare nel micro.

Il firmware

Il programma da scrivere è naturalmente molto semplice. Occorre configurare, per prima cosa, la porta RB0 come uscita. Successivamente, in un ciclo infinito, si deve impostarla alternativamente ora a livello logico alto, ora a livello logico basso, il  tutto cadenzato da un’opportuna pausa di tempo. Il listato 1 è stato scritto con il Mikrobasic, ma con semplici modifiche può essere adattato a qualsiasi altro tipo di linguaggio e di compilatore.

rem Lampeggio Led
program lampeggio
trisb=0 ‘Tutta PORTB in Output
portb=0 ‘PORTB in LOW
while true
portb.0=1 ‘RB0 ON
delay_ms(500)
portb.0=0 ‘RB0 OFF
delay_ms(500)
wend
end.
Listato 1

Durante la digitazione del codice, occorre impostare correttamente il valore della frequenza di Clock (figura 5).

Figura 5: l’editor del Mikrobasic.

Figura 5: l’editor del Mikrobasic.

Bisogna anche compilare  il programma. Tale fase produrrà un file eseguibile, con estensione HEX, da copiare successivamente nel microcontrollore.

Implementazione del firmware in Proteus

Bene, ora che il firmware  è stato scritto ed il file HEX prodotto, occorre “caricarlo” all’interno del microcontrollore virtuale di Proteus. A tale scopo si faccia click, prima col tasto destro e poi col sinistro, sul microcontrollore Pic 16F84 dello schema disegnato. Si aprirà una finestra di dialogo con le proprietà e le caratteristiche di tale dispositivo. Occorre quindi effettuare due operazioni fondamentali: la prima è quella di andare a rintracciare  il file HEX appena prodotto, premendo la cartellina gialla. La seconda è quella di impostare la frequenza del clock pari a quella del compilatore. Nel nostro caso è stato scelto un valore pari a 4 Mhz. Si prema infine il tasto OK (figura 6).

Figura 6: le proprietà del microcontrollore

Figura 6: le proprietà del microcontrollore

Finalmente la simulazione

Adesso occorre lanciare la simulazione. Si prema allo scopo il tasto contrassegnato con la freccia nera, posto in basso sulla barra di stato del Proteus. Inizierà immediatamente l’esecuzione del funzionamento dello schema, con inclusa l’esecuzione del programma del micro. Il diodo Led lampeggia come se avessimo “realmente” costruito il prototipo. Sulla barra di stato appare anche il tempo trascorso e la percentuale di impiego della CPU (del computer). Se tale valore è inferiore al 100%, la simulazione avverrà rispettando i  tempi previsti nel codice, altrimenti subirà un leggero rallentamento (figura 7).

Figura 7: la simulazione del lampeggio in corso.

Figura 7: la simulazione del lampeggio in corso.

Se il codice  fosse errato?

Se il programmatore  si accorgesse che il codice programma non rispecchia le sue aspettative, ovvero occorre apportare qualche modifica, niente paura. Basta modificare  il programma sull’editor del compilatore, compilare nuovamente il codice e rilanciare la simulazione in Proteus. Infatti il firmware è ormai parte integrante del progetto, e non è necessario specificare nuovamente  il file eseguibile HEX.

Seconda simulazione: contatore UP-DOWN

Come secondo esempio proponiamo un prototipo utile ed interessante: un contatore UP-DOWN a microcontrollore , composto da un display a 7 segmenti e da due pulsanti. Un pulsante ha la funzione di incrementare  il valore visualizzato, mentre l’altro lo decrementa. Il  codice per gestire le operazioni è scritto in Mikrobasic.

Schema  elettrico

Anche in questo caso lo schema elettrico è abbastanza semplice. Sono utilizzate entrambe le porte del Pic 16F84. La PORT-B (o almeno i suoi 7 bit meno significativi) è utilizzata per pilotare il display a 7 segmenti (a catodo comune), attraverso le sette resistenze di limitazione da 220 ohm. La porta RA0 e RA1 sono trattati come ingressi e accettano i segnali logici provenienti da due pulsanti N/A. Il  primo serve ad incrementare il  valore visualizzato,  il secondo lo decrementa. Degne di nota sono le due resistenze di pull-down a valle delle due porte, che assicurano un potenziale logico basso, in caso della mancata pressione dei pulsanti. Il livello logico alto è invece assicurato dalla presenza della batteria da 5 Volt (figura 8).

Figura 8: schema elettrico del contatore UP-DOWN.

Figura 8: schema elettrico del contatore UP-DOWN.

Il Firmware

Un tantino più complicato del precedente, esso si occupa della rilevazione della pressione dei tasti, dell’incremento o decremento del valore e del pilotaggio diretto del display. Tutto il codice è racchiuso all’interno di un ciclo infinito (listato 2).

rem Contatore UP-DOWN
program contatore
const vettore as byte[10] =
(63,6,91,79,102,109,125,7,127,111)
dim valore as byte
trisa=31‘Tutta PORTA in Input
porta=0 ‘PORTA in LOW
trisb=0 ‘Tutta PORTB in Output
portb=0 ‘PORTB in LOW
valore=0
while true
  delay_ms(250) ‘Antirimbalzo
  rem —- Se si preme tasto UP ——
  if (porta.0=1) and (valore<9) then
    valore=valore+1
  end if
  rem —- Se si preme tasto DOWN ——
  if (porta.1=1) and (valore>0) then
    valore=valore-1
  end if
  rem —- Visualizza sul Display
  portb=vettore[valore]
wend
end.
Listato 2

La visualizzazione dei numeri sul display è resa possibile grazie alla codifica dei dieci byte relativi all’interno di un vettore.

La simulazione

Dopo aver compilato il sorgente e aver “programmato” il micro con il relativo  file HEX, si può passare direttamente alla simulazione del prototipo, premendo il tasto Play sulla barra di stato, come abbiamo visto per il precedente esempio. La simulazione inizia immediatamente e se l’utente clicca su uno dei due tasti dello schema, il display visualizzerà  il valore che si modificherà di conseguenza. Da notare che, durante la simulazione, sono sempre visualizzati gli “stati logici” di linea, ossia il valore logico (alto o basso) in corrispondenza di ciascun nodo. Il valore logico alto è sempre contrassegnato da un punto di colore rosso, mentre il valore logico basso da un punto di colore blu. Gli stati di “indecisione” sono contrassegnati da un punto di colore grigio (figura 9).

Figura 9: la simulazione del contatore UP-DOWN.

Figura 9: la simulazione del contatore UP-DOWN.

Conclusioni

Grazie a questi due esempi,  il lettore dovrebbe aver compreso la filosofia con cui il  Proteus simula non solo la parte relativa al circuito elettrico, ma anche il software scritto e contenuto nei microcontrollori. Questo avviene perché il programma riesce ad eseguire, passo per passo, le istruzioni in linguaggio macchina di ogni dispositivo intelligente. Finalmente con il Proteus  il progettista non ha più bisogno né di saldare, né di assemblare componenti, né di assistere ad eventuali… esplosioni dovute ad errori di calcolo e di collegamento. Tutto il lavoro viene virtualmente eseguito al computer. Questa è la potenza dei programmi CAD/CAE.

 

STAMPA     Tags:, , ,

Scrivi un commento