Este codigo (simplificado) es el que uso para hacer un odometro digital sobre arduino uno R3
int operar = 0;
int primera = 1;
int count = 0;
void setup()
{
Serial.begin(9600);
pinMode(ledPin,OUTPUT);
// hardware counter setup
pinMode(5,HIGH);
TCCR1A=0; // reset del timer/counter control register A
// Comenzar a contar
TCNT1 = 0; // reset del contador por hardware
bitSet(TCCR1B ,CS12); // la fuente de pulsos para el clock es externa
bitSet(TCCR1B ,CS11); // Clock set en rising edge
}
void loop()
{
if (operar == 1)
{
// parar de contar
TCCR1B = 0;
count = TCNT1;
TCNT1 = 0; // reset del contador del hardware
// Comenzar a contar
bitSet(TCCR1B ,CS12); // la fuente de pulsos para el clock es externa
bitSet(TCCR1B ,CS11); // Clock set en rising edge
}
else
{
operar = 1;
}
if(count > 0)
Serial.println(count);
}
El problema radica en el hecho que, aun estando desconectado, se leen pulsos aleatorios en el registro TCNT1;
Soluciones propuestas que no han funcionado (sigue leyendo pulsos aleatorios) :
1 - set por soft "INPUT_PULLUP"
2 - set del "filtro de ruidos" del registro ICNC1: Input Capture Noise Canceller (Bit 7 of register TCCR1B)
Cualquier sugerencia seria bienvenida.
Saludos.