Programació en C del PIC 16F690 amb PICkit 2

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.

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.

Desplaçament de bits

El programa que emprarem serà:

#pragma config FOSC = INTRCIO, WDTE = OFF, PWRTE = OFF, MCLRE = OFF, CP = OFF, CPD = OFF, BOREN = OFF, IESO = OFF, FCMEN = OFF
#include "pic16f690.h"				// Carrega el fitxer d'adreces i paràmetres del PIC 16F690
#include <xc.h>					// Carrega el fitxer de funcions
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.

 

 

Licencia de Creative Commons
Esta obra de Oriol Boix está licenciada bajo una licencia no importada Creative Commons Reconocimiento-NoComercial-SinObraDerivada 3.0.