Anem a provar el funcionament d'una entrada analògica. gafarem l'entrada analògica on hi ha connectat el potenciòmetre i llegirem el valor de l'entrada.
En el nostre cas tindrem un resultat de 10 bits (valors de 000h a 3FFh; o sigui de 0 a 1023) però només tenim quatre LED. Si agaféssim els quatre bits de més a la dreta ens trobaríem que al llarg de tot el recorregut del potenciòmetre els valors passarien diverses vegades de 0000 a 1111 recorrent tots els valors intermedis. El mateix passaria si agaféssim bits del mig. En canvi, si agafem els bits de valor més alt (els de més a l'esquerra) només passarem un cop per cada combinació de bits en tot el recorregut de la roda del potenciòmetre.
El que farem doncs serà triar l'alineació a l'esquerra (ADFM valdrà 0). Quan acabi la conversió farem rodar els bits quatre posicions a la dreta (dividirem per 16) i copiarem el resultat al port on hi ha els LED.
La figura següent és un esquema del que fem amb els bits del resultat.

El programa que emprarem serà:
#pragma config FOSC = INTRCIO, WDTE = OFF, PWRTE = OFF, MCLRE = OFF, CP = OFF #pragma config CPD = OFF, BOREN = OFF, IESO = OFF, FCMEN = OFF #include <xc.h> // Carrega el fitxer de funcions necessari per al compilador XC8
void main (void){
TRISC = 0b00000000; // Posa el port C com a sortida
TRISAbits.TRISA0 = 1; // La pota RA0 és d'entrada
ANSEL = 0; // Desactiva totes les entrades analògiques
ANSELH = 0;
ANSELbits.ANS0 = 1; // I ara activa la del potenciòmetre (AN0)
ADCON1 = 0b00010000; // Posa el conversor a 1/8 de la freqüència
ADCON0 = 0b00000001; // Activa el conversor connectat a AN0
// amb el resultat justificat per l'esquerra
while (1){ // Bucle infinit
ADCON0bits.GO = 1; // Posa en marxa el conversor
while (ADCON0bits.GO == 1) // Mentre no acabi
; // ens esperem
PORTC = ADRESH/16; // Copiem el resultat, dividit per 16, als LED
_delay(200000); // Retard per permetre la visualització
}
}
Veiem que al començament del bucle activem el conversor i esperem a que acabi la conversió. Després copiem als LED el byte més significatiu de la lectura dividit per 16.

Aquesta obra d'Oriol Boix està llicenciada sota una llicència no importada Reconeixement-NoComercial-SenseObraDerivada 3.0.