- Materiali richiesti:
- Memoria flash:
- ICSP (In Circuit Serial Programming):
- Circuito e hardware:
- Masterizzazione del codice utilizzando MPLAB IPE:
Nei nostri due tutorial precedenti abbiamo discusso come iniziare con PIC utilizzando MPLABX e il compilatore XC8, abbiamo anche realizzato il nostro primo programma di lampeggiamento LED con PIC e lo abbiamo verificato tramite simulazione. Ora è il momento per noi di mettere le mani sull'hardware. In questo tutorial costruiremo un piccolo circuito su una scheda Perf per far lampeggiare il LED usando PIC. Scaricheremo il programma sul nostro microcontrollore PIC e verificheremo il LED lampeggiante. Per programmare il PIC MCU useremo MPLAB IPE.
Materiali richiesti:
Come discusso nel nostro precedente tutorial, avremo bisogno dei seguenti materiali:
- PicKit 3
- PIC16F877A IC
- 40 - Porta IC pin
- Scheda Perf
- OSC in cristallo da 20 MHz
- Perni Bergstick femmina e maschio
- Condensatore 33pf - 2Nos, 100uf e 10uf cap.
- Resistore da 680 ohm, 10K e 560ohm
- LED di qualsiasi colore
- 1 Kit di saldatura
- IC 7805
- Adattatore 12V
Cosa succede quando "bruciamo" un microcontrollore !!
È prassi normale caricare il codice in un MCU e farlo funzionare all'interno dell'MCU.
Per capirlo, diamo un'occhiata al nostro programma
Come possiamo vedere, questo codice è scritto in linguaggio C e non avrà senso per il nostro MCU. È qui che entra in gioco la parte del nostro compilatore; un compilatore è uno che converte questo codice in un formato leggibile dalla macchina. Questa forma leggibile dalla macchina è chiamata codice HEX, ogni progetto che creiamo avrà un codice HEX che sarà nella seguente directory
** La tua posizione ** \ Blink \ Blink.X \ dist \ default \ production \ Blink.X.production.hex
Se sei così interessato a sapere come appare questo codice HEX, aprilo usando il blocco note. Per il nostro programma Blink, il codice HEX sarà simile al seguente:
: 060000000A128A11FC2F18: 100FAA008316031386018312031386018312031324: 100FBA0086150D30F200AF30F100C130F000F00BB1: 100FCA00E42FF10BE42FF20BE42F0000831203133A: 100FDA0086110D30F200AF30F100C130F000F00B95: 100FEA00F42FF10BF42FF20BF42F0000DB2F830107: 060FFA000A128A11D52F36: 02400E007A3FF7: 00000001FF
Ci sono modi su come leggerlo e come comprenderlo e invertirlo di nuovo in linguaggio Assembly, ma è completamente fuori dallo scopo di questo tutorial. Quindi, per dirla semplicemente in poche parole; HEX è il risultato software finale della nostra codifica e questo è ciò che verrà inviato da MPLAB IPE per la masterizzazione dell'MCU.
Memoria flash:
Il codice HEX è memorizzato nell'MCU in un posto chiamato memoria Flash. La memoria flash è il luogo in cui il nostro programma verrà archiviato all'interno dell'MCU ed eseguito da lì. Una volta compilato il programma nel nostro MPLABX, avremmo ottenuto le seguenti informazioni sul tipo di memoria sulla console di output
Poiché abbiamo appena compilato un piccolo programma lampeggiante a LED, il riepilogo della memoria mostra che abbiamo appena consumato lo 0,5% dello spazio disponibile del programma e l'1,4% dello spazio dati.
La memoria del microcontrollore PIC16F877 è sostanzialmente divisa in 3 tipi:
Memoria del programma: questa memoria contiene il programma (che avevamo scritto), dopo averlo masterizzato. Come promemoria, Program Counter esegue i comandi memorizzati nella memoria del programma, uno dopo l'altro. Da quando abbiamo scritto un programma molto piccolo, abbiamo consumato solo lo 0,5% dello spazio totale. Questa è una memoria non volatile, significa che i dati memorizzati non andranno persi dopo lo spegnimento.
Memoria dati: questo è il tipo di memoria RAM, che contiene registri speciali come SFR (Special Function Register) che include il timer Watchdog, Brown out Reset ecc. E GPR (General Purpose Register) che include TRIS e PORT ecc. Le variabili memorizzate nella memoria dati durante il programma vengono cancellati dopo aver spento l'MCU. Qualsiasi variabile dichiarata nel programma sarà all'interno della memoria dati. Anche questa è una memoria volatile.
Data EEPROM (Electrically Erasable Programmable Read-Only Memory): una memoria che consente di memorizzare le variabili a seguito della masterizzazione del programma scritto. Ad esempio se assegniamo una variabile "a" per salvarci un valore di 5 e memorizzarlo nella EEPROM questi dati non andranno persi anche se l'alimentazione viene spenta. Questa è una memoria non volatile.
La memoria di programma e la EEPROM sono memorie non volatili e vengono chiamate memoria flash o EEPROM.
ICSP (In Circuit Serial Programming):
Programmeremo il nostro PIC16F877A utilizzando l'opzione ICSP disponibile nel nostro MCU.
Ora, cos'è l'ICSP?
ICSP è un modo semplice che ci aiuta a programmare un MCU anche dopo che è stato inserito nella nostra scheda di progetto. Non è necessario disporre di una scheda programmatore separata per programmare l'MCU, tutto ciò di cui abbiamo bisogno sono 6 connessioni dal programmatore PicKit3 alla nostra scheda come segue:
1 |
VPP (o MCLRn) |
Per entrare in modalità programmazione. |
2 |
Vcc |
Pin di alimentazione 11 o 32 |
3 |
GND |
PIN 12 o 31 di massa |
4 |
PGD - Dati |
RB7. PIN40 |
5 |
PGC - Orologio |
RB6. PIN 39 |
6 |
PGM - abilitazione LVP |
RB3 / RB4. Non obbligatorio |
ICSP è adatto a tutti i pacchetti PIC; tutto ciò di cui abbiamo bisogno è estrarre questi cinque pin (il 6 ° pin PGM è opzionale) dall'MCU a Pickit3 come mostrato nell'immagine sotto.
Circuito e hardware:
Ora, abbiamo il nostro codice HEX pronto e sappiamo anche come collegare il nostro PicKit 3 al nostro MCU PIC utilizzando ICSP. Quindi, andiamo avanti e saldiamo il circuito con l'aiuto degli schemi seguenti:
Nel circuito sopra ho usato un 7805 per regolare l'uscita 5V al mio MCU PIC. Questo regolatore sarà alimentato da un adattatore da muro da 12V. Il Led ROSSO è utilizzato per indicare se il PIC è alimentato. Il connettore J1 viene utilizzato per la programmazione ICSP. I pin sono collegati come discusso nella tabella sopra.
Il primo MCLR pin deve essere tenuto alto con l'aiuto di un 10k per impostazione predefinita. Ciò impedirà il ripristino dell'MCU. Per ripristinare l'MCU, il pin MCLR deve essere tenuto a terra, operazione che può essere eseguita con l'aiuto dell'interruttore SW1.
Il LED è collegato al pin RB3 tramite un resistore di valore 560 ohm (Vedi calcolatore resistore LED). Se tutto è corretto una volta caricato il nostro programma, questo LED dovrebbe lampeggiare in base al programma. L'intero circuito è costruito su Perfboard saldando tutti i componenti su di esso come puoi vedere nell'immagine in alto.
Masterizzazione del codice utilizzando MPLAB IPE:
Per masterizzare il codice, segui i passaggi seguenti:
- Avvia MPLAB IPE.
- Collega un'estremità del tuo PicKit 3 al tuo PC e l'altra estremità ai tuoi pin ICSP sulla scheda perf.
- Connettiti al tuo dispositivo PIC facendo clic sul pulsante di connessione.
- Cerca il file Blink HEX e fai clic su Programma.
Se tutto va come previsto, dovresti visualizzare il messaggio di successo sullo schermo. Controlla il codice e il video qui sotto per una dimostrazione completa e usa la sezione dei commenti in caso di dubbi.
Grazie!!!
Incontriamoci nel prossimo tutorial dove giocheremo con più LED e un interruttore.