Lezione n° 5 - mrscuole.net

Transcript

Lezione n° 5 - mrscuole.net
Corso introduttivo sui
microcontrollori
A. S. 2007 – 2008
La programmazione dei PIC
Esempio: 2 led blinking [alternate ON-OFF ] con ritardo di 500 ms
Nicola Amoroso
[email protected]
NA – L5
http://www.mrscuole.net/anxapic/
1
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
La programmazione dei PIC
Semplici esempi in assembler
Vediamo ora dei semplici esempi di programmazione dei PIC in assembler,
riordineremo i concetti sviluppati in precedenza e cercheremo di approfondire la
simulazione mediante MPSIM e Proteus.
Ricordiamo i punti fondamentali da espletare per la stesura di un programma in assembler e la
programmazione di un microcontrollore Microchip PIC
Un programma in assembler è scritto come codice sorgente (un semplice file di testo) su un normale PC,
qualsiasi text-editor (es. notepad, blocco note di MS Windows, etc…) può essere usato.
Il PIC development system software MPLAB (dowload gratuito su http://www.microchip.com) contiene
un editor di testo per la scrittura di codice, il compilatore e il simulatore software.
Le istruzioni sono semplici e facilmente consultabili sul Data-Sheet del microcontrollore PIC16F877
(Table 13-2); il codice scritto viene salvato con estensione “*.ASM “ (Es. Led_Blinking.asm).
Il codice sorgente, in assembler, viene quindi “compilato” (convertito in linguaggio macchina) mediante
il compilatore MPASM (Gratuito e compreso in MPLAB) che converte in binario il codice sorgente
(visibile con un editor esadecimale – Hex editor, come sequenza di numeri esadecimali). L’estensione di
questo file è “*.HEX” (Es. Led_Blanking.hex).
Mediante un opportuno programmatore (opportunamente interfacciato al PC), questo “codice binario”
viene memorizzato nella FLASH PROGRAM MEMORY del controllore.
NA – L5
http://www.mrscuole.net/anxapic/
2
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
La programmazione dei PIC
Esempio: 2 led blinking [alternate ON-OFF ] con ritardo di 500 ms
•
Analisi e stesura per punti del problema [=> Schema a blocchi => Schema elettrico]
Il problema è facilmente affrontabile e precisamente:
Si vogliono far lampeggiare alternativamente 2 led ognuno acceso per 500
ms e spento per 500 ms.
Dopo le discussioni precedenti il problema è facilmente risolvibile e sicuramente la analisi e
impostazione è quasi immediata; tralasciamo uno schema a blocchi, vista la semplicità del
problema e viene presentato lo schema elettrico opportuno.
N.B. => Lo schema è minimo ed è quello utilizzato per la simulazione con Proteus, anzi per la
simulazione il gruppo oscillatore – Reset non sono indispensabili in quanto con proteus la
sezione clock viene impostata via software.
NA – L5
http://www.mrscuole.net/anxapic/
3
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
La programmazione dei PIC
Esempio: 2 led blinking [alternate ON-OFF ] con ritardo di 500 ms
Schema elettrico
Sul
circuito
di
simulazione
l’oscillatore e il reset non vengono
riportati per non “appesantire”
troppo il disegno
I Led sono collegati su RD2 e RD3
con resistenze opportune per limitare
la
corrente
erogata
dal
microcontrollore
NA – L5
http://www.mrscuole.net/anxapic/
4
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
La programmazione dei PIC
Esempio: 2 led blinking [alternate ON-OFF ] con ritardo di 500 ms
•
Il software => Il Flow - Chart
Delay tempi
Clock microControllore 10 MHZ
Clock ciclo Software 10/4 = 2.5 MHz
Time singola istruzione 400 ns
Calcolo ciclo di ritardo:
DelayL si azzera ogni 256 decrementi
DelayM si azzera ogni 256 decrementi
DelayH si azzera ogni 7 decrementi
256 volte
Totale ciclo decrementi => 256x256x7
Pari a 458.752
256 volte
7 volte
Ogni ciclo dura 3 istruzioni software [1
decremento e 1 jumping] in totale
avremo 1.376.256 cicli software per
azzerare i tre registri.
Con la frequenza di clock del Micro
ogni istruzione viene eseguita in 400 ns
quindi in totale per assolvere il ciclo di
delay occorre un intervallo di tempo di
circa 550 ms [1.376.256 x 400 ns]
A questo intervallo di tempo bisogna
aggiungere alcuni cicli software dovute
alle chiamate della soubritine, al ritorno
dalla soubroutine, etc … .
NA – L5
http://www.mrscuole.net/anxapic/
5
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
La programmazione dei PIC
Esempio: 2 led blinking [alternate ON-OFF ] con ritardo di 500 ms
•
Il codice assembler => Il sistema di sviluppo MPLAB IDE
Scriviamo ora il nostro codice in assembler. Utilizzeremo MPLAB IDE (Sistema di sviluppo gratuito della Microchip)
Iniziamo un nuovo progetto rispettando i passi visti
nelle precedenti lezioni [cfr. NA – L4] e associamogli
un nuovo file assembler [Anxa3_2Led.asm]
NA – L5
Una nuova finestra di editor [File > New] e salveremo [File > Save As] il
nuovo file con il nome “Anxa3_2Led.asm”. Scriviamo ora il nostro codice
sorgente tenendo presente il flow-chart impostato. Alla fine controlliano se
tutto è a posto e il codice è scritto senza errori.
http://www.mrscuole.net/anxapic/
6
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
La programmazione dei PIC
Esempio: 2 led blinking [alternate ON-OFF ] con ritardo di 500 ms
•
Il codice assembler => Il file Anxa3_2Led.asm
NA – L5
http://www.mrscuole.net/anxapic/
7
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
La programmazione dei PIC
Esempio: 2 led blinking [alternate ON-OFF ] con ritardo di 500 ms
•
Il codice assembler => Il file Anxa3_2Led.asm => Analisi del codice
Linee di commento, il compilatore non considera
queste linee che invece risulteranno utilissime per
comprendere questo codice e le impostazioni
presenti
Direttive del preprocessore
PROCESSOR
RADIX
Micro utilizzato
[DEC I numeri sono in base 10]
[HEX I numeri sono in base 16]
[etc …. Etc …. Etc … etc …. ]
Direttive del preprocessore
Config del controllore utilizzato
Il valore esadecimale dipende dai vari fuses attivati
In MPLAB => [Configure > Configuration Bits …]
NA – L5
http://www.mrscuole.net/anxapic/
8
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
La programmazione dei PIC
Esempio: 2 led blinking [alternate ON-OFF ] con ritardo di 500 ms
•
Il codice assembler => Il file Anxa3_2Led.asm => Analisi del codice
Inizializzazione dei registri e delle variabili che utilizzeremo
A fianco viene riportata la memory map delle locazioni RAM [512
byte di cui 368 utlizzabili] del 16F877, notiamo che PORTD e
TRISD, registri speciali, sono definiti all’indirizzo 0x08 e 0x88
rispettivamente.
LED1 e LED2 sono rispettivamente uguali a 2 e 3, corrispondenti a
RD2 e RD3 di PORTD.
Le tre variabili a 8 bit DelayL, DelayM e DelayH vengono definite in
corrispondenza delle locazioni [registri] “General register” della
memory-map del PIC16F877. Le prime locazioni utilizzabili sono
all’indirizzo 0x20, 0x21, 0x22; le locazioni da 0x00 a 0x19 sono
locazioni riservate
“registri speciali” per la gestione del
microcontrollore.
NA – L5
http://www.mrscuole.net/anxapic/
9
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
La programmazione dei PIC
Esempio: 2 led blinking [alternate ON-OFF ] con ritardo di 500 ms
•
Il codice assembler => Il file Anxa3_2Led.asm => Analisi del codice
Selezione dei Banki di memoria
La nuova direttiva microchip “banksel” permette la selezione dei
banchi di memoria senza intervenire dui pin RP0 e RP1 del
registro di stato (STATUS – 0x03 del memory map). BankSel
TRISD seleziona il bank1 del registro di memoria, BankSel
PORTD seleziona il bank0 e così via.
Inizializzazione delle PORT utilizzate
La soubroutine Delay500
Mediante TRISD viene impostato la direzionalità del singolo pin
di PORTD, 0 corrisponde a una condizione di scrittura (out) per
il pin corrispondente mentre 1 corrisponde a una condizione di
lettura (in) per il singolo pin. Notiamo che nel nostro esempio
tutti i pin di PORTD sono impostati in scrittura (out) e
successivamente il valore del registro (byte) PORTD viene
inizializzato a zero.
Nella riga 45 “saltiamo” alla label “start”, inizio del main loop.
NA – L5
Con questa soubroutine avremo un ritardo di circa 500 ms cioè
circa 0,5 secondi di “non far niente”. Il ritardo viene generato in
modo software decrementando opportunamente determinati registri.
Abbiamo analizzato in precedenza il relativo flow-chart e i tempi di
esecuzione delle singole istruzioni.
In seguito vedremo una modalità “più elegante” per implementare
opportune routine di ritardo.
http://www.mrscuole.net/anxapic/
10
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
La programmazione dei PIC
Esempio: 2 led blinking [alternate ON-OFF ] con ritardo di 500 ms
•
Il codice assembler => Il file Anxa3_2Led.asm => Analisi del codice
Main Loop
Swap1
Main Loop
Il codice è molto semplice da seguire e il flow-chart riportato
agevola ulteriormente la comprensione.
Swap2
N.B. => L’istruzione END deve essere sempre presente alla fine
di un programma assembler, è indispensabile.
NA – L5
http://www.mrscuole.net/anxapic/
11
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
La programmazione dei PIC
Esempio: 2 led blinking [alternate ON-OFF ] con ritardo di 500 ms
•
Compilare il progetto => Creare il file Anxa2_2Led .hex
Al termine della scrittura del programma nella finestra di
editor, dopo aver verificato la correttezza del codice scritto e
aver salvato il file con estensione “.asm”, siamo pronti a
compilare il progetto, per farlo andiamo su PROJECT ->
BUILD ALL; questo comando traduce il file assembler in un
file eseguibile in formato HEX (esadecimale). Apparirà una
finestra di log nella quale verrà indicato se la compilazione è
andata a buon fine. "BUILD SUCCEEDED" è un messaggio
che indica la corretta compilazione (nessun errore).
In caso di errori è possibile fare doppio click sul messaggio d’errore nella finestra di “Output”
ed automaticamente verrà mostrato il codice assembler esattamente alla linea dove si è incontrato
l’errore.
NA – L5
http://www.mrscuole.net/anxapic/
12
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
La programmazione dei PIC
Esempio: 2 led blinking [alternate ON-OFF ] con ritardo di 500 ms
•
Simulare il progetto => Il simulatore software MPSIM
In NA – L4 abbiamo
analizzato in dettaglio
come
simulare
il
progetto con MPSIM,
simulatore
software
integrato in MPLAB.
A fianco simulazione
con MPSIM.
Sono
attive
varie
finestre [View > Watch
> …] che permettono di
controllare le variabili
di progetto.
E’ utile notare la
finestra “disassembly
listing” in cui sono
riportati gli indirizzi
delle variabili definite.
In “file registers” sono
riportati i 512 registri
RAM con in testa gli
SFR “Special Function
Register”
NA – L5
http://www.mrscuole.net/anxapic/
13
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
La programmazione dei PIC
Esempio: 2 led blinking [alternate ON-OFF ] con ritardo di 500 ms
•
Simulare il progetto => Il simulatore software Proteus
Proteus VSM (Virtual System Modelling – Labcenter Electronics UK) è uno dei sistemi più
avanzati per la simulazione di circuiti digitali-analogici comprendenti microcontrollori; è l’unico,
sino ad oggi, ad avere un larghissimo range di modelli software per microcontrollori.
E’ possibile integrare Proteus VSM all’interno di MPLAB IDE è procedere con la simulazione in
modo più avanzato rispetto a quanto visto con il modulo MPSIM di Microchip.
Per lavorare con MPLAB IDE e Proteus VSM bisogna avere disponibile il software proteusmplabPlugin e installare lo stesso dopo aver installato MPLAB IDE, oppure avere acquistato
la versione Professional di Proteus che installa automaticamente il plu-In in MPLAB.
Lo schema del circuito da simulare deve essere realizzato al di fuori di MPLAB con il modulo
“Isis” di proteus, non modificare il circuito originale all’interno di MPLAB è sempre buona norma
utilizzare “Isis” per realizzare e modificare gli schemi.
Caricare lo schema nel modulo Proteus in MPLAB mediante gli opportuni menu di Proteus.
NA – L5
http://www.mrscuole.net/anxapic/
14
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
La programmazione dei PIC
Esempio: 2 led blinking [alternate ON-OFF ] con ritardo di 500 ms
•
Simulare il progetto => Il simulatore software Proteus
Per caricare e aprire il modulo PROTEUS VSM in MPLAB IDE selezionare il
menu: Debugger > Select Tool > Proteus VSM
NA – L5
http://www.mrscuole.net/anxapic/
15
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
La programmazione dei PIC
Esempio: 2 led blinking [alternate ON-OFF ] con ritardo di 500 ms
•
Simulare il progetto => Il simulatore software Proteus
Simulare con Proteus è semplice e intuitivo; in MPLAB valgono le stesse considerazioni di MPSIM però avremo
una simulazione “visual”. Nella simulazione del nostro progetto le stesse finestre del caso precedente sono attive.
NA – L5
http://www.mrscuole.net/anxapic/
16
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
La programmazione dei PIC
Esempio: 2 led blinking [alternate ON-OFF ] con ritardo di 500 ms
•
Programmare il microcontrollore
Una volta che il programma è stato scritto, compilato e simulato possiamo passare alla
programmazione del microcontrollore.
Innanzitutto bisogna selezionare il
tipo di programmatore di cui
disponiamo tra quelli elencati nel
menu Programmer
> Select
Una volta selezionato il programmatore
comparirà una nuova barra degli
strumenti, la barra degli strumenti del
programmatore:
Programmer
N.B. => L’Hardware necessario
viene installato con l’installazione
di MPLAB nel PC; in questo caso
si sceglie il programmatore
PicStart Plus della Microchip
NA – L5
Prima di eseguire la programmazione è
necessario configurare i bit riguardanti
il tipo di oscillatore e tutte le altre
opzioni attivabili del microcontrollore
(Watchdog timer ecc…)
N.B. => Per il nostro sistema avremo il
modulo/programmer “PicKit2” installato,
faremo quindi riferimento a questo
programmatore.
http://www.mrscuole.net/anxapic/
17
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
La programmazione dei PIC
Esempio: 2 led blinking [alternate ON-OFF ] con ritardo di 500 ms
•
Verifica sulla DemoBoard AnxaPic3
Il risultato del nostro lavoro => AnxaPic3 + Expansion-Replicate PORT + modulo Led-Pulsanti
Expansion-Replicate PORT
Modulo Led-Pulsanti
NA – L5
http://www.mrscuole.net/anxapic/
18
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
La programmazione dei PIC
Esempio: 2 led blinking [alternate ON-OFF ] con ritardo di 500 ms
•
Il modulo Led-Pulsanti => Schema elettrico
NA – L5
http://www.mrscuole.net/anxapic/
19
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/

Documenti analoghi

Lezione n° 4 - mrscuole.net

Lezione n° 4 - mrscuole.net Un programma in assembler è scritto come codice sorgente (un semplice file di testo) su un normale PC, qualsiasi text-editor (es. notepad, blocco note di MS Windows, etc…) può essere usato. Il PIC ...

Dettagli

MPLAB

MPLAB Il simulatore è una parte dell’ambiente MPLAB il quale permette di avere una visione globale sul comportamento del nostro programma per un determinato microcontrollore permettendoci di verificare c...

Dettagli

Lezione n° 3 - mrscuole.net

Lezione n° 3 - mrscuole.net http://www.mrscuole.net/anxapic/

Dettagli

sistemi di sviluppo / didattica

sistemi di sviluppo / didattica seriale di qualsiasi PC nel quale andrà caricato l'apposito software (compreso nella confezione). Dispone di quattro zoccoli in grado di accogliere micro da 8, 14, 18 e 28 pin. La demoboard dispone...

Dettagli