Home
Manuale pic 16f84 e 16f876
Contents
1. 2658 1 0 0 1 1 0 0 1 0 1 0 0 O 2216 s Con l allineamento sinistra il convertitore fornisce nel registro ADRESH direttamente il valore del dato corrispondente ad una conversione con convertitore ad 8 bit come mostrato nella tabella 9 7 In questo caso il valore di Nio calcolato con la relazione 10 Nio VIN 2 Vref ViN 256 5 0 Tab 9 7 DATO GIUSTIFICATO A SINISTRA N calcolato ADRESH acquisito ADRESL acquisito 3h 0101 0 als ES BS EE 13 6h 0 1 1 010 111 0 011 0 0 0 0 0 0 Li l 9h 1 0 0 1 110 0 1 011 0 0 0 0 0 0 9 9 lil Come si vede in questo caso non 6 utilizzato il contenuto di ADRESL 82 9 3 Tempo di acquisizione e di conversione Per ottenere la conversione completa di una tensione analogica posta su uno dei canali deve trascorrere un intervallo di tempo detto tempo di campionamento A D Sampling Time costituito dalla somma di un Tempo di Acquisizione Acquisition Time e un Tempo di Conversione A D Conversion Time Il tempo impiegato da convertitore per convertire un solo bit detto TaD Questo periodo di tempo non deve essere inferiore a 1 6 us Per la conversione completa dei 10 bit sono necessari 12 Il Tempo di Acquisizione il tempo d
2. La parola STACK significa catasta ed infatti su questa catasta possibile depositare uno sull altro pi denominata LIFO dall inglese Last In First Out in cui l ultimo elemento inserito last in deve necessariamente essere il primo ad uscire last out E spesso utilizzata quando si esegue una CALL ossia quando il programma salta ad un particolare indirizzo per eseguire una subroutine Terminata quest esecuzione si d il comando RETURN che preleva dallo STACK l indirizzo di ritorno ossia l indirizzo dell istruzione successiva alla CALL 2 5 REGISTER FILE indirizzi per recuperarli quando servono Questo tipo di memorizzazione viene anche RAD FAO R Ad EEPROM Program ory 1 x14 REGISTER FILE Start up Timer ory Watchdog timer EEPROM SC 20 KOLUT Il REGISTER FILE un insieme di locazioni di memoria ram denominate registri Contrariamente alla memoria EEPROM destinata a contenere il programma l area di memoria RAM direttamente visibile RAD RBO RAA Program Memory 1K x14 Start up Timer Watchdog timer EEPROM Data Mem OSC2 CLKOLT MCLR OSC1 CLKIN Vss dal programma stesso Quindi tranquillamente ogni locazione del REGISTER FILE nel nostro programma ogni volta che se ne presenti la necessit L unica limitazione consiste nel fatto che alcuni di ques
3. N o divisione impostato per il prescaler Per aumentare i periodi di temporizzazione si deve usare un contatore che viene decrementato ogni volta che viene attivata la routine d interrupt 27 5 SET DI ISTRUZIONI PER MICROCONTROLLORI PIC 16F84 e PIC16F876 I PIC 16 84 e 16F876 hanno un set 35 istruzioni di base A queste possono essere aggiunte una serie di 28 istruzioni speciali valide solo per alcune famiglie di controllori queste istruzioni si dividono in tre gruppi che sono e Byte oriented e Bit oriented e Literal and control Byte oriented questo gruppo d istruzioni opera su un registro di 8 bit quindi tutte le operazioni fatte vanno a modificare il contenuto di un registro Bit oriented questo gruppo comprende 4 istruzioni che operano su un singolo bit di un registro Literal and control questo gruppo d istruzioni opera su una costante di 8 bit questa costante literal va a modificare un registro in base all operazione che si deve eseguire Questi gruppi d istruzione hanno in aggiunta una serie di parametri elencati in tabella 5 1 Tab 5 1 Indirizzo del file register Destinazione d O risultato in W dz 1 risultato nel file register Campo letterale costante etichetta b Ordine del bit da 7 MSB a0 LSB f Questo parametro rappresenta un registro un registro pu essere personalizzato in modo da facilitare l utente poich al registro possiamo dare un nome qualunque penser
4. Analisi 1 Il programma ha bisogno di una variabile per contare fino a 10 2 Il programma deve eseguire un ciclo in modo da poter incrementare la variabile Diagramma a blocchi Inizio Con questo blocco si indica l inizio del programma Con questo blocco si crea la variabile A e le si attribuisce il valore O 1 Questo blocco incrementa A di uno salva il nuovo valore in A Con questo blocco si effettua una scelta se A uguale a 10 allora esce dal ciclo se esegue l istruzione che che la precede fino a che non si verifica la situazione Con questo blocco si indica la fine del programma Scrittura del programma In questa fase non si fa altro che tradurre lo schema a blocchi nel linguaggio di programmazione in cui si scrive C C Assembler Basic Pascal ecc Compilazione Questa fase solitamente non influenzabile dall utente poich il programma stesso che esegue questa operazione che traduce il programma scritto in Alto Livello linguaggio umano in linguaggio macchina ovvero un linguaggio a Basso Livello comprensibile all elaboratore 56 6 2 Strutture basi di programmazioni A prescindere dal linguaggio che si utilizza vi sono strutture canoniche che si devono conoscere quali I ciclo loop controllo in testa in coda e scelta vero falso 6 2 1 Il ciclo o loop controllo in testa o in coda e scelta vero o falso Queste strutture sono fondamentali perch i cicli e le scelte
5. Bit 4 2 REGISTRO EECON1 Il registro EECONI un registro di controllo usato nelle operazioni di lettura e scrittura sulla memoria EEPROM DATI Esso contiene una serie di flag con cui possibile controllare ogni singola operazione effettuata sull EEPROM dati La disposizione dei flag la seguente LI U H W D R X RW 0 5 0 5 T Tee weern ween wa bit bito La funzione svolta da ogni singolo f ag descritta nella tabella 1 4 zi Si a N Posizione Flag Bit 7 5 EEIF EEPROM Write Operation Interrupt Flag bit Questo flag indica se la scrittura su EEPROM stata completata dall hardware del PIC e se l interrupt stato generato per questo motivo 1 Operazione completata Operazione di scrittura non completata oppure non iniziata Una volta generato l interrupt questo flag deve essere resettato via software altrimenti la circuiteria interna del PIC non sar pi in grado di generare interrupt al termine delle successive scritture Bit 4 WRERR EEPROM Error Flag bit Questo flag indica se l operazione di scrittura stata interrotta prematuramente a causa ad esempio di un reset del PIC o un reset dal Watch Dog Timer 1 Operazione di scrittura interrotta prematuramente Operazione di scrittura completata correttamente WREN EEPROM Write Enable bit Questo flag abilita le successive operazioni di scrittura su una cella EEPROM Deve essere messo a uno prima di iniziare qualsi
6. W e Dp 4 0 o in 4 1 SUBDCF fd Sottrai con 1l digit carry e pone 1l risultato in W 4 0 o in f 4 1 Testa 1 file register f TRIS f Pone contenuto di W nel registro di configura zione delle porte Per poter scrivere programmi in assembler per i microcontrollori della MICROCHIP possibile utilizzare l ambiente grafico di sviluppo MPLAB il quale fornito da un editore di testo un assemblatore MPASM un debugger ed un simulatore Le istruzioni riconosciute dall assemblatore MPASM sono strutturate nel seguente modo Mnemonico Opernandi Se nelle istruzioni ci sono 2 operandi essi vengono separati da una virgola Le istruzioni sono dei mnemonici che utilizzano le lettere dell alfabeto ed illustrano sinteticamente il tipo di istruzione che deve essere svolta nella maggior parte dei casi indicano anche il registro con cui si operare un file register l accumulatore o entrambi L accumulatore individuato dalla lettera W 31 Vediamo le singole istruzioni in dettaglio ADDLW ADD L W Somma la costante k a W Sintassi addlw Operazione equivalente W W k Descrizione Somma la costante k al valore memorizzato nell accumulatore W e mette il risultato nell accumulatore Esempio org start 10 addlw 12 Dopo aver eseguito questo programma l accumulatore W varr 22 Note Questa istruzione influenza i bit Z DC e C del registro STATUS
7. e Zvalelseilrisultato dell operazione vale e DC vale 1 se il risultato dell operazione un numero superiore a 15 e Cvale1se il risultato positivo ovvero se il bit 7 del registro contenente il risultato vale Oe1se il risultato negativo ovvero se il bit 7 del registro contenente il risultato vale 1 ADDWF ADD W F Somma il valore contenuto in W con il valore contenuto nel registro F Sintassi addwf Operazione equivalente d W f dove d pu essere Wo f Descrizione Questa istruzione somma il valore contenuto nell accumulatore W con il valore contenuto nel registro indirizzato dal parametro f Il parametro d un flag che indica su quale registro deve essere memorizzato il risultato 32 Vediamo un esempio di somma tra due registri addi equ OCH add2 org OOH movlw 10 Primo addendo 10 movwf addi movlw 15 Secondo addendo 15 movwf add2 movf addi W 1 addwf add2 W add2 Note Questa istruzione influenza i bit Z DC e C del registro STATUS e Zvoaleiseil risultato dell operazione vale e DCvale 1 se il risultato dell operazione un numero superiore a 15 e C vale 1 se il risultato positivo ovvero se il bit 7 del registro contenente il risultato vale O e 1 se il risultato amp negativo ovvero se il bit 7 del registro contenente il risultato vale 1 ANDLW AND L W Effettua l AND tra W ed una costante k Sintassi andlw
8. 57 La scelta vero falso Questa struttura esegue una scelta e in base al risultato vero falso esegue una operazione anzich un altra Ingresso Operazione 1 Operazione 2 Uscita 6 3 Linguaggio assembler Il PIC 16F84 un vero e proprio piccolo computer dotato di una CPU una RAM una ROM e una memoria programma il suo linguaggio di programmazione l assembler Questo linguaggio a basso livello quindi molto complicato e poco elastico perci per poter eseguire anche solo una semplice operazione come dare un valore a una variabile bisogna usare due istruzioni Per programmare il PIC non basta conoscere il set d istruzioni ma bisogna saper usare anche le direttive quest ultime non vengono eseguite durante il programma ma servono al programma compilatore per creare il file hex 1 Il source Per creare un programma bisogna seguire due fasi la prima la scrittura del source e la seconda la compilazione Per creare quindi un listato bisogna generare un file txt questo file pu essere generato da Notepad all interno del quale si scriver il programma e solo in seguito lo si trasformer in un file hex Le direttive Come si gi detto per programmare il PIC bisogna prima impostare le direttive Queste vanno scritte all inizio del listato e definiscono il tipo d integrato le variabili le costanti e il tipo clock direttiva opzionale PROCESSOR 16F84 Questa direttiva definisce il ti
9. Bisogna ora scrivere il file sorgente rispettando le regole dell assemblatore Si utilizzi il comando F e e poi nel menu a tendina il comando New Si apre la finestra dell editore su cui va scritto il programma Se la finestra di formato ridotto allargarla usando il quadratino L in alto a destra Menu File Si editi per esempio il seguente programma rispettando gli incolonnamenti si pu usare a tale proposito il tasto TAB della tastiera per un pi facile allineamento del testo Per comodit il listato del programma qui riportato portA EQU 5 sndirizzo porta A port B EQU indirizzo ORG 0 Inizio MOVLW FFh dato di configurazione della porta TRIS port B porta B tutti d ingresso MOVLW DOh dato di configurazione della porta TRIS port porta A tutti d uscita ancora MOVF port B legge porta suo contenuto m accumulatore MOVWF port contenuto dell accumulatore sulla porta GOTO ancora END Si effettui il salvataggio del programma con File gt Save As attribuendo ad esso il nome edasm Dal menu Project si faccia clic su edit Project si riapre di nuovo la finestra di Edit Project mostrata in figura Fare clic su ed hex nel riquadro Project File e poi premere il pulsante Node Properties Nella 64 finestra che i apre accettarsi che nel riquadro Language Tool ci sia scritto MPASM e dare OK Si torna alla finestra Edit Project Fare clic sul pulsante
10. In questo source il programma principale esegue un loop infinito Se abilitiamo uno degli interrupt del 16C84 non appena esso si verificher il controllo verr dato automaticamente al programma allocato dall indirizzo 04H nell esempio intHandler l istruzione RETFI determiner quindi il ritorno al loop principale Note Questa istruzione non influenza alcun bit di stato RETURN RETURN Ritorna da una subroutine Sintassi return Descrizione Questa istruzione deve essere inserita al termine di ogni subroutine per riprendere l esecuzione del programma principale Esempio org OOH call mySub1 mySubl nop return Note Nel PIC16F84 possono essere annidate fino ad 8 chiamate a subroutine del tipo org OOH call mySub1 mySubl call mySub2 return mySub2 call mySub3 return mySub3 return RLF R eft Ruota a sinistra il contenuto del registro f passando per il Carry Sintassi rlf f d Operazione equivalente d f 1 dove d pu essere W o f Descrizione Ruota i bit contenuti nel registro all indirizzo f verso sinistra ovvero dai bit meno significativi verso quelli pi significativi passando per il bit CARRY del registro STATUS come illustrato in figura lc 7 03 Dole Registro f Il contenuto del bit CARRY del registro status viene spostato nel bit DO mentre il valore in uscita dal bit D7 viene spostato nel CARRY Il valore del parametro d determina la destinazione del risultato ottenuto al termine
11. apiure PH FM Y 1M3 IM2 IMI 1M0 byte basso del registro del modulo 2 CCP Capture Compare P WM J CCPR2H byte alto del registro del modulo 2 43 Capture Compare PWM CCPICON CCP2Y CCP2M2 CCP2MI 2 ADRESH byte alto del risultato da convertitore A D ADCONO IFh ADCSI DESO CHS2 CHSI CHSO GA ADON DONE BANK 1 OPTION RBPU TOSE TRSA 85h 2 i USC ORTA PEI sc ADE RCE TXE SSPIE jm pp ee scu 1 cme 8E __ POR BOR registro eriodo del TIMER 2 ADRESL mem byte basso del risultato del con vertitore A D ADCONI PCFG3 PCFG2 PCFGI PCFGO BANK 2 EEDATA registro dei dati della EEPROM EEADR registro degli indirizzi della EEPROM EEDATH parte alta registro dati della EEPROM EEADRH arte alta registro indirizzi della EEPROM BANK 3 EECONI EEPGD WREN 75 STATUS ms ma ms mo mo mr mm Rm _ m z nc ur 51 indirizzamento indiretto 0 1 1 une ES Selezionano 1banchi 0 0 banco 0 0 1 banco 1 1 0 banco 2 1 1 banco 3 posto a zero quando il Watchdog Timer va in Time out gt posto a zero quando viene eseguita un istruzione di SLEEP bit 2 di zero posto a uno se risultato di un operazione logica o ari
12. o con F9 Il programma si avvia e si arresta in corrispondenza del primo break point accendi Osservare il file register PORTA il bit corrispondente alla linea RAO quello meno significativo deve essere passato da 0 ad 1 Riavviare l esecuzione del programma con Debug gt Run gt Run o con F9 Il programma si riavvia e si arresta in corrispondenza del secondo break point spegni Osservare il f e register PORTA il bit corrispondente alla linea RAO quello meno significativo deve essere passato da 1 ad Se si continua a riavviare il programma si hanno variazioni di livello tra O e 1 della linea RAO programma funziona correttamente Arrestare l esecuzione con Debug Run gt Halt con F5 Rimuovere tutti i break point con Debug gt Break Settings gt Remove All 71 8 Il Microcontrollore PIC 16F876 8 1 Introduzione Il 16F876 amp un microcontrollore con memoria di programma di tipo flash che risulta particolarmente indicato per la messa a punto e la prova di programmi che fanno uso di dispositivi periferici non implementati nel PIC 16F84 Sono integrati infatti nel chip i seguenti moduli periferici e 1 convertitore Analogico Digitale a 10bit con 5 canali d ingresso e 3 timer e 2 moduli Capture Compare PWM e porte seriali sincrone ed asincrone Rimangono valide per il 16F876 le regole di programmazione ed i codici gi esposti precedentemente per il PIC 16F84 Si presuppone che il lettore abbia gi ac
13. parmi equ OCH loop org OOH movlw 11111110B Valore iniziale movwf parmi btfsc parmi0 DO O Si esce goto loop esegue il loop Questa programma esegue un loop infinito lo stesso programma non esegue il loop se sostituiamo l istruzione movlw 11111110B Valore iniziale con l istruzione movlw 111111118 Valore iniziale Note Questa istruzione non influenza alcun bit di stato BTFSS BT FS 5 Salta l istruzione successiva se un bit nel registro F vale 1 Sintassi btfss f b Operazione equivalente f b 1 Si salta una istruzione Descrizione Testa il bit b contenuto nel registro all indirizzo f e salta l istruzione successiva se questo vale 1 Esempio parmi equ 36 org movlw 11111110B Valore iniziale movwf parmi loop btfss parmi 0 DO 1 Si esce goto loop No esegue il loop Se invece del valore 11111110b si caricava un il valore 11111111b l istruzione btfss avrebbe generato un loop Note Questa istruzione non influenza alcun bit di stato CALL CALL Chiamata a subroutine Sintassi call k Descrizione Richiama in esecuzione una subroutine memorizzata all indirizzo k Il parametro pu essere specificato utilizzando direttamente il valore numerico dell indirizzo oppure la relativa label Esempio call ledOn Subroutine di accensione di un led ledOn bsf PORTB LED1 return Quando la CPU del PIC incontra una istruzione CALL memorizza ne
14. poi il programma in fase di compilazione a dare un vero indirizzo al registro W Questo registro un accumulatore che usa il PIC per memorizzarci un dato temporaneo d Questo parametro pu assumere solo i valori O 1 e indica dove il dato verr salvato se d 1 allora il dato verr salvato nel registro f se d O il dato verr salvato nel registro w b Questo parametro definisce il bit su cui deve essere portata a termine l operazione poich i bit di un registro sono 8 il valore di b varia tra O e 7 Questo dato una costante di 8 bit e lavora solo con le istruzioni del terzo gruppo Nella tabella 6 3 amp elencato il set completo delle istruzioni suddiviso in quattro categorie e Operazioni orientate al byte con i file register e Operazioni orientate al bit con i file register e Operazioni di controllo e con letterali e Operazioni speciali Per ciascuna istruzione sono riportati anche i flag influenzati durante l esecuzione dell istruzione stessa Tabella 5 2 Tab 5 2 Flag modificato Z Flag di zero Flag di carry Digit carry Half flag 28 Tab 5 3 OPERAZIONI ORIENTATE AL BYTE CON I FILE REGISTER FLA anm i ADDWE f d Somma f e pone il risultato in d 0 o in 4 1 AND tra Y e f e pone il risultato W d 0 o in f 4 1 E Azzera l accumulatore W FIN HN JM Complementa fe pone il risultato in W d 0 o in d 1
15. significativo INTCON INDIRIZZO are PEIE Jj j Valore del prescaler ll gt 1 8 10 1 4 012o1 2 002 1 1 1 abilitato oscillatore esterno 0 oscillatore esterno non abilitato 1 segnale esterno non sincronizzato 0 segnale esterno sincronizzato 1 clock esterno da 0 clock interno fosc 4 I TIMERI abilitato abilitato interrupt di TMRI 0 disabilitato interrupt di TMR 96 10 3 TIMER2 Il TMR2 un timer con registro ad 8 bit Ad esso associato il registro di periodo PR2 a 8 bit Il clock d ingresso di TMR2 quello di sistema diviso per quattro fosc 4 che passa prima di raggiungere il timer per un prescaler con possibilit di divisione della frequenza 1 1 1 2 o 1 16 Il contenuto di TMR2 viene quindi incrementato a partire dal valore caricato in esso con una frequenza stabilita dal clock di sistema e dal prescaler il valore del registro viene confrontato in continuazion con il valore contenuto in PR2 per mezzo di un comparatore Quando il contenuto dei due registri diviene uguale l uscita del comparatore attraverso un postscaler con fattori di divisione da 1 1 a 1 16 pone ad uno il bit di intrrupt per TMR2 TMR21F Se abilitato quindi viene generato un interrupt Il segnale d uscita del 2 pu essere utilizzato anche come clock per la porta seriale sincrona Nella tabella 10 3 riportata la configurazione del registro INTCON per il controllo degli interrupt evidenziando i soli
16. tra 2 6 Ve VSS viene collegato a massa RAO RA4 Sono 5 linee della PORTA ogni linea pu essere programmata in modo indipendente dalle altre come input o output Quando vengono programmate in uscita effettuano il atch del dato posto in uscita La linea RA4 pu essere utilizzata anche come ingresso del clock esterno per il timer TMRO In pi la linea RA4 programmata come ingresso del tipo trigger di Schmitt invece programmata come uscita di tipo open drain questa ultima configurazione richiede un resistore di pull up esterno RBO RB7 Sono 8 linee della anche queste linee possono essere configurate indipendente come input output quando vengono programmate come uscita effettuano il atch del dato posto in uscita La linea RBO utilizzata anche come ingresso per segnali d interrupt esterni Programmando le linee RB4 RB7 come ingressi possono generare un interrupt quando cambia lo stato del segnale presente su una o pi linee MCLR VPP Linea di reset attiva al livello basso Normalmente posta ad un livello alto collegandola con un resistore di pu up a VDD La linea MCLR utilizzata anche per la tensione di programmazione seriale OSC1 CLKIN OSC2 CLKOUT Il PIC 16F84A a differenza del 16 84 pu operare ad una frequenza fino i 20 MHz 2 Struttura Interna del microcontrollore 16 84 Come possiamo notare dallo schema riportato pi sotto il Microcontrollore si distingue dal microprocess
17. vedi tabella precedente si seleziona l abbinamento dei canali analogici con gli ingressi digitali RAO RA5 la sorgente della tensione di riferimento e la modalit di salvataggio del risultato della conversazione nei registri ADRESH e ADRESL Nell esempio illustrato nella tabella 9 1 il canale ANO 6 collegato con del registro ADRESL in cui viene posto il risultato sono posti a zero Si ricordi che il risultato della conversione a 10 bit mentre i due registri contengono complessivamente 16 bit Tab 9 1 ADCONI ae une ua iz o s fo fe fa fi fi 3 ps 9 1 bit meno significativi di ADRESL ANO Vier 0 V np Il codice per eseguire l inizializzazione del registro ADCONI il seguente movlw in W codice selezione Vaer e canale ANO allineam sinistra movwf ADCONI il codice nel registro ADCONI banco 1 2 Con il registro ADCONO vedere tabella precedente si seleziona il clock di conversione bit 7 e bit 6 il canale analogico per la conversione bit 5 bit 3 e si pone in ON il convertitore A D bit 0 Nell esempio riportato nella tabella 9 2 per il clock si usa fosc 8 si seleziona il canale ANO e si pone a uno il bit per abilitare il convertitore Tab 9 2 ADCONO hi ws fs o o o o o 91911 m Fosc 8 Canale ANO IEEE T 78 Il codice per eseguire l inizializzazione del registro ADCONO il
18. Decrementa f e pone 1l risultato in d 0 o in d 1 DECFSZ Decrementa fe pone il risultato in W d 0 o in 1 salta l istruzione successiva se 1l risultato dell operazione zero INCF Incrementa f e pone il risultato in W d 0 o in d 1 INCFSZ Incrementa e pone 1 risultato in W d 0 o in 1 salta l istruzione successiva se 1l risultato dell operazione zero f f d MOVE sposta fin H 0 oin d 1 Ruota a sinistra attraverso 1 carry il contenuto di f e pone il sultato in W d 0 o nf d 1 Ruota a destra attraverso 1l carry il contenuto di f e pone 1l r1 sultato in W d 0 o in d 1 SUBWF f d sottrae W e fe pone il risultato in W d 0 o in d 1 SWAPF fd Scambia1 semi byte nibble di f e pone 1 risultato in W d 0 o in f 4 1 XORWF fd EXOR tra W efe pone il risultato in 4 0 4 1 OPERAZIONI ORIENTATE AL BIT CON I FILE REGISTER Azzera il bit b di f b 0 7 Pone a uno il bit b di f b 07 fb Testa il bit b di fe salta l istruzione successiva se esso zero Testa il bit b di f e salta l istruzione successiva se esso uno 29 Tab 5 3 OPERAZIONI DI CONTROLLO E CON LETTERALI Somma 1l valore amp all accumulatore H Fai la AND tra l accumulatore W e il valore k Chiama la subroutine all indirizzo k Azzera 1 Watchdog Salta all mdirizzo X Fai la EX NOR tra l accumulator
19. Operazione equivalente W W AND k Descrizione Effettua l AND tra il valore contenuto nell accumulatore W ed il valore costante k risultato viene memorizzato nell accumulatore Esempio start movlw 10101010 andlw 11110000B Dopo aver eseguito questo programma l accumulatore W varr 10100000B Note Questa istruzione influenza il bit Z del registro STATUS e Z vale 1 seil risultato dell operazione vale 33 ANDWF AND W F Effettua l AND logico tra il valore contenuto W ed il valore contenuto Sintassi andwf f d Operazione equivalente d W AND f dove d pu essere W o f Descrizione Questa istruzione effettua AND logico tra il valore contenuto nell accumulatore W ed il valore contenuto nel registro indirizzato dal parametro f Il parametro d un flag che indica su quale registro deve essere memorizzato il risultato Per d Wil risultato viene memorizzato nel registro W Per d F il risultato viene memorizzato nel registro f Esempio Spesso l AND logico viene utilizzato per mascherare il valore di alcuni bit all interno di un registro Se ad esempio volessimo estrarre dal numero binario 01010101B i quattro bit meno significativi al fine di ottenere il seguente valore 00000101B baster preparare una maschera del tipo 00001111B e farne con il nostro valore di partenza vediamo come movlw 01010101B Memorizza nel registro movwf OCH all indirizzo OCH il valore iniziale d
20. RAWN 1 RAN 1 RIW 1 RAW 1 RAN 1 RAN 1 1 bit 7 bit O PSI Rapporto di divisione del Prescaer Ps2 Rapporto di divisione del Prescaler Se il valore di questo bit a O il prescaler assegnato al TMRO se 1 PSA assegnato al WDT rose 5 posto a 0 l incremento avviene sul fronte di salita se 1 sul fronte di discesa Modalit del Timer Se posto a 0 usato il timer interno f Frequenza clock 4 D5 TOCS Se posto a 1 il contatore incrementa sul fronte di salita discesa del pin RA4 Inted Se posto a 1 il conteggio avviene su commutazione sul fronte di salita di 9 linea di interrupt se invece posto a O avviene sul fronte di discesa Abilita il Pull Up della Porta B 07 RPBU 1 IPull Up della Porta B sono disabilitati E Pull Up sono abilitati dai valori configurati Il segnale di clock che pilota il timer pu essere selezionato tra un segnale esterno con ingresso sul pin RA4 TOCKT e l oscillatore interno Nel caso venga scelto l oscillatore interno sul timer viene applicato un segnale con frequenza pari ad un quarto di quella generata dall oscillatore fosc 4 Se per esempio utilizzato un quarzo da 4MHz la frequenza di eccitazione dell oscillatore sar di 1 MHz E possibile far variare la frequenza del segnale di clock applicato al timer inserendo un prescaler divisore di frequenza con valore di divisione selezionabile via software Il timer genera un int
21. Seguente movlw 41h in W codice per frequenza canale ANO e A D ON movwf ADCONO sposta il codice nel registro ADCONO banco 0 3 si aspetta che trascorra il tempo di acquisizione tempo impiegato dal condensatore di holding per caricarsi al valore del segnale d ingresso Come valore risulta circa 20 s 4 si avvia la conversione ponendo ad uno il bit 2 GO DONE di ADCONO bsf ADCONO 2 pone ad uno il bit 2 di ADCONO e avvia la conve rsione 5 si controlla il termine della conversione verificando il bit 2 di ADCONO GO DONE quando diviene zero la conversione terminata loop btfsec ADCONO 2 del bit2 di ADCON se O salta l istruz su ccessiva cota loop se bit 2 1 esegui un nuovo controllo 6 si legge il dato convertito nei registri ADRESSH gli 8 bit pi significativi ADRESL i 2 bit meno significativi Con l allineamento a sinistra il risultato della conversione cos rappresentato GI Risultato della conversione 10 bit IO movf adresh 1 carica in accumulatore la parte alta del risultato conve rsione movwf 20h salva in memoria la parte alta del risultato movf adresl 1 carica in accumulatore la parte bassa del risultato conve rsione movwf 21h salva in memoria la parte bassa del risultato Il programma completo deve tenere conto anche del cambio di banco per accedere al registro ADCONI deve poi selezionare nel registro TRISA come ing
22. aggiungere 8 locazioni riservate allo stack nei quali vengono memorizzati gli indirizzi di ritorno della subroutine Quando avviamo il dispositivo il Program Counter punta alla locazione con indirizzo 000h locazione di reset questa locazione contiene sempre il primo codice del programma La locazione con indirizzo 004h utilizzata come interupt vector ovvero se viene attivato l interupt questo registro punta alla routine dell interupt 10 2 3 2 Memoria Dati e EEPROM ha una estensione di 64 locazioni di un byte ciascuno con indirizzamento 00h 3Fh e RAM suddivisa in 2 banchi con un estensione di 47 locazioni di un byte ciascuna con indirizzamento 00h 3Fh per il primo banco banco 0 e 80h 8Bh per il secondo banco banco 1 Di queste locazioni alcune sono riservate ai registri speciali con esattezza quelle con indirizzo 00h OBh sono riservate per il banco O quelle con indirizzo 80h 80Bh le rimanenti vengono usate per registri di uso generale disponibile per il programmatore sono 68 locazioni di 1 byte ciascuna con indirizzamento OCh 4Fh Tab 11 MEMORIA MAPPA PROGRAMMA FILE REGISTER EEPROM RAM DATI VETTORE DI RESET 000h Lo VETTORE DI INTERRUPT 004h 005h EEPROM PROGRAMMA UTENTE TABELLA SINTETIZZATA Tab 1 2 MEMORIA EEPROM PER IL PROGRAMMA 00h 3FFh MEMORIA PER I DATI EEPROM registri funzioni speciali 00h 3Fh ER registri uso generale 0Ch 2Fh 2 4 STACK 11
23. del file hex nel microcontrollore Per fare ci si dovr utilizzare un appropriato softawre di programmazione 6 4 3 Software per programmare il PIC Introduzione Il software per la programmazione del PIC non fa altro che gestire la porta COM questi programmi si trovano disponibile in versione freeware in rete Questi programmi sia che lavorino in ambiente Dos o in ambiente Window hanno le stesse opzioni si consiglia l uso del programmatore Icprog reperibile in rete Questo programma in dotazione al sistema MC 16 in versione italiana molto intuitivo e di facile applicazione Prima di procedere collegare il Sistema MC 16 al PC tramite il cavo R232 e commutare il deviatore S7 nella posizione PROGRAMMAZIONE Impostazioni di Icprog Avviato il programma e richiamato il file hex comparir la seguente videata Prima di poter programmare un PIC bisogna impostare la porta di comunicazione ed alcuni parametri importanti Per impostare la porta bisogna cliccare su settaggi IC Prog 1 03B Programmatore Prototipo C VWINDOWS Desktop Esempio hex File Modifica Buffer Settaggi Comandi Strumenti Visualizza Aiuto 2 pp Chip c sf W Iu PIC 16F84 Hardware 1683 01 Controllo Hardware 0008 30FF 00 Opzioni 0010 080 00 SmartCard Phoenix 0018 2613 14 0B92 281A 0020 28 080C 0098 GE m 0028 080 009A 1006 0B96 282 300C 0096 0 98 5 Una volta selezionato Hadware si apr
24. della rotazione Per d Wil risultato viene memorizzato nel registro W lasciando il registro f invariato Per d F il risultato viene memorizzato nello stesso registro f Esempio parmi equ org clrf C STATUS Azzera il CARRY movlw 01010101B Valore iniziale movwf parmi rif parmi F Al termine del programma il registro parmi varr 10101010B mentre il CARRY varr Note Questa istruzione non influenza nessun altro bit di stato oltre al CARRY 48 RRF R R F Ruota a destra il contenuto del registro f passando per il Carry Sintassi rrf f d Operazione equivalente f gt gt 1 dove d pu essere W o f Descrizione Ruota i bit contenuti nel registro all indirizzo f verso destra ovvero dai bit pi significativi verso quelli meno significativi passando per il bit CARRY del registro STATUS come illustrato in figura 3 D2 D1 DO Registro f Il contenuto del bit CARRY del registro status viene spostato nel bit D7 mentre il valore in uscita dal bit DO viene spostato nel CARRY Il valore del parametro d determina la destinazione del risultato ottenuto al termine della rotazione Perd Wil risultato viene memorizzato nel registro W lasciando il registro f invariato Per d F il risultato viene memorizzato nello stesso registro f Esempio parmi equ org OOH C STATUS Azzera il CARRY movlw 01010101B Valore iniziale movwf parmi rrf 1 termine del p
25. interna del microcontrollore provveder a porre il dato nel giusto banco di memoria banco 1 all indirizzo 85h Dopo aver configurato la porta A come nell esempio precedente per porre a livello alto tutte le linee configurate come uscite si deve inviare sulla porta A la configurazione 00000110b 14 MOVLW 000001105 carica in accumulatore la configurazione 000001106 MOVWF 05h isposta il contenuto dell accumulatore nel file register della porta In questo modo le linee RA1 e RA2 assumono un livello alto La Microchip per meglio adattare i dispositivi alle esigenze del pubblico ha differenziato gli stadi d uscita di alcuni pin di I O Difatti i pin da 240a RAF avranno uno stadio d uscita che corrisponde al primo schema riportato sotto Il pin 244 diverso dagli altri in quanto quando la linea 244 programmata in uscita e messa a 1 in realt non connessa al positivo ma rimane scollegata Tale tipo di circuiteria d uscita denominata a collettore aperto e se vogliamo essere sicuri che la linea RA4 vada a 1 dovremo collegare esternamente una resistenza di pu up ovvero una resistenza collegata al positivo di alimentazione Lo stadio d uscita del 244 visibile nel secondo schema Data bus DD Fart PO PS VE gt Ck gd Data Latch 40 pin DI 3 ANE vss TRIS input buffer L1 n D oh E a B Schmitt Trigger input buffer 16 RD TR
26. linee della porta A e delle porta B oppure in essi vengono posti i dat che provengono dall esterno in base alla configurazione assegnata alle _ singole linee delle porte con i registri 754 e TRISB Ad esempio il bit O del registro PORTA e del registro TRISA corrispondono alla linea RAO il bit 1 alla linea RAI V V e cosi via OSC2 CLKOUT MCLR Se il bit O del registro TRISA messo a zero la linea _ RAO sar configurata come linea in uscita quindi il valore a cui sar messo il bit 0 del registro PORTA determiner lo stato logico di tale linea O 0 volt 1 5 volt Se il bit O del registro TRISA messo a 1 la linea RAO sar configurata come linea in ingresso quindi lo stato logico in cui sar posta dalla circuiteria esterna la linea RAO si rifletter sullo stato del bit del registro PORTA EEPROM STACK Program Memory x14 REGISTER FILE ALU EEPROM Data ary 4 8 TOCKI TIMERO Start up Timer EX i Timing Generation Facciamo un esempio TRISA IN IN OUT OUT IN X xX xX 1 0 0 1 d Ra MOVLW 00011001b carica nell accumulatore W la configurazione 00011001b TRIS o5h carica nel registro TRISA il contenuto dell accumulatore Notiamo come il dato di configurazione deve essere posto prima nell accumulatore e poi spostato nel registro TRISA L istruzione TRIS utilizza l indirizzo 05h quello della porta A e non 85h la logica
27. ovvero unit aritmetica e logica 6 la componente pi complessa del PIC in quanto contiene tutta la circuiteria delegata a svolgere le funzioni di calcolo ai manipolazione dei dati durante l esecuzione di un programma L ALU una componente presente in tutti i microcontrollore e da essa dipende direttamente la potenza di calcolo del microcontrollore stesso aan L ALU del PIC16F84 in grado di operare su valori ad TK x14 8 bit ovvero valori numerici non pi grandi di 255 Esistono microprocessori con ALU a 16 32 64 bit e oltre La famiglia Intel 80386 486 e Pentium ad EEPROM dispone di a 32 bit Le potenze di EEPROM en calcolo raggiunte da questi processori sono E notevolmente superiori a scapito della complessit 64 x B Watch dog timer IX 0501 dela circuiteria interna accessoria conseguentemente dello spazio occupato 2 3 MEMORIA La memoria del microcontrollore PIC si divide in 2 tipi memoria programma e memoria dati 2 3 1 Memoria Programma La memoria programma di tipo EEPROM cancellabile elettricamente tramite un programmatore idoneo e quindi pu essere riscritta Ha una estensione di 1024 locazioni a 14 bit i codici relativi alle istruzioni sono lunghi proprio 14 bit Le locazioni sono distinte da un indirizzo normalmente espresso in esadecimale parte da 000h fino ad arrivare a 3FFh A queste locazioni di memoria si devono
28. parametro f Il parametro d un flag che indica su quale registro deve essere memorizzato il risultato Esempio Analizziamo un esempio estratto dal datasheet della Microchip Se inseriamo l istruzione subwf REG1 F Dove REG1 l indirizzo di un qualsiasi registro specificato con la direttiva REG1 RES 1 Per valori iniziali di REG1 3 e 2 dopo l esecuzione avremo REG1 1 e C 1 in quanto il risultato positivo Per valori iniziali di REG1 2 e Wz2 dopo l esecuzione avremo 1 0 e 1 perch il risultato Sempre positivo Per valori iniziali di REG1 1 e W 2 avremo REG1 FFH ovvero 1 quindi perch il risultato negativo Note Questa istruzione influenza i bit Z DC e C del registro STATUS e 2 vale 1 se il risultato dell operazione vale e Cvaleise il risultato positivo ovvero se il bit 7 del registro contenente il risultato vale 0 e 1 se il risultato negativo ovvero se il bit 7 del registro contenente il risultato vale 1 51 TRIS TRIS Assegna il valore in W al registro TRIS Sintassi tris f Operazione equivalente TRIS di f W Descrizione Questa istruzione memorizza in uno dei registri speciale TRIS il valore contenuto nell accumulatore W I registri TRIS determinano il funzionamento in ingresso e uscita delle linea di I O del PIC Esiste un registro TRIS per ogni porta di I O denominato TRISA TRISB ecc Esempio org OOH start movlw 11111111B tris PORTA Note Questa istr
29. pi di un centinaio di volte I modelli con memoria OTP sono identici ai modelli con memoria EPROM ma possono essere programmati una sola volta TP One Time Programmable programmabile una sola volta Costano meno dei modelli EPROM o EEPROM ed offrono la possibilit di proteggere da lettura il programma contenuto al loro interno ecco perch dopo aver testato un programma su modello EPROM o EEPROM si utilizzer il modello OTP sul circuito finale La programmazione in volti microcontrollori avviene serialmente Il set di istruzioni di base per tutti i microcontrollori 6 lo stesso tranne le famiglie PIC17C4X e PIC 17C7xx le quali hanno un set di istruzioni leggermente pi ampio rispetto alle altre famiglie I microcontrollori che il nostro sistema di sviluppo utilizza sono PIC16F84 e PIC16F876 PIC 16F84 PIC 16F876 1 Microcontrollore PIC 16F84 1 1 Caratteristiche principali del microcontrollore 16 84 e CPU B8 bit Frequenza di clock massima 10 MHz 20 MHz PIC16F84A e Alimentazione compresa tra 2 V 6 V e Programmazione in Circuit e 13 linee di I O 5 Linee PORTA A e 8 Linee PORTA B e Memoria tipo FLASH 1024 Word 14 bit 68 bytes di memoria RAM 64 bytes di memoria EEPROM e 1Timer eun WDT e Interrupt e 8Livelli di stack e e LL 1 2 Descrizione Piedini del PIC 16F84 VDD e VSS Ingressi di alimentazione VDD positivo e VSS negativo su VDD va applicata una tensione compresa
30. programma assemblatore si consiglia il programma Mpasm della Microchip che viene distribuito in versione freeware e disponibile in dotazione al sistema di sviluppo MC 16 A questo punto una volta aperto il programma si imposti il tipo d integrato in questo caso il PIC 16F84 ed il percorso del file sorgente MPASM 02 70 FR m Source File Name OWEADESKTOPAEsempio txt Browse Options Waning Level Output Generated Files Default Default Default v Error File C Hexadecimal C All Messages v ListFile Decimal C Warnings and Errors INHX8S Iv Cross Reference File C Octal C Errors Only Object File Macro Expansion Default C Off F Sensitive Case Sensitive Extra Options 60 Una volta stabilito il tipo d integrato e il percorso del file sorgente bisogna impostare il Generated Files cliccando su Error file List file Cross Ref File e Object File come riportato in figura La abilitazione del Error File importante poich segnala la presenza di un eventuale errore nel file asm e genera un file err Questo file pu essere aperto con Notepad per individuare la riga interessata ed il tipo di errore A questo punto cliccare su Assemble per avviare la compilazione Se l operazione 6 andata a buon fine procedere con il trasferimento
31. si nota nella figura a lato definito da quattro cifre o TENORON lettere questo parametro da abbinare alla direttiva config in questo modo si potr evitare di dover impostare ogni volta l oscillatore e i fuses Una volta impostati tutti i parametri non rimane che cliccare con il mouse sul pulsante con il segno del fulmine Fuses Go 274 rr oo e lt CP Dopo aver programmato il PIC si consiglia di effettuare la verifica Checksum ID Value onfiguration 4 Config word 3FF1h Oscilator Quando si programmer il 16F876 la configurazione yyrite Enable dei fuses per default quella dell immagine riportata a l OFF sinistra Per una corretta programmazione bisogna deselezionare la sigla LVP Fuses VIDT BODEN v LP DEBUGGER Checksum ID salue orco rrr Config ward 3FFDh 62 7 L AMBIENTE INTEGRATO MPLAB 7 1 Introduzione In questa unit saranno illustrati i metodi per editare ed assemblare un programma e creare il file eseguibile lavorando con l ambiente integrato di MPLAB della MICROCHIP TECHNOLOGY Verranno brevemente illustrati anche i metodi per eseguire la simulazione del programma Una volta programmato il dispositivo il programma realizzato potr essere messo in esecuzione nella stesso sistema di sviluppo MC 16 Avviato il
32. sulla porta A 0006 2804 00012 GOTO ancora 0001 3 END SYMBOL TABLE LABEL VALUE _16 84 0000000 1 ancora DOODOOOA Inizio O0000000 port 00000005 port_B 00000006 MEMORY USAGE MAP XK Used Unused 0000 m All other memory blocks unused Program Memory Words Used H Program Memory Words Free Errors Wamings Messages 0 2 reported 0 suppressed 0 reported 0 suppressed Con Program Memory vengono visualizzate gli indirizzi di memoria e il codice eseguibile con accanto il file sorgente possibile osservare dal listato come le etichette siano state convertite in indirizzi di memoria O0000350FF mzio movlw 0001 0066 tris 0002 3000 movlw x FF x 7 5 W 7 5 0003 0065 tris 0004 0806 0005 0085 00062804 0007 3FFF mowvwt soto addlw anti corda 66 7 3 Simulazione di un Programma Il simulatore di MPLAB permette di eseguire anche una simulazione di tipo interattivo Infatti possono essere assegnati ad alcuni pulsanti disegnati sul video il collegamento con le linee di input del microcontrollore Alla pressione dei pulsanti corrispondono un cambiamento di stato delle linee in base alle specifiche impostate E inoltre possibile seguire sul video in apposite finestre l evoluzione del programma e il cambiamento che subiscono variabili e F e Register Per eseguire la simulazione dopo aver realizzato
33. Add Node e selezionare nella finestra che si apre il file edasm Esso verr aggiunto nella finestra Project Files Chiudere con OK Si pu ora assemblare il file sorgente usando nel menu Project gt Make Project Inizia il procedimento di assemblaggio e se ci sono errori nel file sorgente viene visualizzata la dicitura Bu Completed successfully In caso di errori questi vanno corretti prima di procedere ad un nuovo assemblaggio chit Telebe Pub end e Bice cud Properties Dal men di Mplab cliccare su Window per aprire la seguente videata New Watch Window 65 Facendo clic su Absolute Listing si visualizza il file eseguibile in formato listabile contenente indirizzi di memoria codice eseguibile numeri di linea 00001 LEDI ASM 00002 LIST P 16C84 F INHX amp M 00000005 00003 port EQUS indirizzo porta A DODODOOD6 00004 port B EQU 6 indirizzo porta B 0000 00005 ORG 0 0000 30FF 00006 Inizio MOVLW OFFh dato di configurazione della porta B Waming 224 Use of this instruction is not recommended 0001 0066 00007 TRIS port B porta B tutti d ingresso 0002 3000 00008 MOVLW 00h dato di configurazione della porta Waming 224 Use of this instruction is not recommended 0003 0065 00009 TRIS port pin porta A tutti d uscita 0004 0806 00010 ancora MOVF 0 legge porta B suo contenuto in accumulatore wW 0005 0085 00011 MOVWF port A pone contenuto dell accumulatore
34. Ci CEMA EPROM s2 96 wr i 12 cieca emon wx n mun n pi I9 SPI USART Tab 1 1 PIC micro PROGRAMMA DATI TIMER AD PWM TIPO WORD RAM EEPROM SERIALE 14 bit byte AMIGLIA PICIACTXX CLOCK 24 MHz programmabile in cieu 182765 81 35 31WDT AMIGLIA PICI amp CILX CLOCK 20 MHz prog ammabile in cicli EPROM 6 uwor 4 AMIGLIA PICIACT7X CLOCK 20 MHz prop ammabile in cicli 18 773 25 WDT 22 6 12b ART AMIGLIA PICIGCTX CLOCK X MHz ps in cintut PIci CTO EPROM s2 36 uwor 13 PICISCHIA fimo wr amp rw o 4 8 bit PIC16C72 EPROM 5 8 hit PICIGCIZA EPROM 129 WDT 22 s Bbi 2 IX SPIUSART EPROM 192 WDT 3 3C SPI US AR T AMIGLIA CLOCK 20 MHz in circus 1 73 40 WDT 3 5 hit US AR T MS SP 8 40 8 I bit US AR T MS SP PICISER 76 8192 3 US AR SP PICI amp FRT 8192 368 2 3HWDT li n US AR T MS SP AMIGLIA FICI6X8X CLOCK 10 MHz 20 MHz PICISFRAA ram in circuit PICICHA 52 36 db f wor paf mee qua x Ls Luc um in FIC16F8A m 8 I I AMIGLIA FICITCAX CLOCK 33 MHz AMIGLIA PICIAXC7X X CLOCK 33 MHz PICI7C756A 792 program
35. EE 3E o0 422121 intron ad H FGRHGdAO sono visibili in questa finestra l accumulatore W il i 3 registri OPTION STATUS TRISA TRISB PORTA e e File Register e Program memory contenente le locazioni di memoria i codici macchina e i mnemonici Aperte le finestre necessarie conviene ridimensionare e sistemare in modo che non ci sia sovrapposizione Si tenga presente che deve essere visibile anche la finestra con i pulsanti addlw oW oc och V1 e 68 7 6 Avvio della Simulazione Dal menu Debug gt Run possibile scegliere tra diverse modalit operative per l esecuzione del programma Menu Debug Run Run Fo Reset F6 Halt F5 Halt Trace ShiftE F5 Animate Update Register Change Program Counter e Run la simulazione del programma viene avviata e continua fin quando non si d Halt non viene incontrato un punto di arresto precedentemente impostato Solo quando l esecuzione del programma si ferma amp possibile osservare le variazioni avvenute nei registri e nella memoria e Sfep viene eseguito un passo alla volta con la pressione del tasto funzione F7 e Step Over si esegue ancora un passo alla volta tasto funzione F7 senza per entrare all interno di routine loop e Animate Il programma viene eseguito lentamente e si possono osservare immediatamente i cambiamenti che avvengono nei registri e nella memor
36. IS x Q D RD PORT EN RD PORT le clock input Schema stadio d uscita pin RAO RA1 RA2 Schema stadio d uscita pin RA4 Il funzionamento dei pin da RBI a RB7 del tutto analogo a quello delle linee da RAO a A3 L unica differenza data dalla linea R80 che quando configurata come linea di ingresso pu generare in corrispondenza di un cambio di stato logico un nterrupt ovvero un interruzione immediata del programma in esecuzione ed una chiamata ad una subroutine speciale denominata interrupt handler di cui si parler pi avanti 15 2 7 REGISTRO ACCUMULATORE W Direttamente connesso con l ALU c il registro W denominato anche accumulatore Questo registro consiste di una semplice locazione di memoria in grado di contenere un solo valore a 8 bit La differenza sostanziale tra il registro W e le altre locazioni di memoria consiste proprio nel fatto che per referenziare il registro W l ALU non deve fornire nessun indirizzo di memoria ma pu accedere direttamente 2 8 PROGRAM COUNTER Il PIC16F84 inizia l esecuzione del programma dal vettore di reset Reset Vector ovvero dall istruzione memorizzata nella prima locazione di memoria indirizzo 0000H Dopo aver eseguito questa prima istruzione passa quindi all istruzione successiva memorizzata nella locazione 0001H e cos via Se non esistesse nessuna istruzione in grado di influenzare in qualche modo l esecuzione del programma
37. RO bits TOIE 0 disabilitato 0000000 abilita l interrupt per la linea RBO INT INTE 0 disabilitato I 1 abilitato 00050250525 000 abilita l interrupt per il cambio di livello sulle linee RB7 RB4 RBIE 0 disabilitato segnalazione di superamento di capacit di TMRO OIF non c stato overflow sono cambiati uno o pi livelli 77 9 I Moduli Periferici del 16 876 9 1 Introduzione Nella presente unit verranno presi in esame i moduli periferici del microcontrollore PIC 16F876 In particolare verr esaminato il funzionamento del Convertitore A D dei tre TIMER e dei due moduli CCP Capture Compare PWM Saranno forniti anche semplici esempi di programmazione 9 2 convertitore A D del PIC 16F876 Il PIC 16F876 ha un modulo convertitore Analogico digitale a 10 bit con 5 canali d ingresso ciascuno i essi selezionabile via software Il convertitore ad approssimazioni successive dotato internamente di rack ho d I registri specifici associati con il modulo convertitore sono ADCONO in pagina O all indirizzo 1Fh e ADCONI in pagina 1 all indirizzo 9Fh Il risultato della conversione 10 bit viene posto nei registri a 8 bit ADRESH e ADREL Prima di avviare la conversione si debbono impostare tutti i parametri necessari dei registri ADCONO e ADCONI nel modo seguente 1 Con il registro ADCONI
38. SH e ADRESL dopo la conversione pu essere allineato a destra 6 bit pi significativi del registro ADRESH posti a 0 o a sinistra 6 bit meno significativi del registro ADRESL sono a O I 6 bit pi significativi del registro ADRESH posti a 0 dato giustificato a destra ADFM ADRESL ADFM 0 Risultato della conversione 10 bit Con l allineamento a destra si ottiene il risultato della conversione a 10 bit tre cifre esadecimali da 000h a 3FFh La prima cifra contenuta nel nibble basso di ADRESH la seconda nel alto di ADRESL e la terza in quello basso di ADRESL come mostrato nella tabella 9 5 valore di Nio stato calcolato con la relazione riportata di seguito e poi trasformato in esadecimale 10 2 Vin 1024 5 0 91 Tab 9 5 DATO GIUSTIFICATO A DESTRA N calcolato ADRESH acquisito ADRESL acquisito etero tss a 199h i T9 STEHTS IST LT LI CL s 26h 0 0 0 0 0 0 1 0 0 1 1 0 0j 1 J0 1 ee Con l allineamento a sinistra la lettura del dato meno immediata dovendosi suddividere in modo opportuno i bit contenuti nei registri ADRESH e ADRESL come mostrato nella tabella 9 6 Tab 9 6 DATO GIUSTIFICATO A SINISTRA Viy N calcolato ADRESH acquisito ADRESL acc visito occh 0 011
39. SISTEMA DI SVILUPPO MC 16 per microcontrollori PIC16F84 PIC16F876 o MANUALE DI PROGRAMMAZIONE Il sistema MC 16 contiene Scheda di sviluppo a microcontrollore con PIC16F84 e PIC16F876 Unit di programmazione Alimentatore da rete e Cavo RS232 per il collegamento al PC Dischetto con programmi dimostrativi in linguaggio assembler Manuale di programmazione e Manuale di istruzioni con esempi di programmi applicativi e Due campioni di microcontrollori uno di PIC16F84 ed uno di PIC16F876 Scheda di sviluppo a microcontrollore con Zoccoli text tool per l impiego dei microcontrollori PIC16F876 PIC16F84 e Quattro linee di ingresso analogiche convertitore D A Una memoria EEPROM 24LC256 sorgente di tensioni potenziometrica 0 5 modulo per il controllo della luminosit modulo per il controllo della velocit di un motore Un modulo per il controllo della temperatura visualizzatore con display a sette segmenti display LCD intelligente 16x2 5mm tastiera a matrice buzzer piezoelettrico Un visualizzatore con led 1x8 bit rel attuatore da 1A Un 1 wire Quattro pulsanti di ingresso Una interfaccia seriale RS 232 Due sorgenti di alimentazione 12Vcc e 5 Unit di programmazione La presenza di un deviatore permette di commutare la fase di simulazione con quella di programma
40. Timer la quale azzera ad intervalli regolari il Watch Dog Timer non consentendogli di terminare il suo conteggio Se la CPU non effettua questa istruzione prima del termine del conteggio allora si assume che il programma si bloccato per qualche motivo e si effettua il Reset della CPU Il periodo minimo raggiunto il quale la CPU viene resettata di circa 18ms dipende dalla temperatura e dalla tensione di alimentazione E possibile per assegnare il PRESCALER al Watch Dog Timer per ottenere ritardi pi lunghi fino a 2 3 secondi Agendo sul bit PSA del registro OPTTON possibile assegnare il prescaler al Watch Dog Timer per ottenere dei tempi di ritardo di intervento maggiori Periodo ritardo del WDT 18ms 36ms 72 5 e 298 25 4 O e e DN Periodo di ritardo del WDT______ 7748 O i 18 4 REGISTRI 4 1 REGISTRO STATUS Il registro STATUS un registro in cui alcuni bit sono impostati alla sola lettura e altri possono essere sia letti che scritti Questo registro contiene una serie di flag che indicano lo stato aritmetico dell unit ALU Arithmetic Logic Unit Unit Logica Aritmetica lo stato dell hardware del PIC al RESET ed i flag che consentono l indirizzamento ai diversi banchi di registri Questo registro localizzato all indirizzo 03h ed composto di 8 bit ognuno dei quali ha un significato preciso e una propria sigla identificativa La disposizione dei flag all interno del registro STAT
41. US la seguente La funzione svolta da ogni singolo flag descritta nella tabella 1 3 Tab 1 3 Posizione Flag Funzione IRP Register Bank Selected bit Bit 7 Questo registro non viene utilizzato nei PIC16C8X e dovrebbe essere mantenuto a 0 RP1 RPO Register Bank Select bits Questi due bit servono per selezionare il banco di registri che si vuole utilizzare nei PIC16C8X solo RPO bit 5 viene usato realmente per selezionare uno dei due Bit 6 5 banchi registri disponibili dovrebbe essere sempre mantenuto a 0 Selezione il BANCO O indirizzi da 00h 7Fh 1 Selezione il BANCO 1 indirizzi da 80h FFh TO Time Out bit Bit 4 Questo bit viene posto a 0 quando il WDT d un time out PD Power Down bit Bit Quando il micro viene posto nella condizione di riposo dalla relativa istruzione questo bit viene posto a 1 Z Zero bit Questo bit viene posto a 1 logico se il risultato di un operazione matematica uguale a zero DC Digit Carry borrow bit Questo bit viene settato quando un istruzione di somma o di sottrazione d un riporto sul quarto bit viene principalmente usato nelle conversioni da binario BCD Bit 2 Bit 1 C Carry borrow bit Con le operazioni di addizione e sottrazione questo bit viene settato se l operazione d luogo ad un riporto Durante le operazioni di rotazione di un registro questo bit viene invece caricato con il valore del bit pi alto pi basso del registro
42. a mascherare movlw 00001111B Prepara la maschera di bit andwf OCH W Effettua l AND e memorizza il risultato in W Il risultato in W sar 00000101B come richiesto W 00001111 AND f 01010101 W 00000101 La ANDWF influenza il bit Z del registro STATUS che varr 1 se il risultato dell operazione 0 34 Azzera un bit nel registro Sintassi bcf f b Operazione equivalente f b Descrizione Questa istruzione azzera il bit b del registro all indirizzo f Esempio parmi equ org OOH movlw 11111111B Valore iniziale movwf parmi bcf parm1 0 DO 0 termine del programma il registro parm1 varr 11111110B Note Questa istruzione non influenza alcun bit di stato BSF Sit ceti Mette a uno un bit nel registro F Sintassi bsf f b Operazione equivalente f b 1 Descrizione Questa istruzione mette a uno il bit b del registro all indirizzo f Esempio parmi equ org 00000000B Valore iniziale movwf parmi bsf 1 0 DO 1 Al termine del programma il registro parm1 varr 00000001B Note Questa istruzione non influenza alcun bit di stato BTFSC it est Salta l istruzione successiva se un bit nel registro F vale Sintassi btfsc f b Operazione equivalente f b 0 Si salta una istruzione Descrizione Testa il bit b contenuto nel registro all indirizzo f e salta l istruzione successiva se questo vale 0 Esempio
43. asella Start si apre un menu a tendina contenente tutte le abe e il programma Fare clic poi sul segno di spunta Il punto di arresto verr visualizzato nella finestra sottostante L indirizzo si scrive nella casella Start e poi si fa clic sul seno di spunta Nella figura sottostante sono stati inseriti 3 break point due relativi alle etichette accendi e spegni ed il terzo all indirizzo 69 Qualora si desideri inserire una serie di break point consecutivi nella casella End pu essere messo l indirizzo o la abe finale del gruppo contiguo di punti di arresto In questo modo saranno predisposti tutti i break point inclusi tra l etichetta o l indirizzo di partenza e l etichetta o l indirizzo finale Break Point Settings break 1 x break2 X break 3 Esempio di debug di un programma Pass Count 0 Get accendi spegni accendi specdhi OF OF Remove Remove All Disable All Enable All Close Help Si voglia eseguire il debug del programma GENI ASM per verificarne il corretto funzionamento utilizzando la funzione Run ed inserendo dei break point port_A conta 1 contaz mizigo accendi spegni ritardo loop 2 loop 1 LIST EQU EQU EQU MOVIW TRIS CALL BSF CALL BCF GOTO MOYLW MOYWEF MOVIW MOVWTF DECFSZ DECFSZ GOTO RETURN END P 16C84 F INHX 8M 5 0Db DOh port port A 0 ri
44. asi operazione di scrittura su EEPROM Se messo a zero l EEPROM si comporta come una memoria a sola lettura 1 Scrittura su EEPROM abilitata Scrittura su EEPROM disabilitata WR Write Control bit Questo flag serve ad attivare il ciclo di scrittura su EEPROM Per attivare la scrittura occorre mettere a 1 questo flag Lo stesso flag verr messo automaticamente a zero dall hardware del PIC una volta completata la scrittura sulla cella 1 Comanda l inizio della scrittura su EEPROM Viene rimesso a 0 a fine ciclo di scrittura Pu essere solo settato dal nostro programma ma non resettato Ciclo di scrittura completato RD Read Control bit Questo flag serve ad attivare il ciclo di lettura da EEPROM Per attivare la lettura occorre mettere a 1 questo flag Bit 3 Bit 2 Bit 1 1 Comanda l inizio della lettura da EEPROM Viene rimesso fine ciclo di lettura essere solo settato dal nostro programma resettato Non inizia la lettura su EEPROM 20 4 3 REGISTRO Questo il registro grazie alla quale possibile controllare e abilitare gli interrupt L interrupt su ognuno di questi eventi pu essere abilitato o disabilitato indipendentemente dagli altri agendo sui bit del seguente registro ZNTCON RAW 0 RAW 0 RAN RAN 0 RAW D RAN D RAW D bit bit O Posizione Flag Funzione GIE Global Interrupt Enable bit Questo bit deve essere messo ad 1 per
45. bit relativi al TIMER2 del registro di controllo TMR2 T2CON e dei registri PIR1 PIE1 per i soli bit relativi TMR2 Tab 10 3 INTCON INDIRIZZO 8 10 I8Bh GE PEE ooo rr GIE 1 Abilitazione generale degli interrupt PEIE 1 Abilitazione dell interrupt delle periferiche T2CON Bit 3 TOUTPS TOUTPS TOUTPS TOUTPS TMR2 T2CKPS T2CKPS Valore del postscaler essi 0000 1 1 0001 21 2 1111 gt 1 16 1 TIMER abilitato 0 TIMER2 disabilitato Valore del prescaler 00 01 gt 1 4 1 1 16 PIRI INDIRIZZO rar TMR2IF 1 avvenuto un interrupt 0 non c stato interrupt 111 1 TMR2IE 1 abilitato interrupt di TMR2 0 disabilitato interrupt di TMR2 97 11 Modulo Capture Compare PWM Il microcontrollore contiene due moduli CCP Capture Compare PWM che lavorano in modalit simile Ogni modulo contiene due registri ad 8 bit CCPR1H CCPRIL per il primo modulo e CCPR2H CCPR2L il secondo modulo Ci si riferisce nel seguito al primo modulo Ognuno dei moduli pu operare in tre modalit diverse modo Capture modo Compare e modo PWM La scelta dei diversi modi di funzionamento viene effettuata predisponendo opportunamente alcuni bit del registro CCPICON CCP2CON come indicato nella tabella 111 Tab 11 1 CCPICON Capture ogni fronte di discesa RC2 CCPI Capture ogni fronte di salita su RC2 CCPI Capture ogni 4 fronti d
46. con TMRO Tab 10 1 INDIRIZZO it 6 it 5 It 2 31t 3 it 2 jt h 1 Valore a 8 bit INTCON INDIRIZZO GIE TOE GIE 1 Abilitazione generale degli interrupt TOIE Abilitazione dell interrupt di TMRO TOIF Viene settato quando 51 genera un interrupt Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bitl Bto TOCS TOSE PSA PS2 PSI PSO 20 TOCS 0 clock mterno 1 clock esterno Selezionano rapporto prescaler Per TMRO 000 gt 1 2 111 gt 1 256 Per WDI 000 2 1 1 111 1 128 prescaler assegnato a TMRO 1 assegnato WDT TOSE Con clock esterno seleziona fronte 0 fronte di salita 1 di discesa 85 10 2 TIMER1 Il TIMERI un timer a 16 bit in grado di effettuare conteggi da a 65535 pu essere usato con clock interno in modalit f mer con frequenza pari a fosc 4 oppure con c ock esterno su RCO in modalit counter In modalit counter si pu avere funzionamento sincrono con il clock di sistema o asincrono E possibile associare al timer un prescaler con fattori di divisione 1 1 1 2 1 4 e 1 8 TMRI genera un interrupt e abilitato quando il conteggio passa da FFFFh a 0000h Il imer usa una coppia di registri ad 8 bit per funzioni di temporizzazione Nella tabella 10 2 sono rappresentati i registri associati a TMRI Tab 10 2 IMRIL INDIRIZZO 7 Byte meno significativo IN M QW RR Byte pi
47. ddr TMR OPTION REG TMR OPTION REG 03h STATU STATUS STATUS PORTB TRISI 3 o 0 CLATH PCLATH PCLATH CLATH CO INTCON INTCON EEDATA feen fecon UT EEDATH DE PT EEADRH 90h 10 i REGISTRI H REGISTRI CCPR USO USO CCPICO 97 J F GENERALE GENERALE TST XSTA 16 BYTE 16 BYTE unn REGISTRI REGISTRI USO USO ou Fh 80 BYTE SOBYTE pon _ 74 Nella tabella 9 3 vengono rappresentate le configurazioni dei bit di alcuni dei principali registri Vengono anche rappresentate in maniera dettagliata le funzioni svolte dai bit dei registri STATUS OPTION_REG e Tab 9 3 BANK 1 Nome Ind _ Bia Bid utilizza il contenuto di FSK per indirizzare la m emoria dati TMRO registro del timer 0 STATUS muntatore per l imdirizzamento indiretto della mem PORTA 05h __ 5 RA3 RA2 RAO PRI OCh ADIF TXIF SSPIF CCPIIF TMR2IF TMRIIF PR2 h 11 EEF CCPDIF byte basso del registro del TIMER 1 byte alto del registro del TIMER 1 CKPS1 50 OSCEN SYNC CS ON PS3 52 PSI PSO ON CKPSI CKPS0 byte basso del registro del modulo 1 CCP Capture Compare PWM byte alto del registro del modulo 1
48. e e 1l valore k MOVLW k REIFIE Ritorna dalla routine di servizio dell interrupt RETLW k Ritorna dalla subroutine ponendo 1l valore k nell accumulatore OF RETURN Ritorna dalla subroutine mE SLEEP Poni il microcontroller in standby a Carica 1 valore amp nell accumulatore SUBLW k Sottrai 1l valore k dall accumulatore XORLW k Fai la OR tra l accumulatore e 1 valore k OPERAZIONI SPECIALI OPERAZIONI EQUIVALENTI ADDCF fd Somma f con 1l carry e pone 1l risultato HW BTFSC 4 0 o in f d 1 i ADDDCF Somma f con 1l digit carry e pone il risultato SC W d 0 o in f d 1 Salta all indirizzo amp Salta se c carry all indirizzo Salta se c digit carry all indirizzo k BNC k Salta se non c carry all indirizzo BIFSS 3 0 Salta se non c digit carry all indinzzo F55 BNZ k Salta se non c zero all indirizzo k BZ k Salta se c zero all indirizzo Le operazioni speciali sono anche dotate da set di istruzioni semplici ed equivalenti Tab 5 3 e Tab 5 4 30 Tab 5 4 OPERAZIONI SPECIALI OPERAZIONI EQUIVALENTI Azzera 1l flag di carry CLRDC Azzera il flag di digit carry CLRZ Azzera 1l fag di zero LCALL k Chiamata a sub lunga LGOTO k Salto lungo Complementa e pone 1l risultato m W d 0 o 4 1 SKPNZ DUET SKPZ 2 SUBCF Sottrai con il carry e pone il risultato
49. egistro STATUS seleziona bank 1 carica in W codice per selezione Vref e canale ANO sposta il codice nel registro ADCONI bank 1 bit ADIE 1 del registro PIEI abilita inter dell A D bit RPO 0 del registro STATUS seleziona bank 0 carica in W codice per frequenza canale A D ON sposta il codice nel registro ADCONO bank 0 bit ADIF 0 del registro PIRI azzera bit flag interrupt dell A D abilita interrupt periferiche PEIE 1 del registro INTCON abilita interrupt generali GIE 1 del registro INTCON chiama la routine di ritardo circa 20 us per il tempo di sa mpling pone ad uno il bit 2 di ADCONO e avvia la conversione Istruzioni varie di elaborazione per esempio visualizzazione del dato durante l esecuzione di queste istruzioni finisce la conversione esi salta alla routine d interrupt si avvia nuova conversione 84 10 I moduli Timer Il 16F876 possiede al proprio interno tre moduli timer definiti TIMERO TIMER1 TMR1 e TIMER2 TMR2 10 1 TIMERO Il funzionamento di questo modulo simile a quello del 16F84 TIMERO a 8 bit E possibile utilizzare TMRO con c ock esterno ingresso su RA4 o interno fosc 4 ed abbinare ad esso un prescaler ad 8 bit con fattori di divisione 1 1 1 1 1 128 Tutte le volte che il registro TMRO passa dal valore FFh a 00h viene generato un nterrupt Nella tabella 10 1 sono riportati i registri associati
50. egna all accumulatore W il valore costante k Esempio org start movlw 20 Dopo aver eseguito questo programma l accumulatore W varr 20 Note Questa istruzione non influenza nessun bit di stato MOVF MOV F Muove il contenuto del registro F Sintassi movf Operazione equivalente d f dove d pu essere W o f Descrizione Questa istruzione copia il contenuto del registro indirizzato dal parametro f o nell accumulatore W o nello stesso registro F Il parametro d determina la destinazione In questo caso l utilit dell istruzione sta nel fatto che viene alterato il bit Z del flag STATUS in base al valore contenuto nel registro f Esempio L esempio seguente copia il valore contenuto nel registro all indirizzo OCH nell accumulatore W movf OCH W 44 MOVWF MOV W F Muove il contenuto del registro W nel registro F Sintassi movwf Operazione equivalente f W Descrizione Questa istruzione copia il contenuto del registro W nel registro indirizzato dal parametro f Esempio Ipotizziamo di voler scrivere il valore 10H esadecimale nel registro TMRO Le istruzioni da eseguire sono le seguenti movlw 10H Scrive nel registro W il valore 10H movwf O1H lo memorizza nel registro Note L esecuzione della MOVWF non influenza nessun bit di stato NOP N OP Nessuna operazione Sintassi nop Descrizione Questa istruzione non esegue nessuna operazione ma utile per inserire ri
51. er senza prescaler bisogna procedere come segue 1 Scrivere la routine d interrupt del timer con inizio nella locazione 04h vettore d interrupt In tale routine deve essere tra l altro e nel timer il valore iniziale del conteggio per esempio 00h e Azzerato il flag di avvenuto interrupt bit 2 del registro INTCON e al termine della routine l istruzione di ritorno dell interrupt RETFILE 2 nel programma principale e impostare il modo timer sorgente del clock del timer interna porre a il bit 5 del registro OPTION e inizializzare il timer caricando in esso un valore iniziale di conteggio per esempio 00h e abilitare l interrupt del timer bit 5 di INTCON 1 e abilitare gli interrupt bit 7 di INTCON 1 Nei precedenti casi si presupposto che la sorgente del clock del timer sia interna modo timer Se deve essere utilizzata una sorgente esterna modo counter bisogna porre ad 1 il bit 5 del registro OPTION In tal caso pu essere scelto per l incremento del contatore il fronte di salita del clock ponendo a O il bit 4 del registro OPTION o il fronte di discesa ponendo a 1 il bit 4 del registro OPTION Esempio senza prescaler frequenza del quarzo 4 MHz Timer impostato a OOh Il timer incrementato con una frequenza ft f0sc 4 4000000 4 1000000 Hz Poich l interrupt viene generato ogni volta che il contatore passa da FFh a 00h si deve incrementare il timer da 00h a FFh 255 volte e p
52. errupt L interrupt una particolare caratteristica dei e dei microprocessori in generale che consente di intercettare un evento esterno interrompere momentaneamente il programma in corso eseguire una porzione di programma specializzata per la gestione dell evento verificatosi e riprendere l esecuzione del programma principale Il PIC16F84 in grado di gestire in interrupt quattro eventi diversi vediamo quali sono 1 Il cambiamento di stato sulla linea RBO External interrupt RBO INT pin 2 La fine del conteggio del registro 774420 TMRO overflow interrupf 3 Il cambiamento di stato su una delle linee da 284 a 987 PORT change interrupts 4 La fine della scrittura su una locazione EEPROM EEPROM write complete interrupt L interrupt su ognuno di questi eventi pu essere abilitato o disabilitato indipendentemente dagli altri agendo su alcuni bit del registro INTCON La configurazione dei bit del registro INTCON la vedremo pi avanti quando parleremo dei registri 3 3 Watch Dog Timer WDT Il Watch Dog Timer in pratica un oscillatore interno al PIC ma completamente indipendente dal resto della circuiteria il cui scopo di rilevare eventuali blocchi della CPU del micro e resettare il PIC per riprendere la normale esecuzione del programma Per rilevare un eventuale blocco della CPU durante l esecuzione del programma principale inserita all interno di questo un istruzione speciale la CLRWDT CLeaR Watch Dog
53. erse funzioni in modo autonomo in relazione al programma implementato Un microcontrollore fornito almeno di un timer all interno dei pi evoluti vi sono anche pi timer dei comparatori in grado di confrontare livelli di tensione dei convertitori analogici digitale delle interfacce seriali per il collegamento a dispositivi esterni Le differenze sostanziali tra microcontrollore e microprocessore CPU sono le seguenti e Nel microcontrollore il programma di gestione risiede al suo interno collocato in un area di memoria apposita non volatile Nel microprocessore il programma che viene svolto risiede nella memoria esterna e Nei microcontrollori presente anche una zona di memoria di tipo RAM utilizzata l elaborazione dei dati Alcuni microcontrollore hanno al loro interno una memoria per i dati di tipo EEPROM e Nei microcontrollori a loro interno vi sono delle linee di I O le quali permettono di pilotare direttamente le periferiche esterne con segnali digitali o acquisire livelli logici provenienti da dispositivi esterni e microcontrollori hanno un ridottissimo set di istruzioni sono dei dispositivi RISC mentre i microprocessori sono spesso di tipo CISC CISC RISC I microcontrollori appartenenti alla famiglia della Microchip Tecnology si distinguono in base al loro tipo ed estensione di memoria per la frequenza di lavoro per il tipo e humero di periferiche integrati in essi In base a queste caratteristiche si dist
54. erupt ogni volta che il conteggio passa da FFh a OOh 24 4 4 3 PRESCALER Se configuriamo il bit PSA del registro OPTION a inviamo al registro 7 490 il segnale in uscita dal PRESCALER come visibile nella seguente figura T SE TMRO register TMRO register Pag Pal PSU Con l uso del PRESCALER possiamo dividere ulteriormente la frequenza Fosc 4 configurando opportunamente i bit 250 PSI e PS2 del registro OPTION secondo la seguente tabella PS2 PS1 PSO Divisore Frequenza in uscita al prescaler Hz 2 5000 25000 8 18500 0 16 6 00 32 3S3L250 5 5 0 64 5 2 128 7484 0 EN EN EN 0 ROM 0 Per utilizzare il timer ed il prescaler bisogna procedere come segue 1 scrivere la routine d interrupt del timer con inizio nella locazione 04h vettore d interrupt come nel caso senza prescaler 2 nel programma principale e assegnare il prescaler al timer porre a O il bit 3 del registro OPTION se il bit posto ad 1 il prescaler assegnato al Watchdog Timer e selezionare il fattore di divisione del prescaler impostare il bit 2 il bit 1 e il bit O del registro OPTION secondo la tabella riportata sotto e inizializzare il timer caricando in esso un valore iniziale di conteggio per esempio 00h e abilitare l interrupt del timer bit 5 di INTCON 1 e abilitare gli interupt bit 7 di INTCON 1 25 Per utilizzare il tim
55. esso oscillatore a cristallo ingresso clock esterno OSC2 CLKOUT Uscita oscillatore a cristallo uscita clock 1 4 frequenza di OSCI 11 TIOSO O digitale Port C ingresso clock TMRI oscillato re TIOSI VFO digitale Port C input Capture 2 input oscillatore TMRKI 43 pre I di Port input To Por t RG spo froise 17 RC6 TX C Ho C Tx per trasmiss clock sincrona digitale Port C Rx per ricezione Asincrona dati sincrona 19 Vs J 6922 _ Positivo alimentazione 21 INT LL Port B ingresso interrupt RBI 0 e 24 RB3 PGM o FO di gale Port B ingresso per la programmazione f O T dis itale Port B clock per la programmazione seriale TB VO digitale Port B dati per la programmazione seriale di d L3 pa LA 73 Nella tabella 9 2 viene riportata la mappa di memoria dei file register con i relativi indirizzi suddivisi per banchi Sono presenti quattro banchi di memoria selezionabili con i bit bit6 e bit5 del registro STATUS Sono mostrate inoltre le aree di memoria RAM per dati registri di uso generale Tab 9 2 Indirect addr Indirect addr Indirect addr Indirect a
56. i salita su RC2 CCPI Capture ogni 16 fronti di salita su 2 CCP1 Compare RC2 CCPI varia V generato un interrupt software 88 11 1 Modo Capture In questa modalit quando si manifesta un evento sull ingresso RC2 CCP1 il registro a 16 bit CCPR1 formato dalla coppia di registri ad 8 bit CCPR1H CCPRIL cattura il contenuto attuale del registro TMRI che deve lavorare in modalit timer L evento che pu attivare la cattura uno dei seguenti e ogni fronte di salita di un segnale posto su 2 1 e ogni fronte di discesa di un segnale posto su RC2 CCP1 e ogni 4 fronti di salita di un segnale posto su RC2 CCP1 e ogni 16 fronti di salita di un segnale posto su RC2 CCP1 prima di utilizzare la modalit Capture il pin RC2 della porta C deve essere impostato come input Quando si verifica una cattura il bit 2 CCP1IF del registro PIR1 viene posto ad uno se stato precedentemente abilitato posto a zero il bit 2 del registro PIE1 Il bit CCP1IF deve essere azzerato via software prima di una nuova operazione di Capture 11 2 Modo Compare Nella modalit Compare il contenuto del registro CPR1 CCPR1H CCPRIL viene confrontato con quello di TMR1 Quando c uguaglianza si verifica sul pin RC2 CCP1 che deve essere preventivamente configurato come ouf pu uno dei seguenti eventi e RC2 CCP viene portato a livello alto e RC2 CCP viene portato a livello basso e RC2 CCPI non s
57. ia Si scelga per la simulazione del programma assemblato precedentemente la modalit Animate Avviato il programma attraverso il menu Debug gt Run gt Animate o con Ctrl F9 si osservi il cambiamento che avviene nei registri PORTA e PORTB quando si premono i pulsanti precedentemente impostati Ogni volta che si preme con il mouse uno dei pulsanti cambia lo stato della linea RBn corrispondente interruttore e quindi quello della linea Rn LED Per arrestare la simulazione entrare nel menu Debug gt Run e fare clic su Halt 7 7 Debug di un Programma In genere per eseguire il debug di un programma si utilizzano le fnzioni del menu Debug gt Run Step e Step Over o anche direttamente la funzione Run Quando si esegue il Debug usando direttamente la funzione Run necessario inserire nel programma dei punti di accesso break point in modo che l esecuzione si fermi nei punti stabili e sia possibile visualizzare lo stato dei registri 7 8 Inserimento di BREAK POINT L inserimento dei break point effettuato con il menu Debug gt Break Settings Si apre la finestra visualizzata nella figura riportata di seguito I break point possono essere inseriti sia utilizzando le eventuali abe presenti nel programma che direttamente gli indirizzi di memoria espressi in esadecimale senza h e se iniziano con una lettera devono essere preseduti da 0 Per inserire punti di arresto contrassegnati da un abe fare clic sul triangolino della c
58. il PIC arriverebbe presto ad eseguire tutte le istruzione presenti nella sua memoria fino all ultima locazione disponibile Sappiamo ovviamente che non cos e che qualsiasi microprocessore o linguaggio di programmazione dispone di istruzioni di salto ovvero di istruzioni in grado di modificare il flusso di esecuzione del programma in base alle esigenze del programmatore Una di queste istruzioni la GOTO GO TO vai a che ci permette di Program Mem ory 1K x14 RTCC REGISTER FILE EEPROM Start up Timer Mem ory Watchdog timer OSC2 CLKOUT OSC1 CLKIN vss EEPROM Program ary 1Kx14 RTCC REGISTER FILE EEPROM Start up Timer Memory 64x86 Watchdog timer OSC2ICLROLIT MCLR cambiare la sequenza di esecuzione di saltare direttamente ad un qualsiasi punto all interno della memoria programma e di continuare quindi l esecuzione da quel punto Per determinare quale sar l istruzione successiva da eseguire il PIC utilizza uno speciale registro denominato PROGRAM COUNTER contatore di programma la cui funzione proprio quella di mantenere traccia dell indirizzo che contiene la prossima istruzione da eseguire Questo registro incrementato automaticamente 16 3 Funzionamento altri dispositivi Hardware amp Software 3 1 Power down mode sleep Il Power Down Mode Sleep Mode un particolare stato di funzionamento del PIC
59. il progetto e creato il file eseguibile si deve aprire il menu Debug Menu Debug Run Simulator Stimulus Bresk Settings Trace Settings Trigger In Out Settings Clear All Points Complex Trigger Settings Enable code Coverage Clear Program Memory CtrHShift F2 System Reset CtrHShift F3 Power On Reset Ctri Shift F5 7 4 Creazione dello Stimulus Poich il programma da simulare ci si riferisce a LED1 ASM prevede la lettura delle linee RBO RB1 RB2 e RB3 alle quali sono collegati 4 interruttori per la simulazione si collegheranno 4 pulsanti a queste linee Dal menu Debug scegliere Simular Stimulus gt Asynchronous Stimulus si apre la finestra con i pulsanti Asynchronous Stimulus Dialog visualizzata nella figura riportata di seguito Con il tasto destro del mouse fare clic sul primo pulsante a sinistra Si apre il menu Assign Pin Facendo clic su Assign Pin si apre la finestra Pin Selection Si faccia doppio clic su Assign Selection Si faccia doppio clic su RBO la finestra si chiude e sul pulsante in alto a sinistra compare scritto RBO P Si proceda in questo modo per i quattro pulsanti della prima riga assegnando loro le linee RB1 RB2 e RB3 Si deve ora scegliere per ogni pulsante assegnato il tipo di segnale che viene generato quando esso premuto Sono disponibili 4 segnali diversi 1 Pulse impulso porta il livello del pin ad un livello opposto a quello in cui si trova e poi lo ripo
60. ile WDTE In questa modalit il PIC abilita un timer che una volta trascorso un determinato tempo effettua il reset del PIC Per evitare il reset il nostro programma dovr eseguire ciclicamente l istruzione CLRWDT per azzerare il timer Se non azzeriamo il timer in tempo la circuiteria del watchdog dall inglese cane da guardia interpreter questo come un blocco del programma in esecuzione ed effettuer il reset al fine di sbloccarlo 38 Esempio org OOH loop clrwdt goto loop Note Questa istruzione non influenza nessun bit di stato COMF COM F Effettua il complemento del registro F Sintassi comf Operazione equivalente d NOT f dove d pu essere W o f Descrizione Questa istruzione effettua il complemento del valore contenuto nel registro indirizzato dal parametro f Il parametro d determina la destinazione del valore ottenuto Esempio parmi equ org movlw 01010101B movwf parmi comf 1 Al termine dell esecuzione del programma il valore del registro parmi sar 10101010B Note Questa istruzione influenza il bit Z del registro STATUS e Zvalelseilrisultato dell operazione vale DECF DEC Azzera il contenuto del registro F Sintassi decf f d Operazione equivalente d f 1 dove d pu essere Wo f Descrizione Questa istruzione decrementa il contenuto del registro indirizzato dal parametro f Il parametro d un flag che indica su quale registro deve essere memori
61. inguono delle famiglie base distinte con particolari sigle Tab 11 MEMORIA PORTE PIC micro PROGRAMMA LA LI TIMER AT PWM CMP WORD RAM 14 hit byte AMIGLIA PICIX 5X X con contenitore pin CLOCK 4 MHz programmahbile i AMIGLIA PICIX E5X X con contenitore pin programmabile in nica sos a wr 8 dd AMIGLIA 67X con contenitore a pin CLOCK 10 MHz programmabile in circus EPROM 98 13 6 AMIGLIA PICI2CES7X con a pin CLOCK 10 MHz programmabile in circu PICI2CHGTS 4 8 bit AMIGLIA PICIACSX CLOCK 20 MHz P mae mo s 3 Tse TTT nass mo 2 1 L1 wx 1 css mor 5 iw misc ST AMIGLIA 16 55 CLOCK 20 MHz P1C18C 554 programmabile in circu SERIALE meis news emo 1 AMIGLIA PICIGCGX CLOCK 20 MHz programmabile in circus de ea eli iii ques me D mow a AMIGLIA CLOCK 20 MHz programmahile ciali mace mon sw v AMIGLIA PICIGCEG2X CLOCK 20 ile m circus PIC16Ch625 COEN rwr 3 AMIGLIA PICIGX62X CLOCK 20 MHz in circuit M
62. ir una seconda finestra Settaggio Hardware nella quale si dovranno effettuare seguenti impostazioni Settaggio Hardware Address Program Ripristina Settaggi Interfaccia pO diretto API di Windows Programmatore JDM Programmer i Parte 1 r Comunicazione C Com1 inverti Data Out Com2 Inverti Data In Com3 Inverti Clock coma inverti MCLR Delay 10 inverti VCC p DL BP 61 Cliccare su Programmatore e scegliere il JDM Programmer quindi su Porte e scegliere la Com disponibile su Interfaccia e scegliere I O diretto Premere OK Selezionare il PIC dal men a tendina che si trova in alto a destra NOTA BENE Ci sono 2 tipi di PIC per le 2 famiglie 16F84 e 16F876 rispettivamente Il PIC 16F84 e il PIC 16F844A il PIC 16F876 ed il PIC 16F876A Selezionare il PIC corretto in base alla sigla riportata sul PIC in dotazione affinch la programmazione vada a buon fine Unaltra serie di parametri importanti da impostare sono l oscillatore e i fuses L oscillatore deve essere impostato in base al tipo di clock che si ha vedi Tabella lipo di oscillatore Resistenza condensatore Standard quarzo Quarzo con basso assorbimento Quarzo alta frequenza Stabilito loscillatore bisogna definire i Fuses Questi parametri si 4 riferiscono all alimentazione l unico da selezionare PWRT Oscillatore Il Checksum come
63. l abilitazione generale degli interrupt EEIE EEPROM write complete Interrupt Enable bit Se questo bit viene messo ad 1 viene abilitato l interrupt alla fine della scrittura su una locazione EEPROM OIE TMRO Overflow Interrupt Enable bit Se questo bit viene messo ad 1 viene abilitato l interrupt sulla fine del conteggio del registro TMRO INTE Interrupt RBO INT Enable bit Se questo bit viene messo ad 1 viene abilitato l interrupt sul cambiamento di stato di RBO RBIE RB chance Interrupt Enable bit Se questo bit viene messo ad 1 viene abilitato l interrupt sul cambiamento di stato su una delle linee da RB4 a RB7 OIF TMRO Overflow Interrupt Flag Se questo flag vale 1 l interrupt stato generato al termine del conteggio del timer TMRO INTF Interrupt RBO INT Flag Se questo flag vale 1 l interrupt stato generato dal cambiamento di stato sulla linea RBO RBIF RB Interrupt Flag 9 M So z E w z 09 O pe N CO JA Ol N Se questo flag vale 1 l interrupt stato generato dal cambiamento di stato di una delle linee da RB4 a RB7 21 Esiste un bit d abilitazione generale degli interrupt che deve essere settato anch esso ad 1 ovvero il bit GIE Global Interrupt Enable bit posto sul bit 7 del registro INTCON Qualunque sia l evento abilitato al suo manifestarsi il PIC interrompe l esecuzione del programma in corso memorizza automaticamente nello STACK il valore corrente del PROGRAM COUNTER e salta a
64. le linee di I O dipende dal valore dei due 8Ah registri PORTA e PORTB OBh 8Bh Alcuni registri riportano lo stato di funzionamento dei och 8Ch dispositivi interni al PIC o il risultato di operazioni aritmetiche e logiche E necessario conoscere quindi esattamente quale funzione svolge ciascun registro General Mapped x Purpose accesses specializzato e quali effetti si ottengono nel registers in Bank 0 manipolarne il contenuto 4Fh CFh 50h DOh 7Fh FFh 13 2 6 PORTE Il PIC16F84 dispone di un totale 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 ingresso che in uscita identificate dalle sigle RAO RAI RAZ e 4 La PORTA B dispone di 8 linee anch esse configurabili sia in ingresso che in uscita identificate dalle sigle RBO 281 RB2 RB4 RB5 RB E RB7 La suddivisione delle linee in due porte distinte amp dettata e dai vincoli dell architettura interna del 16 84 che M prevede la gestione di dati di lunghezza massima pari a 8 bit 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 PORTE 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 in essi vengono posti i dati che debbono essere inviati alle singole
65. ll istruzione presente nella locazione di memoria 0004H denominata Interrupt vector vettore d interrupt E da questo punto che dobbiamo inserire la nostra subroutine di gestione dell interrupt denominata Interrupt Handler Dato che qualunque interrupt genera una chiamata alla locazione 0004H registro INTCON sono presenti dei flag che indicano qual l evento che ha generato l interrupt vediamoli e INTF bit 1 TOIF bit 2 RBIF bit 0 Quando generato un interrupt il PIC disabilita automaticamente il bit GIE Global Interrupt Enable del registro INTCON in modo da disabilitare tutti gli interrupt mentre gi in esecuzione un interrupt handler Per ritornare al programma principale e reinizializzare a 1 questo bit occorre utilizzare l istruzione RETFIE 22 4 4 4 4 1 REGISTRO TMRO All interno del microcontrollore PIC 16F84 presente anche un timer ad 8 bit che permette di eseguire precise temporizzazioni Il registro 74490 un contatore ovvero un particolare tipo di registro il cui contenuto incrementato con cadenza regolare e programmabile direttamente dall hardware del PIC In pratica a differenza di altri registri il 7MRO non mantiene inalterato il valore che gli memorizzato ma lo incrementa continuamente se ad esempio scriviamo in esso il valore 10 con le seguenti istruzioni 10 movwf dopo un tempo a quattro cicli macchina il contenuto del registro co
66. llo STACK il valore del registro PC 1 modo da poter riprendere l esecuzione dall istruzione successiva alla CALL quindi scrive nel PC l indirizzo della subroutine saltando all esecuzione di quest ultima Il valore originale del PC viene ripristinato all uscita della subroutine con l esecuzione dell istruzione di ritorno RETURN o RETLW Nel PIC16C84 sono disponibili 8 livelli di stack per cui il numero massimo di CALL rientranti ovvero di istruzioni CALL all interno di subroutine che a loro volta contengono altre CALL amp limitato ad 8 livelli Note Questa istruzione non influenza nessun bit di stato 27 CLRF CL RF Azzera il registro Sintassi clrf f Operazione equivalente f O Descrizione Questa istruzione azzera il valore contenuto nel registro indirizzato dal parametro f Esempio Ipotizziamo di voler azzerare il registro TMRO il cui indirizzo O1H esadecimale l istruzione da eseguire sara 01H Dopo l esecuzione di questa istruzione il bit Z del registro STATUS viene messo a 1 CLRW CL RW Azzera il registro W Sintassi clrw Operazione equivalente W O Descrizione Azzera il valore contenuto nel registro W Note Dopo l esecuzione di questa istruzione il bit Z del registro STATUS viene messo a 1 CLRWDT CL RW 59044 Reset del timer del watchdog Sintassi clrwdt Descrizione Questa istruzione deve essere utilizzata quando programmiamo il PIC con l opzione Watchdog abilitata fusib
67. mabili in circus P1C170752 819251 RE XC SPL US ART 17756 15384x16 50 i2 8bi 3 I3C SPI US AR T 062 8192518 66 3 3C SPL US ART In tabella 1 1 vi sono elencate le fondamentali caratteritiche per ogni famiglia il tipo ed estensione della memoria sia per il programma che per i dati la frequenza massima di clock la presenza integrata nel chip di timer del WDT Watch Dog Timer di A D Convertitore Analogico Digitale di uscita PWM Pulse Width Modulation di Comparatori di tensione infine il numero di ingressi digitali I O Nei microcontrollori Microchip abbiamo tre tipi di memoria EPROM EEPROM Flash OTP Eprom non finestrati I modelli con memoria EPROM sono dotati di una piccola finestra tramite la quale utilizzando una comune lampada a raggi ultravioletti possibile cancellare il programma contenuto al loro interno Di solito vengono impiegati in fase di sviluppo per la creazione di prototipi infatti 6 possibile cancellarmi e riprogrammarli un centinaio di volte I modelli con memoria EEPROM hanno la caratteristica di poter cancellare il programma al loro interno elettricamente con impulsi elettrici Anch essi vengono usati in fase di sviluppo con la particolarit di essere veloci nella cancellazione e riprogrammazione con la possibilit di cancellarli e ripogrammarli
68. mincia ad essere incrementato a 11 12 13 e cos via con cadenza costante e del tutto indipendente dall esecuzione del resto del programma Una volta raggiunto il valore 255 il registro TMRO azzerato automaticamente riprendendo quindi il conteggio non dal valore originariamente impostato ma da zero La frequenza di conteggio direttamente proporzionale alla frequenza di clock applicata al chip e pu essere modificata programmando opportunamente alcuni bit di configurazione PRESCALER Pad i Ps0 TOCS I blocchi Fosc 4 e TOCKI riportati in blu rappresentano le due possibili sorgenti di segnale per il contatore TMRO Fosc 4 un segnale generato internamente al dal circuito di clock ed pari alla frequenza di clock divisa per quattro TOCKZ un segnale generato da un eventuale circuito esterno ed applicato al pin TOCKT corrispondente al pin 3 nel PIC16F84 I blocchi TOCS e PSA riportati in verde sono due commutatori di segnale sulla cui uscita presentato uno dei due segnali in ingresso in base al valore dei bit TOCS e PSA del registro OPTION blocco PRESCALER un divisore programmabile Come abbiamo accennato prima il registro Option serve per gestire il timer interno del nostro PIC Difatti tramite questo registro si pu impostare il moltiplicatore del presca er decidere se assegnarlo al timer o al watch dog e impostare altre funzioni come da schema sotto riportato 23 4 4 2 REGISTRO OPTION RIW 1
69. mma 4 Compilazione Analisi 6 una fase molto importante perch si descrive cosa deve fare il programma si considerano le variabili da utilizzare e le funzioni che si devono eseguire Realizzazione di uno schema a blocchi o flow chart In questa fase invece si realizza uno schema primitivo del programma che ci permetter di individuare eventuali errori nel terzo passaggio Questi flow chart hanno dei blocchi standard che rappresentano delle operazioni particolari dentro questi blocchi vanno inserite delle istruzioni o dei valori I principali blocchi per realizzare uno schema sono Questo blocco attribuisce i valori alle variabili inizializza crea le variabili nella ram dell elaboratore e visualizza il valore di una variabile Questo blocco ha invece ha la funzione di eseguire una istruzione per intenderci le operazioni aritmetiche e altre funzioni Questo blocco invece esegue una scelta vero o falso se vero il programma esegue una certa serie d istruzioni mentre se falso ne esegue una serie diversa Questo comando si usa quando si deve uscire da un ciclo o si deve fare una scelta Questo blocco viene posto all inizio e alla fine dello schema a blocchi e rappresenta soltanto dove il programma inizia e dove finisce Questi blocchi sono collegati da rami orientati che definiscono la sequenza delle operazioni da svolgere 22 Esempio su come si esegue l analisi e lo schema a blocchi Questo programma conta da O fino a 10
70. o di piedini che la compongono Prima d impostare le porte di comunicazione bisogna dire al programma compilatore che ora si sta scrivendo nella memoria di programma ci si ottiene scrivendo ORG 00h 59 Esempio Blocco note File Modifica Cerca DEFIME Cost 2 La costante Cost uquale a 2 ORG OAH Inizio scrittura programma bsf STATUS RPO Setta a uno il bit RBB del registro Status clrf PORTA Setta a zero PORTA clrf PORTB Setta a zero PORTE movlw B 81811 Muovi la costante 81811 nel registro W movuf TRISA Muovi dall accumulatore W al registro Trish noulw B 81818181 Muovi la costante 81818181 nel registro W TRISB Muovi dall accumulatore W al registro TrisB bef STATUS RP Setta a uno il bit del registro Status listato programma end P Una volta specificata l area in cui si scrive dobbiamo settare a livello alto il bit RPO del registro STATUS questa operazione serve ad impedire che per errore durante l esecuzione del programma questi parametri vengano modificati Ci non toglie la possibilit di modificare in seguito l impostazione delle porte A questo punto si muove il valore con notazione binaria dentro i due registri Tris si setta a zero il bit RBO e si comincia a scrivere il programma Stilato il programma bisogna concludere con end per dire al programma compilatore che il listato terminato 6 4 2 Programma compilatore Per generare il file hex bisogna disporre di un
71. o k pu essere specificato utilizzando direttamente il valore numerico dell indirizzo oppure la relativa label Esempio org loop goto loop Questro programma esegue un ciclo loop infinito Note Questa istruzione non influenza nessun bit di stato INCF INC Incrementa il valore del registro all indirizzo F Sintassi incf Operazione equivalente d f 1 dove d pu essere W o f Descrizione Incrementa il contenuto del registro all indirizzo f e memorizza il risultato nello stesso registro o nell accumulatore W in base al valore del flag d Note Questa istruzione influenza il bit Z del registro STATUS e Zvalelseilrisultato dell operazione vale 41 INCFSZ INC 5 Z Incrementa il valore del registro f e salta l istruzione successiva se il risultato vale zero Sintassi incfsz Operazione equivalente d f 1 dove d pu essere W o f se d O salta Descrizione Incrementa il valore del registro all indirizzo f e se il risultato vale zero salta l istruzione successiva Il risultato dell incremento pu essere memorizzato nello stesso registro f oppure nell accumulatore W in base al valore del flag d Esempio counter equ OCH org OOH movlw 250 counter 250 movwf counter loop incfsz counter F X counter counter 1 counter 0 2 Si esce goto loop continua Questa programma esegue per 6 volte l istruzione incfsz finch esce per counter 0 Essendo counter un regis
72. oi ancora una volta per tornare a 00h in totale 256 volte Quindi la routine d interrupt viene chiamata con una frequenza fi ft 256 1000000 256 3906 25 Hz ovvero ogni 256 ms 1 fi Con il quarzo assegnato 4 MHz questo il pi grande periodo di temporizzazione che si pu ottenere Variando il valore impostato nel timer maggiore di 00h si possono ottenere valori di periodo pi piccoli il timer impiega meno tempo a raggiungere FFh Dalla osservazioni precedenti si pu trovare una formula che stabilisce la frequenza e il periodo con cui si attiva a routine d interrupt fi ti fosc 4 256 Nt 256 Nt fosc 4 dove con Nt si indicato il valore in decimale con cui inizializzato il timer 26 Esempio con prescaler Frequenza del quarzo 4 MHz Timer impostato a 00h Prescaler con fattore di divisione 256 Il timer incrementato con una frequenza ft fosc 4 256 4000000 4 256 3906 25 Hz Essendo 256 il fattore di divisione impostato con il prescaler Quindi la routine d interrupt viene chiamata con una frequenza fi ft 256 396 25 256 15 258 ovvero ogni 65 5 ms 1 fi Con il quarzo assegnato 4 MHz questo il pi grande periodo di temporizzazione che si pu ottenere utilizzando anche il prescaler Le formule che stabiliscono la frequenza e il periodo con cui si attiva la routine d interrupt sono fi fosc 4 Np x 256 Nt ti Np x 256 Nt fosc 4
73. ore per le seguenti caratteristiche e Una CPU a 8 bit denominata CORE e Una memoria programmata di tipo ROM EPROM o EEPROM e Una memoria dati di tipo RAM e Alcune porte di Ingresso Uscita Un Timer a 8 bit completo di prescaler a sette bit e Un watchdog digitale e Un oscillatore di Clock pilotato da un quarzo esterno e Un ingresso di interrupt 13 F Data Bus EEPROM Data Memory RAM EEPROM File Registers EEDATA km Data Memory 64 8 68 8 fi RAN Addr EEADR r_ Instruction Register Direct Addr T Indirect TMRO gt RA amp TOCKI STATUS reg E Instruction Oscillator Decode amp Start up Timer Gontrol Timing n Watchdog Generation Le Timer OSC2ICLKOUT OSC T CLKIN Tutte queste unit in realt rendono una MCU molto simile ad un vero e proprio computer in miniatura racchiuso all interno di un unico circuito integrato ecco perch pi corretto definirlo come microcontrollore 2 1 CPU La periferica pi importante contenuta all interno di un PIC la CPU detta anche Core essa in pratica il cervello di tutto il sistema quella che comunica con tutte le varie periferiche interne attraverso dei canali di comunicazione chiamati Bus La CPU ha il compito di svolgere il programma ed elaborare i dati 2 2 L ALU L ALU acronimo di Arithmetic and Logic Unit
74. pettivamente a PortA e PortB Il registro TrisA un registro composto da 5 bit tale infatti il numero di pin che corrispondono a questa porta di comunicazione partendo con RAO per il bit meno significativo fino a RA4 per il bit pi significativo Con 0 si definisce un pin di uscita mentre con 1 un pin di ingressoi La stessa cosa si fa per la PortB con l unica differenza che il suo registro TrisB composto da 8 bit tale infatti il numero di piedini che la compongono P Esempio Blocco note File Modifica Cerca PROCESSOR 16F84 Viene usato il PIC 16F8 _ config 8x3BF1 il tipo di clock usato XT RADIX DEC I numeri senza notazione sono decimali INCLUDE P16F84 INC il compilatore usa il sequente file dll ORG G8CH Inizio scrittura variabili costanti Count RES 1 Variabile Cunt equivale a 1 byte HDEFIHE Cost 2 La costante Cost uguale a 2 A questo punto bisogna impostare le porte per far ci bisogna modificare i registri Trisa e Trisb che corrispondono rispettivamente a PortA e PortB Il registro TrisA un registro composto da 5 bit tale infatti il numero di pin che corrispondono a questa porta di comunicazione partendo con RAO per il bit meno significativo fino a RA4 per il bit pi significativo Impostando i bit o a 0 o a 1 abbiamo rispettivamente delle porte di output e input La stessa cosa si fa per la PortB con l unica differenza che il suo registro TrisB composto da 8 bit tale infatti il numer
75. po d integrato usato config OxFFF Questa direttiva definisce il tipo di clock il parametro da inserire dopo l uguale definito dal checksum del programma programmatore RADIX notazione Questa direttiva definisce che tutti i numeri definiti nel programma senza la notazione definita nella direttiva sono da considerarsi decimale DEC esadecimale HEX o binario BIN INCLUDE P16F84 INC Questa direttiva dice al programma compilatore quale libreria usare per creare il file hex RES Questa direttiva dice quanto lunga una variabile se uguale a 1 sar di un byte se 2 sar di due etc DEFINE variabile valore definisce una costante variabile EQU valore definisce una costante 58 6 4 Realizzazione compilazione del source per il PIC 6 4 1 Realizzazione di un listato Per creare un programma hex bisogna avere un file sorgente questo file si pu ottenere con un semplice programma di scrittura come Notepad Le istruzioni vanno scritte incolonnate poich il programma compilatore ammette una sola istruzione per riga La prima cosa da scrivere sono le direttive queste dovranno specificare il tipo di integrato le variabili le costanti e eventualmente il clock Bisogna per le variabili e le costanti specificare l indirizzo dell area ram in cui verranno create che corrisponde a ORG A questo punto bisogna impostare le porte per far ci bisogna modificare i registri Trisa e Trisb che corrispondono ris
76. programma MPLAB l ambiente che si presenta all operatore rappresentato nella figura riportata di seguito In base alla versione del prodotto installato potranno aversi alcune differenze rispetto a quanto raffigurato ESETZEUCENUTETTTEST InT x1 li Ee Eroiect Edt Debug PicatatPlus Tool Wiindos Heb 8 x c r lt _ eee seni 7 2 Creazione di progetto Per procedere all editazione di un programma bisogna innanzitutto creare un nuovo progetto usando il comando New Project del menu a tendina che si apre facendo clic su Project Menu Project New Project Qpen Project Crt HF2 Close Project Save Project Edit Project CrtH F3 Make FLO Build CrtHF10 Build Node AlIt PF1O0 Install Langu Nella finestra New Project che si apre si sceglie un nome per il progetto per esempio ed prj inserendo nel riquadro F e Name e si sceglie poi l unit e la cartella su cui salvarlo dando infine OK Nella finestra di Edit Project che si apre premere il pulsante Change e nella nuova finestra scegliere il 63 microcontrollore 16F84 ed il modo simulazione come illustrato nella figura riportata qui di seguito e premere poi il pulsante OK Ritornati nella finestra Edit Project dare OK lierelopiment Made Hot all peripheral havre support For sim Ulat 7O not simulate d_ LChck for additional information on
77. quisito una buona conoscenza delle caratteristiche tecniche e dei principi di programmazione del microcontrollore 16F84 e dell ambiente MPLAB 8 2 Caratteristiche di base del PIC16F876 Il PIC 16 876 un dispositivo a 28 pin che lavora con frequenza massima di clock pari a 20 MHz e dispone di un set di 35 istruzioni 8 Kword di 14 bit di memoria FLASH di programma 256 byte di memoria EEPROM per i dati 368 byte di RAM per i dati e 3porte I O Port con cinque linee di I O Port B e PortC con 8 linee di I O PIC 16F876 MCLR RAO AHO RBG RATAN RES RAZ AMZ REF REA RAA TOCKI RB2 RASANA RE1 LE RBOTHT OSCAT CLKIMN VDD OSC 1CLKOUT VSS RCOTTOSO CCP2 2 RCG TX CK RCZ CCP1 RC5 SDO RC3 RCA SDI SDE 12 Nella tabella 9 1 riportata di seguito sono descritti i principali segnali del dispositivo Si tenga presente che molti dei pin svolgono pi di una funzione Tab 9 1 MCLR Vpp Reset ingresso per la tensione di programmazione 2 RAO ANO JO digitale Port A ingresso canale 0 analogico 3 RAIL JANI digitale Port A ingresso canale 1 analogico VO digitale Port ingresso canale 2 analogico VO digitale Port A ingresso canale 3 analogico 86 RA4 digitale Port A ingresso clock TMRO 1 O digitale Port ingresso canale 4 analogico 8 ND 9 CLKIN Iner
78. resso la linea RAO utilizzata per il canale ANO ed infine deve tenere conto del ritardo per il Tempo di Acquisizione org 0 SS Olh carica in accumulatore la parola per configurare RAO come i nput tris 05h la pone nel registro TRISB movlw SEh carica in W codice per selezione Vref e canale ANO movwf ADCONI sposta 11 codice nel registro ADCONI banco 1 bef 03h 05h seleziona banco 0 movlw 41h carica in W codice per frequenza canale A D ON movwf ADCONU sposta 11 codice nel registro ADCONO banco 0 call ritardo chiama la routine di ritardo circa 20 us bsf ADCONQ 2 pone ad uno il bit 2 di ADCONO e avvia la conversione loop btfsc ADCONQ 2 test bit 2 di ADCON se 0 fine conversione salta l istruz su ccessiva voto loop se bit 26 1 esegui un nuovo controllo movf adresh 1 carica in accumulatore la parte alta del risultato conversione movwf 20h salva in memoria la parte alta del risultato movf adresl 1 carica in accumulatore la parte bassa del risultato co nversione movwf 21h salva in memoria la parte bassa del risultato 79 9 2 1 I Registri ADCONI ADCONO Nelle tabelle 9 3 e 9 4 sono riportate le modalit per impostare i vari modi di funzionamento del modulo convertitore Tab 9 3 ADCONI ADFM PCFG3 PCFG2 PCFGI I 6 bit pi significativi del registro ADRESH sono posti a 0 ADRESH jn D JD Risultato della conversione 10 bit 6 bit pi significa
79. reventivamente stato abilitato ponendo a uno il bit 6 del registro PIE1 ADIE Perch l interrupt venga riconosciuto deve essere comunque abilitato anche il bit degli n errup di periferica PETE bit 6 del registro INTCO e quello egli interrupt generali GIE bit 7 di INTCON Il programma riportato di seguito usa la tecnica dell n errup per eseguire l acquisizione di un dato analogico Notare come la locazione di memoria 004h sia riservata all inizio della routine di nterrupt e che quindi come prima istruzione deve essere messo un salto all inizio del programma principale inizio loop goto inizio routine d interrupt org 4 movi movwt movi movw bef rettile adresh 1 20h adresl 1 21h 06h programma principale moviy tris bef bsf movlw movwt bsf bef movlw movwft bef bsf bsf call 01h 05h 03h 06h 03h 05h SEh ADCONI SCh 06h 03h 05h 41h ADCONO 06h 0Bh 06h 0Bh 07h ritardo ADCONO 2 carica in accumulatore la parte alta del risultato conve rsione salva in memoria la parte alta del risultato carica in accumulatore la parte bassa del risultato conve rsione salva in memoria la parte bassa del risultato ADIF 0 del registro PIR I azzera bit flag interrupt dell A D ritorno dall interrupt carica in accumulatore la parola per configurare R AU c ome input la pone nel registro TRISB bit RP 0 del registro STATUS bit 1 del r
80. rizzato il risultato Questa istruzione influenza i bit Z del registro STATUS che varr 1 se il risultato dell operazione O 53 Esempio Ipotizziamo di dover effettuare lo XOR tra il registro W ed il registro REG1 da noi definito all indirizzo OCH con la direttiva REG1 EQU possiamo utilizzare l istruzione ILORWF in due forme a seconda di dove vogliamo mettere il risultato ovvero xorwf COUNTER F COUNTER COUNTER XOR W oppure xorwf COUNTER W W COUNTER XOR W Note L OR esclusivo XOR un operazione tra due bit in cui il bit risultante vale O se i due bit sono uguali Spesso lo XOR viene utilizzato nell assembler del PIC per effettuare la comparazione tra due valori in mancanza di un istruzione specifica Vediamo come ipotizziamo di avere un valore nel registro REGI e di voler verificare se uguale 57H Le istruzioni da eseguire sono le seguenti movlw 57H W Valore da comparare 57H isultato W 57H xorwf REGiW W W XOR REGI Effettua lo XOR con il valore in btfss STATUSZ Salta l istruzione seguente se il risultato dello XOR vale ovvero se il valore di REG1 e pari a 57H goto diverso Salta se diverso da 57H goto uguale Salta se uguale da 57H 54 6 Principi base per la programmazione 6 1 Introduzione alla programmazione Per creare un programma bisogna seguire quattro fasi 1 Analisi 2 Realizzazione di uno schema a blocchi o flow chart 3 Scrittura del progra
81. rogramma il registro 1 varr 00101010B mentre il CARRY varr 1 Note Questa istruzione non influenza nessun altro bit di stato oltre al CARRY 49 SLEEP go into standby mode Mette il PIC in standby Sintassi sleep Descrizione Questa istruzione blocca l esecuzione del programma in corso e mette il PIC in stato di standby sleep dall inglese to sleep dormire Esempio org start sleep Note Questa istruzione non influenza nessun bit di stato SUBLW SUB W L Sottrae a k il valore in W Sintassi sublw k Operazione equivalente W k W Descrizione Sottra alla costante k il valore memorizzato nell accumulatore W Esempio org start movlw 10 sublw 12 Dopo aver eseguito questo programma l accumulatore W varr 2 Note Questa istruzione influenza i bit Z DC e C del registro STATUS e Zvalelseilrisultato dell operazione vale e DCvale1se il risultato dell operazione un numero superiore 15 e C vale 1 se il risultato positivo ovvero se il bit 7 del registro contenente il risultato vale 0 e 1 se il risultato 6 negativo ovvero se il bit 7 del registro contenente il risultato vale 1 50 SUBWF SUB W F Sottrae il valore contenuto in W dal valore contenuto nel registro F Sintassi subwf Operazione equivalente d f W dove d pu essere Wo f Descrizione Questa istruzione sottrae il valore contenuto nel registro W dal valore contenuto nel registro indirizzato dal
82. rta automaticamente al livello originario basso gt alto gt basso o alto gt basso alto 2 Low Basso porta il livello del pin a livello basso e lo lascia a tale livello High Alto porta il livello del pin a livello alto e lo lascia a tale livello Toggle inverte il livello ogni volta che viene premuto il pulsante UM 67 Nella simulazione in oggetto deve essere selezionato Toggle per tutti i pulsanti Si deve quindi selezionare un pulsante per volta con il tasto destro Pin belechon e scegliere per ognuno di essi Toggle Nella figura riportato qui sopra Asynchronous Stimulus rappresentata la situazione finale dei quattro pulsanti 7 5 Apertura delle finestre di visualizzazione Per poter seguire le evoluzioni del programma mentre in esecuzione possibile aprire con il menu Windows una serie di finestre per visualizzare i files register di tipo generale i files register di tipo speciale lo stack e la memoria di programma Nella figura riportata in seguito sono Bl Special Funchon Regeter W milir SFR Mame Hex Dec Binary Char tni i da B pc nn H HhnHnnnann option reg FF 255 111111171 status 18 28 00011000 FSF 00 SESTO porta 88 aaagagdg trisa 1F 11 00011119 porto 00 BASSAS Larai trisb FF 255 11111111 eedata da 0 nnnduddd i 11 do BBaangagag visualizzate le finestre eeadr e Special Function Register tra l altro di
83. sono la parte pi consistente di qualsiasi programma Nel programmare in Assembler si far grande uso di queste strutture visto che il set d istruzioni del PIC 16F84 comprende solamente 35 istruzioni ciclo loop Questa struttura quasi sempre accoppiato con un controllo in testa in coda con questa operazione si esegue un certo numero di volte una serie di funzioni fino a che sia soddisfatta una condizione Questa condizione verificata dal controllo in testa o in coda la differenza tra queste due opzioni che nel controllo in testa la condizione controllata subito senza quindi eseguire ci che sta all interno del ciclo mentre nel controllo in coda prima di verificare la condizione si esegue ci che sta all interno del ciclo Esempio di ciclo con controllo in testa o in coda Controllo in testa Ingresso Questo tipo di ciclo ha un controllo in testa ovvero il dato viene prima controllato nel blocco di scelta se la condizione verificata il ciclo viene saltato se la condizione invece non verificata il programma esegue il ciclo Resto del fino a che si crea la condizione di uscita Condizione 2 usc p d Si 1 programma Operazione Uscita Controllo in Coda Ingresso Questo ciclo esegue prima l operazione e poi controlla se la condizione soddisfatta Nel caso positivo esce dal ciclo altrimenti continua l iterazione Operazione Resto del programma Uscita
84. tardi pari ad un ciclo macchina Esempio Utilizzando un quarzo da 4MHz potremo ottenere un ritardo pari ad 1ys per ogni istruzione NOP inserita nel nostro source nop X Esegue un ritardo pari ad 1 6 Note La NOP non influenza nessun bit di stato 45 OPTION OPTION Assegna il valore in W al registro OPTION Sintassi option Operazione equivalente OPTION W Descrizione Questa istruzione memorizza nel registro speciale OPTION il valore contenuto nell accumulatore W Esempio org start movlw 01000100B option Note Questa istruzione esiste per mantenere la compatibilit con i PIC prodotti finora la Microchip ne sconsiglia l uso In alternativa consigliabile usare le seguenti istruzioni org start bsf STATUS RPO Attiva il banco registri 1 movlw 01000100B movwf OPTION REG In pratica si consiglia di scrivere direttamente nel registro OPTION presente nel banco 1 dei registri del PIC utilizzando la MOVWF anzich l istruzione OPTION che in futuro potrebbe non essere pi implementata Questa istruzione non influenza nessun bit di stato RETFIE RET F E Ritorna da una subroutine Sintassi retfie Descrizione Questa istruzione deve essere inserita al termine di ogni subroutine di gestione degli interrupt per ridare il controllo al programma principale 46 Esempio org loop goto loop Loop infinito org 04H Interrupt vector intHandler retfi Ritorna dall interrupt
85. tardo port A 0 ritardo port A 0 ancora Fh contaz Fh conta conta Loop1 conta loop pin porta A tutti d uscita spegne LED alto bit 0 porta accende il LED porta basso bit porta spegne LED 70 La procedura da seguire qui sintetizzata 1 10 11 12 13 14 15 aprire un nuovo progetto Project gt New assegnargli il nome geni pjt Dare OK nella finestra New Project Nella finestra Edit Project che si apre scegliere in Development Mode MPLAB SIM 16F84 e dare OK Con File gt New aprire la finestra per editare il sorgente Salvare il sorgente con File gt Save As attribuendogli il nome geni asm Con Project gt Edit Project riaprire la finestra Edit Project Fare clic su geni hex nel riquadro Project Files Fare clic su Node Properties Dare OK nella finestra che si apre ritornando quella di Edit Project Fare clic sul pulsante Node Scegliere nella finestra che si apre il programma sorgente salvato gen asm e dare OK Con Project gt 5 Project salvare il progetto appena creato Con Project Make Project assemblare il file sorgente Se ci sono errori correggerlo e riassemblarlo Con Windows gt Special Functio Register aprire la finestra dei registri speciali Con Debug Break Setting inserire due punti di arresto in corrispondenza delle etichette accendi e spegni Avviare l esecuzione del programma con Debug gt Run gt Run
86. ti registri svolgono una funzione speciale per il PIC e non possono essere utilizzati per scopi diversi da quelli per cui sono stati riservati Questi registri speciali si trovano nelle locazioni pi basse dell area di memoria RAM secondo quanto illustrato di seguito potremo scrivere leggere modificare 12 Le locazioni di memoria presenti nel REGISTER FILE sono indirizzabili direttamente in uno spazio di memoria che va da 00H a 2FH per un totale di 48 byte denominato pagina 0 Un secondo spazio di indirizzamento denominato pagina 1 va da 80H a AFH Per accedere a questo secondo spazio necessario ricorrere ai due bit ausiliari RPO e RPI Le prime 12 locazioni della pagina 0 da e della pagina 1 da 80H 8BH sono quelle riservate alle File Address File Address funzioni speciali per il funzionamento del PIC e non 90h Indirect Indirect 80h possono essere utilizzate per altri scopi 01h TMRO 81h Le 36 locazioni in pagina indirizzate da OCH a ZFH 02h PCL PCL 82h possono essere utilizzate liberamente dai nostri 03h 83h programmi per memorizzare variabili contatori ecc 04h FSR FSR 84h I registri specializzati del PIC sono utilizzati molto di 05h 85h frequente nei programmi 06h 86h Ad esempio si ricorre alla coppia di registri om em specializzati 791 54 TRISB per definire quali linee di 08h BBh I O sono in ingresso e quali in uscita Lo stesso stato 09h 89h logico del
87. tivi del registro ADRESL sono posti a 0 ADRESH ADRESL ceni della conv Pakane GU bit e a RAO o to p p fan fan fan m o p 1 AN Jan AN n v 2 17 9 44 bia AN Av JAN Vo Va o f Jo 1 DIG Ys 0 1 I DIG DIG DIG DIG 8 HAN Vago Vie RO DIG DIG DIG DIG AN Vs RAG ic Nota per i bit PCGF3 PCGFO non sono state considerate alcune combinazioni perch danno la stessa configurazione di altri canali poich il PIC 16F876 ha solamente cinque ingressi analogici 90 ADCONO ADCSO GO DONE ADON IMMO IF c ene si aa ADCSO Massima frequenza possibile per Fosc __0 1 Fos 8 8Tosc 1 0 22 32Tox 20 MHz 1 1 Fre Tre clock derivato da un oscillatore RC interno oe MMC CHSI 50 CANALE SELEZIONATO ANO su ANI su RAI 2149100 o 1 CEE Reza AN2 su RA2 e EN AN3 su RA3 a ANA su RAS resi non in atto T bit DONO automaticamente a 0 al termine della conversione Il modulo A D operativo Il modulo A D non operativo 9 2 2 I Registri ADRESH e ADRESL Come evidenziato nella tabella riportata di seguito in base al valore assegnato al bit 7 ADFM del registro ADON il dato memorizzato nei registi ADRE
88. tmetica zero bit 5c 44 di digit carry posto a uno se c riporto dal semi byte meno signi ficativo bitO C flag di carry posto a uno quando c riporto dal bit pi significativo OPTION REG bit7 RBPU disabilita o abilita 1 resistori interni di pulf up sulla PORTA B 0 disabilita resistori interni 1 abilita resistori interni seleziona il fronte del segnale di interrupt su RBOV INT bit INTEDG 0 fronte di discesa 1 fronte di salita 202 seleziona la sorgente per il segnale di clock del timer TMRO bits TOCS 0 jcockinemo 0 I clock estemo su RA4 TOCKI seleziona il fronte del segnale per il clock del timer su bit4 TOSE o fronte di discesa frntedisalita o assegna il prescaler al timer TMRO o al WATCH DOG timer WDT oo pm O S E y PS2 Selezionano il fattore di divisione per il prescaler per il TMRO e per il bitl PSI WDT bit 0 000 1 2 001 1 4 010 1 8 011 1 16 100 1 32 101 1 64 110 1 128 111 1 256 BE 000 1 1 001 1 2 010 1 4 011 1 8 100 1 16 101 1 32 110 1 64 111 1 128 76 abilitazione generale di tutti eli interrupi GIE EN tutti gli interrupt sono disabilitati zu tutti gli interrupt sono abilitati abilitazione dell interrupt delle periferiche bit6 disabilitato 1 abilitato abilitazione dell interrupt di superamento di capacit di TM
89. tro a 8 bit quando viene incrementato dal valore 255 assume nuovamente valore 0 Note Questa istruzione non influenza alcun bit di stato IORLW I ORL W Effettua l OR inclusivo tra W ed una costante Sintassi iorlw k Operazione equivalente W W OR k Descrizione Effettua l OR inclusivo tra il valore contenuto nell accumulatore W ed il valore costante k 42 Esempio org OOH start movlw 00001111B ioriw 11110000B Dopo aver eseguito questo programma l accumulatore W varr 11111111B Note Questa istruzione influenza il bit Z dEl registro STATUS e Zvoaleiseil risultato dell operazione vale IORWF I OR W F Effettua l OR inclusivo tra il valore contenuto in W ed il valore contenuto Sintassi iorwf Operazione equivalente d f OR W dove pu essere W o f Descrizione Questa istruzione effettua l OR inclusivo tra il valore contenuto nell accumulatore W ed il valore contenuto nel registro indirizzato dal parametro f Il parametro d determina dove viene memorizzato il risultato dell operazione Esempio parmi equ OCH org OOH movlw 00001111B movwf parmi movlw 111111118 iorwf Al termine dell esecuzione il valore del registro parmi sar 11111111B Note Questa istruzione influenza il bit Z del registro STATUS e Zvalelseilrisultato dell operazione vale 43 MOVLW MOV L W Assegna a W un valore costante Sintassi movlw Operazione equivalente W k Descrizione Ass
90. ubisce variazioni ma viene generato un interrupt software e Sigenera un speciale evento di trigger in modalit diversa in base al modulo usato 1 Modulo 1 viene posto a livello alto il bit CCP1IF viene resettato TMR1 2 Modulo 2 viene posto a livello alto il bit CCP2IF viene resettato TMRI viene avviata una conversione A D se il convertitore 6 abilitato Il tipo di evento da generare deve essere programmato nel registro CCP1CON per utilizzare il Modulo 2 nel registro CCP2CON 99 11 3 Modo PWM Nella modalit PWM Pulse Wide Modulation viene variato il duty cycle di un segnale con un certo periodo prestabilito Il periodo del segnale deve essere caricato nel registro PR2 registro di periodo per il TMR2 Il duty cycle viene invece caricato nel registro CCPRIL otto bit di ordine pi alto e sui bit 5 e bit 4 del registro CCPICON due bit di ordine pi basso La lunghezza complessiva del valore che pu essere attribuito al duty cycle quindi di 10 bit Il valore caricato in PR2 viene continuamente confrontato con il valore di TMR2 che incrementato la frequenza f osc 4 quando i due valori sono uguali viene posto alto il pin RC2 CCPI uscita del PWM e TMR2 viene azzerato Poi TMR2 sempre incrementato la frequenza fesc 4 viene confrontato con CCPRIL e i bit 5 e bit 4 del registro CCPICON Quando c uguaglianza viene posto a zero il pin RC2 CCPI vedere figura Poi il processo inizia da capo generando un n
91. uovo periodo del segnale TMR2 CCPR1L CCP1CON BITS TMR2 PR2 88 _ _ duty cicle duty cicle periodo del PWM periodo del Le operazioni da compiere per utilizzare il modulo CCP in modalit PWM sono le seguenti e Configurare il pin RC2 CCP1 come uscita e Caricare in PR2 il valore da attribuire al periodo del PWM Caricare nel registro CCPRIL e nei bit 5 e bit 4 di CCP1CON il valore del duty cycle e Configurare il prescaler di TMR2 con i bit T2CKPS1 2 50 del registro 2 Abilitare TMR2 porre a uno il bit 2 2 Configurare il registro per modalit PWM Le formule per il calcolo del periodo di PWM e del duty cycle sono periodo PWM Tosc x 4 x Valore prescaler TMR2 x PR2 1 durata duty cycle x 4 x Valore prescaler TMR2 x CCPRII CCPICON bitb bit4
92. urante il quale il condensatore il tempo di holding 120 pF rimane connesso con la tensione posta in ingresso sul canale analogico prescelto Il Tempo di Acquisizione legato a fattori quali la temperatura ambiente la tensione di alimentazione Vo il valore della capacit di 0 ding e valori resistivi del canale analogico Il funzionamento corretto del modulo A D legato alla scelta del Tempo di Acquisizione 7aca Acquisition Time Per una temperatura ambiente di 50 C una Voo 5V e una esistenza della sorgente analogica inferiore a 10 si pu assumere 20 valore tipico 40 Il Tempo di Conversione uguale a 12 legato invece al tipo di sorgente di clock prescelta per il convertitore e alla frequenza del clock di sistema Nel caso si scelga a sorgente R si 4 us tipico che pu variare da 2 us 6 us Se per esempio si ha un clock di sistema pari a 4 MHz e si impostato come sorgente 5 8 con ADCSI 0 e ADCSO 1 si ha 6 TAD 8 TOSC 8 fOSC1 8 4 10 2 us e quindi 12 24 us 93 9 4 Acquisizione con generazione d interrupt Per controllare il termine della conversione pu essere testato il bit GO DONE del registro ADCONO per vedere quando esso va a livello basso o ricorrere alla tecnica dell interrupt Infatti al termine della conversione il bit 6 del registro IR1 ADIF viene posto ad uno generando un interrupt se p
93. utilizzato per ridurre il consumo di corrente nei momenti in cui il PIC non utilizzato perch in attesa di un evento esterno L istruzione SLEEP utilizzate per mettere il PIC in Power Down Mode e ridurre di conseguenza la corrente assorbita che passer da circa 2mA a 5 volt con clock di funzionamento a 4Mhz a circa 24A Per entrare in Power Down Mode basta inserire questa istruzione in un punto qualsiasi del nostro programma SLEEP Qualsiasi istruzione presente dopo la SLEEP non sar eseguita dal PIC che terminer in questo punto la sua esecuzione spegner tutti i circuiti interni tranne quelli necessari a mantenere lo stato delle porte di I O stato logico alto basso o alta impedenza ed a rilevare le condizioni di risveglio Per risvegliare il PIC dal suo sonno possono essere utilizzate diverse tecniche 1 Resetdel PIC mettendo a il pin MCLR pin 4 2 Timeout del timer del Watchdog se abilitato 3 Verificarsi di una situazione di interrupt nterrupt dal pin RBO INT cambio di stato sulla porta B termine delle operazioni di scrittura su EEPROM Nei casi 1 e 2 il resettato e l esecuzione ripresa dalla locazione 0 Nel caso 3 il si comporta come nella normale gestione di un interrupt eseguendo per primo l interrupt handler e quindi riprendendo l esecuzione dopo l istruzione SLEEP Perch il PIC sia risvegliato da un interrupt devono essere abilitati opportunamente i 7 ag del registro ZNTCON 3 2 Int
94. uzione esiste per mantenere la compatibilit con i PIC prodotti finora la Microchip ne sconsiglia l uso In alternativa consigliabile usare le seguenti istruzioni org OOH start bsf STATUS RPO Attiva il banco registri 1 movlw 11111111B movwf TRISA In pratica si consiglia di scrivere direttamente nei registri TRIS presenti nel banco 1 dei registri del PIC utilizzando la MOVWF anzich l istruzione TRIS che in futuro potrebbe non essere pi implementata Note Questa istruzione non influenza nessun bit di stato 52 XORLW E OR L W Effettua l OR esclusivo tra W ed una costante Sintassi xorlw k Operazione equivalente W W XOR k Descrizione Effettua l OR esclusivo tra il valore contenuto nell accumulatore W ed il valore costante k Esempio org OOH start movlw 00000000B xorlw 11110000B Dopo aver eseguito questo programma l accumulatore W varr 11110000B Note Questa istruzione influenza il bit Z del registro STATUS e Zvalelseilrisultato dell operazione vale XORWF X OR W F Effettua l OR esclusivo tra il valore contenuto in W ed il valore contenuto nel registro F Sintassi xorwf Operazione equivalente d f W dove pu essere W Descrizione Questa istruzione effettua esclusivo XOR tra il valore contenuto nell accumulatore W ed il valore contenuto nel registro indirizzato dal parametro f Il parametro d un flag che indica su quale registro deve essere memo
95. zione dei microcontrollori senza toglierli dal circuiti di simulazione Le fasi di predisposizione alla programmazione e quella di trasferimento dei dati sono monitorate da due led rispettivamente rosso e verde Alimentatore da rete L alimentazione del sistema 6 affidata ad Modulo Controllo un alimentatore switching con protezione Luminosit dai corto circuiti in grado di fornire una tensione a 15V 17 dalla rete 220 e 50H Modulo Controllo Temperatura Cavo di interfacciamento ingress Un cavo di interfacciamento 5232 mt 1 2 Software di gestione costituito da Display 7 software per la programmazione dei PIC esempi di programmazione e simulazione Esadecimale Manuale di programmazione con Display LCD Introduzione al microcontrollore Set di istruzioni con esempi applicativi Introduzione Per microcontrollore s intende comunemente un sistema a microprocessore integrato su di un unico chip che comprende oltre alla CPU una memoria di programma che pu essere di diversi tipi EPROM Erasable Programmable Read Only Memory EEPROM Electrically Erasable Programmable Read Only Memory una memoria Ram generalmente di dimensioni ridotte per i risultati intermedi dell elaborazione e per lo stacke i periferici di I O vari Il microcontrollore un dispositivo fondamentalmente programmabile in grado di svolgere div
96. zzato il risultato 39 Esempio Con il seguente programma scriviamo il valore 23H nel registro all indirizzo OCH e quindi lo decrementiamo di uno Al termine dell esecuzione il registro alla locazione OCH conterr il valore 22H movlw 23H Scrive in W il valore 23H movwf Copia nel registro OCH il valore di W decf Decrementa il valore Contenuto nel registro Questa istruzione influenza il bit Z del registro STATUS e Zvalelseilrisultato dell operazione vale DECFSZ DEC 5 2 Decrementa il valore del registro f e salta l istruzione successiva se il risultato vale zero Sintassi decfsz Operazione equivalente d f 1 dove d pu essere W o f se d O salta Descrizione Decrementa il valore del registro all indirizzo f e se il risultato vale zero salta l istruzione successiva Il risultato del decremento pu essere memorizzato nello stesso registro f oppure nell accumulatore W in base al valore del flag d Esempio counter equ OCH org OOH movlw 10 counter 10 movwf counter loop decfsz counter F counter counter 1 counter Si esce goto loop No continua Questa programma esegue per 10 volte l istruzione decfsz finch esce per counter O Note Questa istruzione non influenza alcun bit di stato 40 GOTO GO TO Vai esecuzione all indirizzo Sintassi goto k Descrizione Determina un salto del programma in esecuzione all indirizzo k parametr
Download Pdf Manuals
Related Search
Related Contents
Purolator Service Guide Dossier de presse NOVITAS Vendredi 11 juillet 2014 Celluon CL800BT German Horno de microondas de 1.2 pies cúbicos - Acero inoxidable Samsung Poseidon Big Asia Top Loader with Silver Nano, 13 kg, Imperial Silver User Manual Telekommunikation 2013 - M.Fischer Büro Trust Pebble Infinity Class II, Microbiological Safety Cabinet d2 USB 3.0 Manual Copyright © All rights reserved.
Failed to retrieve file