/*****************************************************************************/ /* conversor.c Junio-2005 */ /*---------------------------------------------------------------------------*/ /* Ejemplo para el skybot */ /*---------------------------------------------------------------------------*/ /* Ejemplo para el conversor A/D. Se utiliza el canal 0 (PA0) donde esta */ /* conectado el sensor de luz. El valor leido (nivel de luz) se */ /* compara con un umbral . Si no se supera se apaga el LED */ /* Es un ejemplo de como leer el conversor, para adaptarlo a cualquier */ /* aplicacion */ /*---------------------------------------------------------------------------*/ /* Andres Prieto-Moreno <andres@ifara.com> */ /* Juan Gonzalez <juan@iearobotics.com> */ /*---------------------------------------------------------------------------*/ /* LICENCIA GPL */ /*****************************************************************************/ //-- Especificar el pic a emplear #define __16f877 #include "pic16f877.h" //-- Definiciones #define LED 0x02 // Pin del led de la Skypic //---------------------------- //- Comienzo del programa //---------------------------- unsigned char ad; void main(void) { //-- Configurar conversor analogico/digital //-- Entrada analogica: PA0 (Clema 2 de la CT293) //-- Resto de entradas del puerto A: digitales ADCON0 = 0x01; // enciendo el conversor ADCON1 = 0x0E; // configuro AN0 como entrada analogica, resto digital //-- Configurar puerto B para salida TRISB=0x00; for(;;) { //-- Activar la conversion //-- Hay que hacerlo cada vez que se termina la anterior ADCON0 |= 0x04; //-- Esperar a que se haga la conversion while ((ADCON0&0x04)==0x04); /* el dato se encuentra en el registro ADRESH. Se corresponde con un valor entre 0 y 255, y me indica el nivel de intensidad de luz recibida por el sensor. Debido al circuito de polarizacion de la SKY293 y al propio sensor el umbral ha de situarse cerca del 200. Cuando se ilumina el sensor el valor leido disminuye. El UMBRAL depende mucho de las condiciones de iluminacion, se recomienda adaparlo a cada entorno. */ if (ADRESH>=250) { // En ADRESH esta el dato leído PORTB=LED; } else { PORTB=0; } } }