/*****************************************************************************/
/* Encoder.c Julio-2007 */
/*---------------------------------------------------------------------------*/
/* Ejemplo para comprobar los encoders del skybot */
/*---------------------------------------------------------------------------*/
/* Prueba del encoder conectado como sensor1. El skybot empieza a avanzar. */
/* Cuando el sensor detecta 5 transiciones entre el blanco y el negro, en */
/* cualquier orden, enciende el led y se para. */
/*---------------------------------------------------------------------------*/
/* Javier Valiente <jvaliente@ifara.com> */
/*---------------------------------------------------------------------------*/
/* LICENCIA GPL */
/*****************************************************************************/
//-- Especificar el pic a emplear
#include <pic16f876a.h>
//-- Definiciones de los sensores
#define SENSOR1 0x01
#define SENSOR2 0x20
#define ENCODER1 SENSOR1
#define LED 0x02
unsigned char sensor;
// Contar numero de vueltas
void CuentaNTransiciones(unsigned char num_segmentos)
{
unsigned char i=0;
unsigned char old_lectura_sensor, new_lectura;
old_lectura_sensor = (PORTB & ENCODER1);
while (i < num_segmentos)
{
new_lectura = (PORTB & ENCODER1);
if (old_lectura_sensor != new_lectura)
{
old_lectura_sensor = new_lectura;
i++; // Suma una transicion
}
}
}
void main(void)
{
TRISB = 0xE1;
PORTB = 0x1C;
CuentaNTransiciones(5);
PORTB=LED; //-- Encender LED y desactivar motores
}