Come utilizzare gli AnDig del PIC16F877.pdf

10
1 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

Transcript of Come utilizzare gli AnDig del PIC16F877.pdf

Page 1: Come utilizzare gli AnDig del PIC16F877.pdf

  

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                           

Page 2: Come utilizzare gli AnDig del PIC16F877.pdf

  

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 

Page 3: Come utilizzare gli AnDig del PIC16F877.pdf

  

 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 

 

Page 4: Come utilizzare gli AnDig del PIC16F877.pdf

  

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  GO/ ‐‐‐‐‐‐‐‐‐‐‐  ADON 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           

Page 5: Come utilizzare gli AnDig del PIC16F877.pdf

  

;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 

            

Page 6: Come utilizzare gli AnDig del PIC16F877.pdf

  

    ;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/ :  Il Bit 2 (GO/ ) è utilizzato per iniziare il processo della conversione. Al momento di iniziare la 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                                           ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐                                           ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ 

     

Page 7: Come utilizzare gli AnDig del PIC16F877.pdf

  

• 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                                                                 ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐                                                                 ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐                  

Page 8: Come utilizzare gli AnDig del PIC16F877.pdf

  

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 

· 2

 Con un allineamento da sinistra il PIC fornisce una conversione a 8 bit e N10 si calcola così:  

 

             

Page 9: Come utilizzare gli AnDig del PIC16F877.pdf

  

• 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, 1, 0 

AN7 RE2 

AN6 RE1 

AN5 RE2 

AN4 RA5 

AN3 RA3 

AN2 RA2 

AN1 RA1 

AN0 RA0 

+VREF  ‐VREF  Ch/Vref 

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 positiva;      ‐VREF= Tensione di riferimento negativa;  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;    

        

Page 10: Come utilizzare gli AnDig del PIC16F877.pdf

  

10 

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