Programació en C del PIC 18F45K20

Referència Trucs Perifèrics   Recursos CITCEA
Tutorial Exemples Projectes   Inici

Exemple EA - Entrada analògica

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.

 

 

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