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
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 ...
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...
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...