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.
Tindrem un resultat de 10 bits (valors de 0 a 1023) però només tenim vuit LED. Si agaféssim els 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 00000000 a 11111111 recorrent tots els valors intermedis. 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ó copiarem el resultat al port on hi ha els LED.
El programa que emprarem serà:
#pragma config FOSC = INTIO67, FCMEN = OFF, IESO = OFF // CONFIG1H #pragma config PWRT = OFF, BOREN = SBORDIS, BORV = 30 // CONFIG2L #pragma config WDTEN = OFF, WDTPS = 32768 // CONFIG2H #pragma config MCLRE = OFF, LPT1OSC = OFF, PBADEN = ON, CCP2MX = PORTC // CONFIG3H #pragma config STVREN = ON, LVP = OFF, XINST = OFF // CONFIG4L #pragma config CP0 = OFF, CP1 = OFF, CP2 = OFF, CP3 = OFF // CONFIG5L #pragma config CPB = OFF, CPD = OFF // CONFIG5H #pragma config WRT0 = OFF, WRT1 = OFF, WRT2 = OFF, WRT3 = OFF // CONFIG6L #pragma config WRTB = OFF, WRTC = OFF, WRTD = OFF // CONFIG6H #pragma config EBTR0 = OFF, EBTR1 = OFF, EBTR2 = OFF, EBTR3 = OFF // CONFIG7L #pragma config EBTRB = OFF // CONFIG7H #include "p18f45k20.h" // Carrega el fitxer d'adreces i paràmetres del PIC 18F45K20 #include <xc.h> // Carrega el fitxer de funcions
void main (void)
{
TRISD = 0b00000000; // El port D és de 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 = 0; // Les tensions de referència són les d'alimentació
ADCON2 = 0b00111000; // Configuració típica amb justificat per l'esquerra
ADCON0 = 0b00000001; // Activa el conversor connectat a AN0
while (1) // Bucle infinit
{
ADCON0bits.GO_DONE = 1; // Posa en marxa el conversor
while (ADCON0bits.GO_DONE == 1) // Mentre no acabi
; // ens esperem
LATD = ADRESH; // Copiem el resultat llegit als LED
_delay(50000); // Retard per permetre la visualització
}
}
Veiem que al començament del bucle activem el conversor i esperem a que acabi la conversió. Després els 8 bits superiors del valor llegit els copiem als LED.

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