A/D CON PIC 16F877 Sommario INTRODUZIONE .................................................................................................................................................. 2 SELEZIONARE I BANCHI ...................................................................................................................................... 2 ADCON0 .............................................................................................................................................................. 4 ADCS1, ADCS0 ................................................................................................................................................. 4 CH2, CH1 E CH0 ............................................................................................................................................... 5 GO/DONE ........................................................................................................................................................ 6 ADON .............................................................................................................................................................. 7 ESEMPIO 1 .......................................................................................................................................................... 7 ADCON1 .............................................................................................................................................................. 8 ADFM .............................................................................................................................................................. 8 PGF3, PGF1 E PGF0 ......................................................................................................................................... 9 ESEMPIO 2 ........................................................................................................................................................ 10 PASSI PER ESEGUIRE UNA CONVERSIONE A/D ............................................................................................... 10 1 INTRODUZIONE: In commercio ci sono moltissimi PIC, che hanno caratteristiche diverse sia fisiche e sia nella sua composizione interna. Il PIC in generale è un microcontrollore e NON un microprocessore. La sostanziale differenza è che il microcontrollore possiede periferiche che il microprocessore non ha, come ad esempio la RAM, la EEPROM ed altre. La particolarità di alcuni PIC più “evoluti”, è quella di possedere più convertitori analogici digitali, con la caratteristica di far corrispondere a un istante “t” una combinazione binaria, formata da 10 Bit. La quantità dei convertitori A/D varia da PIC a PIC; in particolare il PIC16F877 ne ha 8. Questo PIC è composto principalmente da una PORTA da 6 Bit, una PORTB, PORTC, PORTD da 8 Bit, e per finire una PORTE da 3 Bit. In sostanza questo microcontrollore ha 33 piedini che possono essere programmati come ingressi o uscite. Di questi piedini, solo 8 hanno la caratteristica di poter convertire un segnale analogico in una combinazione binaria. Con l’introduzione dei convertitori A/D nel microcontrollore, si possono elaborare e/o gestire i segnali provenienti dai trasduttori o sensori, come ad esempio un trasduttore di temperatura, di pressione, e così via. Per trasduttore s’intende un mezzo capace di convertire una grandezza fisica in un segnale elettrico. Ogni PIC al suo interno è strutturato diversamente e la caratteristica del PIC 16F877 è di avere 4 banchi (Bank) di memoria dove vengono collocati i differenti registri. I registri che servono per eseguire una conversione da analogico a digitale sono 4, ovvero ADCON0, ADCON1, ADRESH e ADRESL suddivisi rispettivamente in due banchi, Bank 0 e Bank 1. SELEZIONARE I BANCHI: Per selezionare i diversi banchi di memoria si deve dare un valore al registro STATUS, in particolar modo sono i Bit denominati RP1 e RP0. La tabella sottostante mostra come configurare i bit RP1 e RP2 contenuti nel registro STATUS per muoversi nei banchi. BANK STATUS, RP1 STATUS, RP0 0 0 0 1 0 1 2 1 0 3 1 1 2 Questo programma mostra il procedimento su come cambiare i vari banchi. ;BANCO 0 bcf STATUS,RP0 bcf STATUS,RP1 ;BANCO 1 bsf STATUS,RP0 bcf STATUS,RP1 ;BANCO 2 bcf STATUS,RP0 bsf STATUS, RP1 ;BANCO 3 bsf STATUS,RP0 bsf STATUS,RP1 3 LA CONVERSIONE: Per portare a termine con successo una conversione analogica‐digitale, Il PIC 16F877 si serve di quattro registri situati in due banchi (Bank0 e Bank1). Gli ingressi disponibili programmabili per la conversione sono 8: RA0, RA1, RA2, RA3, RA5, RE0, RE1 e RE2. Con una configurazione opportuna si può scegliere la tensione di riferimento che può essere esterna con –VREF (RA2) e +VREF (RA3), oppure interna gestita dal microcontrollore dove compresa tra VSS (0V) per –VREF e VDD (5V) per +VREF . I registri necessari per la conversione sono i seguenti ADCON0, ADRESH situati nel Bank 0 e ADCON1, ADRESL nel Bank 1. I registri ADCON0 e ADCON1 servono per impostare i convertitori, mentre ADRESH e ADRESL sono riservati per ospitare il risultato dell’operazione, che può avvenire da destra oppure da sinistra. 1. REGISTRO ADCON0: Il registro ADCON0 è composto da 8 bit, è situato nel Bank 0 ed è schematizzato così come segue nella tabella. R/W‐0 R/W‐0 R/W‐0 R/W‐0 R/W‐0 R/W‐0 U‐0 R/W‐0 ADCS1 ADCS0 CHS2 CHS1 CHS0 ‐‐‐‐‐‐‐‐‐‐‐ ADON GO/ Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 • ADCS1, ADCS0: I bit 7 e 6 (ADCS1 e ADCS0) sono utilizzati per impostare una frequenza di clock per la conversione. La tabella sottostante mostra come devono essere opportunamente settati i registri ADCS1 e ADCS0. ADSC 1 ADSC 0 Frequenza 0 0 Fosc/2 0 1 Fosc/8 1 0 Fosc/32 1 1 Frc Frc= Clock derived from the internal A/D module RC oscillator Oscillatore interno dell’A/D indipendente dal quarzo 4 ;Fosc/2 movlw b’00XXXXXX’ movwf ADCON0 ;Fosc/8 movlw b’01XXXXXX’ movwf ADCON0 ;Fosc/32 movlw b’10XXXXXX’ movwf ADCON0 ;Frc movlw b’11XXXXXX’ movwf ADCON0 Le X possono essere 1 o 0, mediante lem impostazioni che spiegherò più avanti. • CHS2, CHS1 e CHS0: I bit 5, 4 e 3 (CHS2, CHS1 e CHS0) lavorano in gruppo, formando così 3 Bit con 8 combinazioni, su cui è possibile selezionare il numero dei canali per poter effettuare la conversione da Analogico a Digitale. Le porte disponibili per la conversione analogica digitale sono A0, A1, A2, A3, A5, E0, E1 & E2. La tabella nella pagina successiva mostra come si selezionano i vari canali. Va ricordato che queste impostazioni cambiano a secondo del tipo di microcontrollore che si utilizza. CHS 2 CHS 1 CHS0 Canale 0 0 0 Ch0=AN0=RA0 0 0 1 Ch1=AN1=RA1 0 1 0 Ch2=AN2=RA2 0 1 1 Ch3=AN3=RA3 1 0 0 Ch4=AN4=RA5 1 0 1 Ch5=AN5=RE0 1 1 0 Ch6=AN6=RE1 1 1 1 Ch7=AN7=RE2 5 ;CH0 movlw b’XX000XXX’ movwf ADCON0 ;CH1 movlw b’XX001XXX’ movwf ADCON0 ;CH2 movlw b’XX010XXX’ movwf ADCON0 ;CH3 movlw b’XX011XXX’ movwf ADCON0 ;CH4 movlw b’XX100XXX’ movwf ADCON0 ;CH5 movlw b’XX101XXX’ movwf ADCON0 ;CH6 movlw b’XX110XXX’ movwf ADCON0 ;CH7 movlw b’XX111XXX’ movwf ADCON0 • GO/ : ) è utilizzato per iniziare il processo della conversione. Al momento di iniziare la Il Bit 2 (GO/ conversione, esso deve essere posto a 1 e quando la conversione giunge al termine automaticamente si ripone a 0. Per iniziare la conversione si utilizzano le seguenti istruzioni: bsf ADCON0,2 btfsc ADCON,2 goto $‐1 goto Prosegui Prosegui ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ 6 • ADON: Il Bit 0 (ADON) si deve porre a 1 per abilitare i convertitori analogici, mentre lo si pone a 0 per disabilitarli. ;Disabilita gli A/D movlw b’XXXXXXX0’ movwf ADCON0 ;Abilita gli A/D movlw b’XXXXXXX1’ movwf ADCON0 ESEMPIO 1: Programmare gli A/D in modo tale che la frequenza di colock sia Fosc/2, effettuare la conversione A/D sul canale 1, abilitare gli A/D e iniziare la conversione. movlw b’00001001’ movwf ADCON0 bsf ADCON0,2 btfsc ADCON0,2 goto $‐1 goto Prosegui Prosegui ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ 7 2. IL REGISTRO ADCON1: Il registro ADCON1 è formato da 8 bit, è situato nel Bank 1 ed è schematizzato così come segue nella tabella sottostante. U‐0 U‐0 R/W‐0 U‐0 R/W‐0 R/W‐0 R/W‐0 R/W‐0 ADFM ‐‐‐‐‐‐‐‐‐‐‐ ‐‐‐‐‐‐‐‐‐‐‐ ‐‐‐‐‐‐‐‐‐‐‐ PCFG3 PCFG2 PCFG1 PCFG0 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 • ADFM: Il Bit 7 (ADFM) ha la funzione di impostare il risultato della conversione analogica digitale Bank 0 Bank 1 ADFM ADRESH ADRESL 1 000000XX XXXXXXXX 0 XXXXXXXX XX000000 X= Valore convertito che può essere 1 o 0. Se si sceglie che ADFM assuma un valore logico 1, il risultato della conversione viene posto da destra verso sinistra, ottenendo un allineamento verso destra. Se si sceglie che ADFM assuma un valore logico 0, il risultato viene posto da sinistra verso destra, ottenendo un allineamento verso sinistra. Con un allineamento da destra il PIC fornisce una conversione a 10 bit e N10 si calcola così: ·2 Con un allineamento da sinistra il PIC fornisce una conversione a 8 bit e N10 si calcola così: ·2 8 • PGF3, PGF2, PGF1 e PGF0: I bit 3, bit 2, bit 1, bit 0 (PGF3, PGF2, PGF1, PGF0) funzionano in gruppo, formando 4 bit, aventi lo scopo di configurare la PORTA e PORTE. Questa configurazione permette di selezionare la tensione di riferimento e il numero di convertitori da utilizzare. Questa impostazione può variare da programma a programma, a secondo delle necessità. La tabella seguente mostra come settare i suddetti bit. PGF3,2, AN7 AN6 AN5 AN4 AN3 AN2 AN1 AN0 +VREF ‐VREF Ch/Vref 1, 0 RE2 RE1 RE2 RA5 RA3 RA2 RA1 RA0 0000 A A A A A A A A VDD VSS 8/0 0001 A A A A +VREF A A A RA3 VSS 7/1 0010 D D D A A A A A VDD VSS 5/0 0011 D D D A +VREF A A A RA3 VSS 4/1 0100 D D D D A D A A VDD VSS 3/0 0101 D D D D +VREF D A A RA3 VSS 2/1 011X D D D D D D D D VDD VSS 0/0 0111 COMBINAZIONE NON USATA 1000 A A A A +VREF ‐VREF A A RA3 RA2 6/2 1001 D D A A A A A A VDD VSS 6/0 1010 D D A A +VREF A A A RA3 VSS 5/1 1011 D D A A +VREF ‐VREF A A RA3 RA2 4/2 1100 D D D A +VREF ‐VREF A A RA3 RA2 3/2 1101 D D D D +VREF ‐VREF A A RA3 RA2 2/2 1110 D D D D D D D A VDD VSS 1/0 1111 D D D D +VREF ‐VREF D A RA3 RA2 1/2 A= Analogico; D= Digitale; ‐VREF= Tensione di riferimento negativa; +VREF= Tensione di riferimento positiva; VDD= Tensione di alimentazione del PIC (5V); VSS= Tensione di alimentazione del PIC gnd (0); RA3= Tensione di riferimento positiva RA2= Tensione di riferimento negativa regolata dalla PORTA sul bit 4; dalla PORTA sul bit 3; 9 ESEMPIO 2: Programmare la PORTA in modo tale da avere 4 ingressi analogici digitali e un ingresso con tensione di riferimento si dovrà settare così: movlw b’X00000011’ movwf ADCON1 Scegliendo di non usare gli ingressi A/D, usando la PORTA come semplici ingressi o uscite si dovrà settare così: movlw b’X000011X’ movwf ADCON1 Le X nel programma non si usano, pertanto il bit 7 assume un valore in base all’impostazione che si è dovuto adottare. La X al bit 0 va sostituita con 0, in quanto RCFG0 non viene usato. N.B. Æ QUESTE ISTRUZIONI VANNO USATE SEMPRE, ANCOR PRIMA DI PROGRAMMARE LE PORTE COME INGRESSI O USCITE. 3. PASSI PER ESEGUIRE UNA CONVERSIONE A/D: 1) Configurare ADCON 1: • Impostare l’allineamento, la modalità con cui si vuole visualizzare il risultato; • Configurare la quantità di canali da utilizzare e impostare la VREF; 2) Configurare ADCON0: • Impostare la frequenza di clock; • Definire al PIC su quale canale effettuare la conversione; • Accendere i convertitori; 3) Avviare la conversione; 4) Attendere che il bit nominato GO/ ritorni a zero; 5) Leggere il risultato della conversione dei registri ADRESH e ADRESL; 6) Azzerare ADIF se necessario; (Questo bit si trova in PIR1 ed è il numero 6) 7) Per iniziare una nuova conversione: • Sullo stesso canale ripetere dal passo 3. • Su un altro canale ripetere dal passo 2. 10