Questo sito utilizza cookie, anche di terze parti, per migliorare la tua esperienza e offrire servizi in linea con le tue preferenze. Chiudendo questo banner, scorrendo questa pagina o cliccando qualunque suo elemento acconsenti all’uso dei cookie. Se vuoi saperne di più o negare il consenso a tutti o ad alcuni cookie vai alla sezioneCookie Policy

Il registro ADCON

Ultimo aggiornamento: 31/07/2015

La programmazione di un microcontrollore richiede la lettura del suo datasheet, è importante. In questo articolo verranno presentati i registri connessi con la procedura di conversione analogico/digitale, funzione presente in molti microcontrollori, nel modo più semplice possibile.

Leggendo il datasheet di alcuni popolari microcontrollori ad 8 bit quali i 16f87x o 16f88x, ad esempio, si noterà la presenza di alcuni moduli predisposti per la conversione analogico/digitale: una procedura per poter tradurre in valore numerico il livello di tensione presente sul piedino del microcontrollore. Nel caso specifico che questi moduli per la conversione a/d sono a 10 bit (2^10=1024) sono gestiti da quattro diversi registri (che altro non sono che determinate locazioni di memoria). I primi due, denominati ADCON0 e ADCON1, sono utilizzati per predisporre ed avviare i moduli adc scelti, mentre altri due sono utilizzati per riportare il valore numerico della procedura di conversione. Naturalmente l'utilizzo di un linguaggio di alto livello consentirà di non curarci troppo dei registri del risultato in quanto questo, normalmente, sarà trasferito in una variabile da una funzione del linguaggio stesso (adc_read, per esempio, usando il mikroc).

i registri ADCON0 e ADCON1 , invece, devono essere correttamente predisposti per ottenere la conversione.

Come possiamo vedere si tratta di due registri ad 8 bit dove:

  • i bit 6 e 7 sono utilizzati per settare la frequenza di campionamento;
  • i bit 3,4,e 5 sono utilizzati per la scelta dei pin del microprocessore da utilizzarsi quali input;
  • il bit 2 rappresenta lo stato della procedura di conversione;
  • il bit 0 avvia la conversione.


A colpo d'occhio, guardando l'immagine sovrastante, si dovrebbe chiarire la situazione. Qualora, ad esempio, se si doesse abilitare il piedino ra0/an0 per agire come input per la conversione a/d con un clock f/32 si dovrà settare il registro  ADCON0 = 0b10000000 (bin) o 0x80 (hex) o 128 (dec).


Riguardo il secondo registro, ADCON1, si deve settare per due motivi: per scegliere l'allineamento del risultato (dx o sx) (bit 7), e per selezionare (bit0...bit3) la tensione di riferimento unitamente alla porta in base alla seguente tabella (dal datasheet del 16f87x):

 

registro ADCON

Quindi settando ad '1' il bit 7 del registro si avra' un risultato giustificato a destra mentre settando il bit a '0' il risultato sarà giustificato a sinistra.

I settaggi relativi ai bit0 ... bit3 potranno essere stabiliti in base alla tabella a sx.

 

Chiaramente settando a '0000' i quattro bit otterremo che la tensione di riferimento del processo di conversione a/d sara' la stassa vdd di alimentazione e tutti i pin saranno predisposti per effettuare conversioni a/d.

 

Il risultato del processo di conversione verra' riportato in due registri: ADRESH and ADRESL (o, meglio, direttamente in una variabile se viene usato un linguaggio diverso dall'assembly) con il risultato giustificato a destra o a sinistra in base al registro adcon1:bit7.

Una istruzione TRISA = 0xFF (or 0b11111111) completera' il settaggio della porta necessario a svolgere il particolare compito.

Diritti riservati Cuteminds.com 2008-2015. Tutti i marchi riportati sono detenuti dai legittimi proprietari. Tutto il materiale e` liberamente utilizzabile ma non per scopi commerciali. Non si assume alcuna responsabilita` sul materiale pubblicato per eventuali danni diretti o indiretti che possano derivare dall`utilizzo di schemi, progetti o altro materiale presente nel sito. Inviare una mail a: remove-admin@cuteminds.com (contenuti) remove-webmaster@cuteminds.com (webserver) per domande e/o suggerimenti.