- Prepararsi per la programmazione:
- Creazione di un nuovo progetto utilizzando MPLAB-X:
- Conoscere i registri di configurazione:
- Impostazione dei bit di configurazione in MPLAB-X:
- Programmazione del PIC per far lampeggiare un LED:
- Schema del circuito e simulazione di Proteus:
Questo è il secondo tutorial della nostra serie di tutorial PIC. Nel nostro precedente tutorial Iniziare con il microcontrollore PIC: Introduzione a PIC e MPLABX, abbiamo imparato le cose di base sul nostro microcontrollore PIC, abbiamo anche installato il software richiesto e acquistato un nuovo programmatore PicKit 3 che presto utilizzeremo. Ora siamo pronti per iniziare con il nostro primo programma di lampeggiamento LED utilizzando il PIC16F877A. Impareremo anche i registri di configurazione in questo tutorial.
Questo tutorial prevede che tu abbia installato il software richiesto sul tuo computer e che tu conosca alcune basi decenti sull'MCU PIC. In caso contrario, torna al tutorial precedente e inizia da lì.
Prepararsi per la programmazione:
Dato che abbiamo deciso di utilizzare il PIC16F877A, con il compilatore XC8 iniziamo con il loro datasheet. Consiglio a tutti di scaricare la scheda tecnica PIC16F877A e il manuale del compilatore XC8, poiché ci riferiremo a questi frequentemente mentre procediamo nel nostro tutorial. È sempre buona norma leggere la scheda tecnica completa di qualsiasi MCU prima di iniziare effettivamente a programmare con esso.
Ora, prima di aprire il nostro MPLAB-X e iniziare a programmare, ci sono poche cose di base di cui bisogna essere consapevoli. Comunque, poiché questo è il nostro primo programma, non voglio arringarvi gente con molta teoria, ma ci fermeremo qua e là mentre programmiamo e vi spiegherò le cose come tali. Se non hai abbastanza tempo per leggere tutto questo, dai un'occhiata e salta nel video in fondo alla pagina.
Creazione di un nuovo progetto utilizzando MPLAB-X:
Passaggio 1: avvia l'IDE MPLAB-X che abbiamo installato nella classe precedente, una volta caricato dovrebbe assomigliare a questo.
Passaggio 2: fare clic su File -> Nuovo progetto o utilizzare il tasto di scelta rapida Ctrl + Maiusc + N. Otterrai il seguente POP-UP, dal quale dovrai selezionare Standalone Project e fare clic su Next.
Passaggio 3: ora dobbiamo selezionare il nostro dispositivo per il progetto. Quindi digita PIC16F877A nella sezione a discesa Seleziona dispositivo . Una volta fatto dovrebbe essere così e quindi fare clic su Avanti.
Passaggio 4: la pagina successiva ci consentirà di selezionare lo strumento per il nostro progetto. Questo sarebbe PicKit 3 per il nostro progetto. Seleziona PicKit 3 e fai clic su Avanti
Passaggio 5: la pagina successiva chiederà di selezionare il compilatore, selezionare il compilatore XC8 e fare clic su Avanti.
Passaggio 6: in questa pagina dobbiamo assegnare un nome al nostro progetto e selezionare la posizione in cui il progetto deve essere salvato. Ho chiamato questo progetto come Blink e l'ho salvato sul mio desktop. Puoi nominarlo e salvarlo nel modo che preferisci. Il nostro progetto verrà salvato come cartella con l'estensione .X, che può essere avviata direttamente da MAPLB-X. Fare clic su Fine una volta terminato.
Passaggio 7: è tutto !!! Il nostro progetto è stato creato. La finestra più a sinistra mostrerà il nome del progetto (Here Blink), cliccaci sopra in modo da poter visualizzare tutte le directory al suo interno.
Per iniziare a programmare dobbiamo aggiungere un file C Main, all'interno della nostra directory del file sorgente. Per farlo è sufficiente fare clic con il pulsante destro del mouse sul file sorgente e selezionare Nuovo -> C File principale, come mostrato nell'immagine sottostante.
Passaggio 8: verrà visualizzata la seguente finestra di dialogo in cui è necessario menzionare il nome del file C. Ho chiamato di nuovo in Blink, ma la scelta è lasciata a te. Assegnagli un nome nella colonna Nome file e fai clic su Fine.
Passaggio 9: una volta creato il file principale C, l'IDE lo aprirà per noi con alcuni codici predefiniti al suo interno, come mostrato di seguito.
Passaggio 10: è tutto, ora possiamo iniziare a programmare il nostro codice nel file C-main. Il codice predefinito non verrà utilizzato nei nostri tutorial. Quindi cancelliamoli completamente.
Conoscere i registri di configurazione:
Prima di iniziare a programmare qualsiasi microcontrollore dobbiamo conoscere i suoi registri di configurazione.
Allora cosa sono questi registri di configurazione, come e perché dovremmo impostarli?
I dispositivi PIC hanno diverse posizioni che contengono i bit di configurazione oi fusibili. Questi bit specificano il funzionamento fondamentale del dispositivo, come la modalità oscillatore, il timer watchdog, la modalità di programmazione e la protezione del codice. Questi bit devono essere impostati correttamente per eseguire il codice altrimenti abbiamo un dispositivo non in esecuzione . Quindi è molto importante conoscere questi registri di configurazione prima ancora di iniziare con il nostro programma Blink.
Per poter utilizzare questi registri di configurazione dobbiamo leggere il Datasheet e capire quali sono i diversi tipi di bit di configurazione disponibili e le loro funzioni. Questi bit possono essere impostati o ripristinati in base ai nostri requisiti di programmazione utilizzando un pragma di configurazione.
Il pragma ha le seguenti forme.
#pragma config setting = state-value #pragma config register = valore
dove l' impostazione è un descrittore dell'impostazione della configurazione, ad esempio, WDT, e lo stato è una descrizione testuale dello stato desiderato, ad esempio, OFF. Considera i seguenti esempi.
#pragma config WDT = ON // attiva il timer watchdog #pragma config WDTPS = 0x1A // specifica il valore di postscala del timer
RILASSARE!!….. RELAX !!…. RELAX !!…...
So che ci è passato troppo in testa e impostare questi bit di configurazione potrebbe sembrare un po 'difficile per un principiante !! Ma non è con aria di sfida con il nostro MPLAB-X.
Impostazione dei bit di configurazione in MPLAB-X:
Microchip ha reso questo faticoso processo molto più semplice utilizzando rappresentazioni grafiche dei diversi tipi di bit di configurazione. Quindi ora per impostarli dobbiamo semplicemente seguire i passaggi seguenti.
Passaggio 1: fare clic su Finestra -> Visualizzazione memoria PIC -> Bit di configurazione. Come mostrato di seguito.
Passaggio 2: questo dovrebbe aprire la finestra Bit di configurazione nella parte inferiore del nostro IDE come mostrato di seguito. Questo è il luogo in cui possiamo impostare ciascuno dei bit di configurazione in base alle nostre esigenze. Spiegherò ciascuno dei bit e il suo scopo man mano che procediamo attraverso i passaggi.
Passaggio 3: il primo bit è il bit di selezione dell'oscillatore.
Il PIC16F87XA può essere utilizzato in quattro diverse modalità di oscillatore. Queste quattro modalità possono essere selezionate programmando due bit di configurazione (FOSC1 e FOSC0):
- Cristallo a bassa potenza LP
- Cristallo / risonatore XT
- Cristallo / risonatore ad alta velocità HS
- Resistenza / condensatore RC
Per i nostri progetti utilizziamo un Osc da 20 Mhz, quindi dobbiamo selezionare l'HS dalla casella a discesa.
Passaggio 4: il bit successivo sarà il bit di attivazione del timer watchdog.
Il Watchdog Timer è un oscillatore RC su chip a funzionamento gratuito che non richiede componenti esterni. Questo oscillatore RC è separato dall'oscillatore RC del pin OSC1 / CLKI. Ciò significa che il WDT funzionerà anche se l'orologio sui pin OSC1 / CLKI e OSC2 / CLKO del dispositivo è stato arrestato. Durante il normale funzionamento, un timeout WDT genera un reset del dispositivo (Watchdog Timer Reset). Il bit TO nel registro di stato verrà cancellato al timeout del timer watchdog. Se il timer non viene cancellato nella nostra codifica software, l'intero MCU verrà ripristinato ad ogni overflow del timer WDT. Il WDT può essere disabilitato in modo permanente cancellando il bit di configurazione.
Non stiamo utilizzando WDT nel nostro programma, quindi cancelliamolo selezionando OFF dalla casella a discesa.
Passaggio 5: il bit successivo sarà il bit del timer di accensione.
Il timer di accensione fornisce un timeout nominale fisso di 72 ms all'accensione solo dal POR. Il timer di accensione funziona su un oscillatore RC interno. Il chip viene mantenuto in Reset fintanto che il PWRT è attivo. Il ritardo temporale del PWRT consente a VDD di salire a un livello accettabile. Viene fornito un bit di configurazione per abilitare o disabilitare il PWRT.
Non avremo bisogno di tali ritardi nel nostro programma, quindi disattiviamo anche questo.
Passaggio 6: il bit successivo sarà la programmazione a bassa tensione.
Il bit LVP della parola di configurazione abilita la programmazione ICSP a bassa tensione. Questa modalità consente di programmare il microcontrollore tramite ICSP utilizzando una sorgente VDD nell'intervallo di tensione operativa. Ciò significa solo che VPP non deve essere portato a VIHH ma può invece essere lasciato alla normale tensione di esercizio. In questa modalità, il pin RB3 / PGM è dedicato alla funzione di programmazione e cessa di essere un pin I / O generico. Durante la programmazione, VDD viene applicato al pin MCLR. Per accedere alla modalità di programmazione, VDD deve essere applicato a RB3 / PGM a condizione che il bit LVP sia impostato.
Disattiviamo LVP in modo da poter utilizzare RB3 come pin I / O. Per fare ciò, è sufficiente disattivarlo utilizzando la casella a discesa.
Passaggio 7: i bit successivi saranno EEPROM e bit di protezione della memoria di programma. Se questo bit è attivato, una volta programmata la MCU nessuno recupererà il nostro programma dall'hardware. Ma per ora lasciamo tutti e tre spenti.
Una volta eseguite le impostazioni come indicato, la finestra di dialogo dovrebbe essere simile a questa.
Passaggio 8: ora fai clic su Genera codice sorgente in output, il nostro codice verrà generato ora, copialo insieme al file di intestazione e incollalo sul nostro file C Blink.c, come mostrato di seguito.
Ecco fatto il nostro lavoro di configurazione. Possiamo avere questa configurazione per tutti i nostri progetti. Ma se sei interessato puoi scherzare con loro in seguito.
Programmazione del PIC per far lampeggiare un LED:
In questo programma useremo il nostro microcontrollore PIC per far lampeggiare un LED collegato a un pin I / O. Diamo un'occhiata ai diversi pin I / O disponibili sul nostro PIC16F877A.
Come mostrato sopra, PIC16F877 ha 5 porte di ingresso / uscita di base. Di solito sono indicati con PORT A (RA), PORT B (RB), PORT C (RC), PORT D (RD) e PORT E (RE). Queste porte vengono utilizzate per l'interfacciamento di input / output. In questo controller, "PORT A" è largo solo 6 bit (da RA-0 a RA-5), "PORT B", "PORT C", "PORT D" sono larghi solo 8 bit (da RB-0 a RB-7, Da RC-0 a RC-7, da RD-0 a RD-7), "PORT E" ha solo 3 bit di larghezza (da RE-0 a RE-2).
Tutte queste porte sono bidirezionali. La direzione del porto è controllata usando i registri TRIS (X) (TRIS A usato per impostare la direzione di PORT-A, TRIS B usato per impostare la direzione per PORT-B, ecc.). L'impostazione di un bit TRIS (X) '1' imposterà il bit PORT (X) corrispondente come ingresso. La cancellazione di un bit TRIS (X) '0' imposterà il bit PORT (X) corrispondente come output.
Per il nostro progetto dobbiamo rendere il pin RB3 della PORTA B come uscita in modo che il nostro LED possa essere collegato ad esso. Ecco il codice per il LED lampeggiante con microcontrollore PIC:
#includere
Per prima cosa abbiamo specificato la frequenza Crystal esterna usando #define _XTAL_FREQ 20000000. Quindi nella funzione void main () , abbiamo indicato al nostro MCU che useremo l'RB3 come pin di uscita (TRISB = 0X00;) . Quindi, infine, viene utilizzato un ciclo while infinito in modo che il LED lampeggi per sempre. Per far lampeggiare un LED dobbiamo semplicemente accenderlo e spegnerlo con un notevole ritardo.
Una volta completata la codifica, crea il progetto utilizzando il comando Esegui -> Crea progetto principale. Questo dovrebbe compilare il tuo programma. Se tutto va bene (come dovrebbe essere) una Console di output nella parte inferiore dello schermo mostrerà un messaggio BUILD SUCCESSFUL, come mostrato nell'immagine sottostante.
Schema del circuito e simulazione di Proteus:
Una volta creato un progetto e se la compilazione ha avuto successo, un file HEX sarebbe stato generato sullo sfondo del nostro IDE. Questo file HEX può essere trovato nella directory sottostante
Può variare per te se hai salvato in qualche altra posizione.
Ora, apriamo rapidamente Proteus che abbiamo installato in precedenza e creiamo schemi per questo progetto. Non spiegheremo come farlo in quanto non rientra nell'ambito di questo progetto. Ma non preoccuparti, è spiegato nel video qui sotto. Una volta seguite le istruzioni e costruito lo schema, dovrebbe essere simile a questo
Per simulare l'output, fare clic sul pulsante di riproduzione nell'angolo inferiore sinistro dello schermo dopo aver caricato il file Hex. Dovrebbe lampeggiare il LED collegato all'RB3 dell'MCU. Se hai qualche problema, guarda il video, se il problema persiste usa la sezione commenti per aiuto.
Ora abbiamo realizzato il nostro primo progetto con microcontrollore PIC e verificato l'output utilizzando un software di simulazione. Vai a modificare il programma e osserva i risultati. Fino a quando ci incontreremo sul nostro prossimo progetto.
Ohh aspetta !!
Nel nostro prossimo progetto impareremo come farlo funzionare su un hardware reale. Per questo avremo bisogno dei seguenti strumenti per tenerli pronti. Fino ad allora BUON APPRENDIMENTO !!
- PicKit 3
- PIC16F877A IC
- Porta IC a 40 pin
- Scheda Perf
- 20 Mhz Crystal OSC
- Perni Bergstick femmina e maschio
- Condensatore 33pf - 2Nos
- Resistore da 680 ohm
- LED di qualsiasi colore
- Kit di saldatura.