INTRODUZIONE AI PICmicro I Pic micro sono dei Circuiti Integrati della famiglia dei microcontrollori prodotti dalla MICROCHIP TECHNOLOGY INC. MICROCONTROLLORE Legge segnali ai suoi ingressi (sensori,pulsanti,…etc.) Processa,eleabora Pilota tali segnali (dati) dispositivi collegati alle sue uscite (led,display,lcd,motori,..etc.) PIC16F84 E’ il microcontrollore di cui ci occuperemo. Si presenta in un package DIP a 18 pin. PIC1684 Si presenta come in fig. DISPOSITIVI INTERNI AD UN MICRO CPU (Central Processor Unit) EEPROM (Electrical Erase Programmable Read Only unità centrale di elaborazione,interpreta le istruzioni del programma Memory)memoria programmabile a solo lettura,è il luogo ove viene memorizzato il programma. LINEE I/O, RAM (Random Access Memory) CLOCK, BUS, CONTATORI (TIMER),..etc. linee di ingresso e di uscita,per pilotare disp. Esterni o ricevere segnali da sensori,pulsanti,..etc. ovvero memoria ad accesso casuale.Utilizzata per memorizz. Le variabili del programma. PIEDINATURA DEL PIC16F84 Descrizione dei pin del PIC16F84 1. RA2 2. RA3 3. RA4 / RTCC è una linea di I/O programmabile in ingresso o in uscita. CORRISPONDE AL BIT 2 DELLA PORTA A. è una linea di I/O programmabile in ingresso o in uscita. CORRISPONDE AL BIT 3 DELLA PORTA A. è un pin multifunzione che può essere programm. Come normale linea di I/O oppure come linea di clock in ingresso verso il contatore TMR0 se programm. Come linea I/O corrisponde al bit 4 della porta A.Diversamente dalle altre linee di I/O,quando funziona come uscita ,lavora a collettore aperto. 4. MCLR/VPP 5. VSS 6. RB0 7. RB1 8. RB2 In condizioni di normale funzionamento svolge le funzioni di Master Clear ovvero di RESET ed è attivo a livello 0.Quando il PIC deve essere programmato viene usato come ingressso per la tensione di programmazione VPP. è il pin a cui va collegato il negativo della tensione di alimentazione (massa). è una linea di I/O programmabile in ingresso o uscita dall’utente.Corrisponde al BIT 0 DELLA PORTA B. è una linea di I/O programmabile in ingresso o uscita dall’utente.Corrisponde al BIT 1 DELLA PORTA B. è una linea di I/O programmabile in ingresso o uscita dall’utente.Corrisponde al BIT 2 DELLA PORTA B. 9. RB3 10. RB4 11. RB5 12. RB6 13. RB7 14. VDD è il terminale positivo dell’alimentazione (+5V) OSC2/CLKOUT è un pin di connessione nel caso 15. è una linea di I/O programmabile in ingresso o uscita dall’utente.Corrisponde al BIT 3 DELLA PORTA B. è una linea di I/O programmabile in ingresso o uscita dall’utente.Corrisponde al BIT 4 DELLA PORTA B. è una linea di I/O programmabile in ingresso o uscita dall’utente.Corrisponde al BIT 5 DELLA PORTA B. è una linea di I/O programmabile in ingresso o uscita dall’utente.Corrisponde al BIT 6 DELLA PORTA B. è una linea di I/O programmabile in ingresso o uscita dall’utente.Corrisponde al BIT 7 DELLA PORTA B. venga utilizzato un quarzo per generare il clock.E’ l’uscita del clock nel caso venga applicato un oscillatore RC o un oscill. Esterno. 16. OSC1/CLKIN 17. RA0 18. RA1 è un pin di connessione nel caso venga utilizzato un quarzo o un circuito RC per generare il clock.E’ l’ingresso del clock nel caso venga utilizzato un oscillatore esterno. è una linea di I/O programmabile in ingresso o uscita dall’utente.Corrisponde al BIT 0 DELLA PORTA A. è una linea di I/O programmabile in ingresso o uscita dall’utente.Corrisponde al BIT 1 DELLA PORTA A. ARCHITETTURA INTERNA DI UN PIC16F84 LA ALU La ALU ovvero unità aritmetica e logica è la componente più complessa del pic in quanto contiene tutta la circuteria che svolge le funzioni di calcolo. La ALU è presente in tutti i microprocessori e da essa dipende direttamente la potenza di calcolo. LA PROGRAM MEMORY E’ una memoria di tipo EEPROM,ed utilizzata dal pic per tenere memorizzato il programma da esguire. La sua capacità di memorizzazione è di 1024 locazioni ,ognuna in grado di contenere un opcode di 14 bit. Il programma più complesso che potremo realizzare non potrà essere più lungo di 1024 istruzioni. MEMORIA RAM DEL PIC16F84 Le prime 12 locazioni della pagina 0 (da 00H a 0BH) e della pagina 1 (da 80H a 8BH) sono riservate ai registri speciali usati per il funzionamento del pic e non possono essere usati per altri scopi. Le 68 locazioni in pagina 0 indirizzate da 0CH a 4FH possono essere utilizzate liberamente dai nostri programmi per memorizzare variabili,contatori,ecc.. MAPPATURA DELLA RAM DEL PIC16F84 -Registri con funzioni speciali-- 00h Indirect address indirect address 80h 01h TMR0 OPTION 81h 02H PCL PCL 82h 03h STATUS STATUS 83h 04h FSR FSR 84h 05h PORTA TRISA 85h 06h PORTB TRISB 86h 07h 87h 08h EEDATA EECON 88h 09h EEADR EECON 89h 0Ah PCLATH PCLATH 8Ah 0Bh INTCON INTCON 8Bh 0Ch REGISTRI DI USO MAPPATO IN PAG. 0 8Ch GENERALE 4Fh CFh 50h D0h 7Fh FFh Bank 0 Bank 1 IL REGISTER FILE E’ un insieme di locazioni di memoria RAM, ove è possibile leggere e modificare il contenuto, senza l’ausilio di programmatori esterni e direttamente dal programma in esecuzione sul PICmicro. L’ACCUMULATORE O REGISTRO W E’ direttamente connesso alla ALU. E’ una locazione di memoria ad 8 bit E’ utilizzato spessissimo nei programmi per PIC. Le porte A e B Il pic16F84 dispone di 13 linee di I/O organizzate in due porte denominate PORTA A e PORTA B. La porta A dispone di 5 linee configurabili sia in ingressi che in uscite,indicate con RA0,RA1,RA2,RA3 ed RA4. La porta B dispone di 8 linee configurabili sia come ingressi che come uscite,identificate con RB0,RB1,RB2,RB3,RB4,RB5,RB6 ed RB7. REGISTRI PER LA GESTIONE DELLE PORTE Per la gestione delle linee di I/O da programma,il pic dispone di due registri interni per ogni porta denominati TRISA e PORTA per la porta A e TRISB e PORTB per la porta B. I registri TRISA e TRISB,determinano il funzionamento in ingresso o in uscita di ogni singola linea,i registri PORTA e PORTB determinano lo stato delle linee in uscita o riportano lo stato delle linee in ingresso. Ognuno dei bit contenuti nei registri menzionati corrisponde univocamente ad una linea di I/O. Ad esempio il bit 0 del registro PORTA e del registro TRISA corrispondono alla linea RA0,il bit 1 alla linea RA1 e cosi via.Questi se posti a 1 configurano la linea corrispondente come ingresso,se posti a 0 configurano la corrispondente linea come uscita. Schema delle linee RA0,RA1,RA2 e RA3 Schema della linea RA4 Schema delle linee RB0,RB1,RB2,RB3 Schema delle linee RB4.RB5,RB6,RB7 LINGUAGGIO ASSEMBLER Ogni istruzione è rappresentata da un codice operativo (opcode) composto da 14 bit. Viene memorizzata in una locazione di memoria programma. Esempio di opcode: 00 0001 0000 0000 (rappr. Binaria) 0x100 (rappr. Esadec) Questi codici,privi di significato per un essere umano,sono gli unici che il pic è in grado di capire. Per convenzione si associa,ad ogni opcode,una breve sigla mnemonica che aiuta a ricordare la funzione svolta da ogni istruzione. L’opcode 0x100 di prima effettua l’azzeramento de registro W che in inglese viene indicato con la frase CLEAR W REGISTER,che abbreviata diventa CLRW Altre sigle mnemoniche definiscono tutte le istruzioni che il PICmicro è in grado di eseguire L’insieme di queste sigle e le regole per ordinarle per formare un programma completo viene chiamato LINGUAGGIO ASSEMBLER. 1. 2. Per scrivere un programma in assembler occorre: conoscere le istruzioni,per il pic che si vuole usare Disporre di un elaboratore di testo con cui scrivere il programma. Il file di testo ottenuto si chiama source o sorgente assember. L’ASSEMBLATORE E’ un programma che traduce il nostro sorgente assembler nella giusta sequenza di istruzioni in formato binario che il pic è in grado di capire. SCHEMA DI FLUSSO DELLE OPERAZIONI E DEI FILE GENERATI NECESSARI PER OTTENERE UN PICmicro PROGRAMMATO La prima operazione la scrittura del sorgente assembler e la sua memorizzazione in un file di testo con l’estensione .ASM Durante la compilazione ,l’assemblatore genera una serie di file con il nome identico al source,ma con estensione diversa. .HEX è il file contenente gli opcode da inserire all’interno del pic. .LST è un file di testo in cui è riportato l’intero source assembler e la corrispondente traduzione in opcode. .ERR contiene la lista degli errori di compilazione riscontrati ed il numero di linea all’interno del source assembler in cui sono stati rilevati. Primo programma in assembler PROCESSOR RADIX INCLUDE LED EQU 16F84 DEC “P16F84.INC” 0 ORG 0CH COUNT RES 2 ORG 00H Bsf STATUS,RP0 Movlw 00011111B Movwf TRISA Movlw B’11111110’ Movwf TRISB Bcf STATUS,RP0 Bsf PORTB,LED mainLoop Call Delay btfsc Goto bsf goto PORTB,LED setTozero PORTB,LED MainLoop SetTozero bcf PORTB,LED goto MainLoop Delay clrf Count clrf Count+1 DelayLoop decfsz Count,1 goto DelayLoop decfsz Count+1,1 goto DelayLoop retlw 0 END IL CONTATORE TMR0 ED IL PRESCALER Il registro TMR0 è un contatore. Esso viene incrementato ogni 4 cicli macchina. E’ programmabile direttamente dall’hardware del PIC. Raggiunto il valore max pari a 255 esso viene azzerato automaticamente. La frequenza di conteggio è direttamente proporzionale alla freq. del clock applicata al chip. Tale freq. può essere modificata programmando opportunatamente alcuni bit di configurazione. Catena di blocchi interni al pic che determinano il funzionamento del TMR0 DESCRIZIONE DEI VARI BLOCCHI blocchi FOSC/4 e TOCK1:sorgenti di segnale per il contatore. Fosc/4 è un segnale generato internamente al pic dal clock ed è pari alla freq. di clock divisa per 4. TOCK1 è segnale generato da un eventuale circuito estero ed applicato al pin TOCK1 (pin 3) del pic16F84. I blocchi TOCS e PSA sono 2 commutatori di segnale sulla cui uscita viene presentato uno dei due segnali d’ingresso in base al valore dei bit TOCS e PSA del registro OPTION. Il PRESCALER è un divisore di frequenza programmabile a 8 bit,si usa nel caso in cui la freq. di conteggio inviata al TMR0 sia troppo elevata. Configurando in modo opportuno i bit PS0,PS1 e PS2 del registro OPTION secondo la seguente tabella : CONFIGURAZIONE PRESCALER In base al valore dei bit TOCS e PSA del registro option si hanno le seguenti modalità di funzionamento :TOCS=1 E PSA=1 TOCS=0 E PSA=0 Funzionamento con prescaler TOCS=0 e PSA=0 Il bit TOSE La presenza della porta logica XOR,all’ingresso TOCK1 del pic,consente di determinare,tramite il bit TOSE del registro OPTION,se il contatore TMR0 deve essere incrementato in corrispondenza del fronte di discesa (TOSE=1) o del fronte di salita (TOSE=0) GLI INTERRUPT E’ un evento esterno,che interrompe momentaneamente il programma principale per eseguire una porzione di programma specializzata nella gestione dell’evento verificatosi e riprendere l’esecuzione del programma principale. TIPI DI EVENTO E BIT DI ABILITAZIONE Tipi di eventi: Cambiamento di stato sul pin RB0 Fine conteggio del registro TMR0 Cambiamento di stato sui pin da RB4 a RB7 Fine scrittura su una locazione EEPROM. Bit di abilitazione (registro INTCON): INTE (bit4):se viene messo a 1 viene abilitato l’interrupt del primo evento TOIE (bit5):se viene messo a 1 viene abilitato l’interrupt del secondo evento. RBIE(bit3):se viene messo a 1 viene abilitato il terzo evento. EEIE(bit6):se viene messo a 1 viene abilitato l’interrupt del quarto evento. NOTA BENE: ESISTE INOLTRE UN BIT DI ABILITAZIONE GENERALE DEGLI INTERRUPT CHE DEVE ESSERE MESSO A 1 ,OVVERO IL BIT GIE (GLOBAL INTERRUPT ENEBLE BIT) POSTO SUL BIT 7 DEL REGISTRO INTCON. INTERRUPT FLAGS Dato che qualunqe interrupt genera una chiamata alla locazione 04H,nel registro INTCON sono presenti dei flag che indicano quale è l’evento che ha generato l’interrupt,vediamoli: INTF(bit 1) se vale 1 l’interrupt è stato generato dal cambiamento di stato sul pin RB0 TOIF(bit 2) se vale 1 l’interrupt è stato generato al termine del conteggio del TMR0. RBIF(bit 0) se vale 1 l’interrupt è stato generato dal cambiamento di stato sui pin da RB4 a RB7. Se nessuno dei tre bit vale 1 allora l’interrupt è stato generato sul fine scrittura nella EEPROM. IL POWER DOWN MODE E’un particolare stato di funzionamento del PICmicro utilizzato per ridurre il consumo di corrente nei momenti in cui il pic non è utilizzato perché in attesa di un evento esterno. Per esempio un telecomando per apricancello o per TV rimane inattivo fino a quando qualcuno non preme un tasto.Appena premuto il tasto il pic effettua una breve trasmissione e poi si rimette di nuovo nello stato di attesa. Quindi l’effettivo utilizzo del pic è limitato a pochi ms. Per evitare di consumare inutilmente l’energia della pila è possibile spegnere buona parte dei circuiti interni al pic e riaccenderli solo in corrispondenza di un evento esterno. L’istruzione SLEEP Viene utilizzata per mettere il pic in power down mode e ridurre di conseguenza la corrente che passerà da circa 2 mA (a 5V con clock da 4MHz) a circa 2 uA,ovvero 1000 volte di meno! Per entrare in Power Down Mode basta inserire l’istruzione SLEEP in un punto qualsiasi del nostro programma. IL WATCH DOG TIMER (WDT) Il WDT è in pratica un oscillatore interno al pic ,ma completamente indipendente dal resto della circuiteria,il cui scopo è quello di rilevare eventuali blocchi della CPU del micro e resettare il pic per riprendere la normale esecuzione del programma. L’istruzione per attivare il WDT è CLRWDT (clear Watch Dog Timer),la quale azzera ad intervalli regolari il WDT non consentendogli di finire il conteggio.Se il pic non effettua tale istruzione prima del termine del conteggio allora si desume che il programma si sia bloccato per qualche motivo e si effettua il reset del pic. Scrittura e lettura dati da EEPROM Per accedere all EEprom vengono utilizzati i seguenti registri: EEAADR Serve ad indirizzare una delle 64 locazioni. EEDATA è il registro usato per inviare un byte alla EEPROM EECON 1 e EECON2 sono 2 registri di controllo usati nelle operazioni di scrittura e di lettura.