Hola,
estoy intentando medir el duty-cycle de un pulso detectando los flancos de subida y bajada mediante accediendo al contador interno del timer 1, TCNT1, pero no se me actualizan los valores y realmente nose porque.
La cuestion es que utilizo el acceso al contador del timer 1 en otros algoritmos y funciona, es decir, se incrementa los valores bien.
He repasado el codigo unas cuantas veces pero no encuentro nada raro, aunq seguramente habra algo que haga que dichos valores no se actualicen, pero no lo veo.
Haber si cuatro ojos ven mas que dos, gracias.
const int Pin_in_ch1 = 2; // Pin entrada ch1 (direccion)
char giro = 0;
char giro_ant = 0;
char Dgiro = 0;
unsigned int Duty_giro = 0;
unsigned int Tini = 0;
unsigned int Tact = 0;
unsigned int RestoT = 0;
float Tclk = 0.0625; // en microsegundos
void setup() {
Serial.begin(9600);
pinMode(Pin_in_ch1,INPUT);
TCCR1A = 0;
TCCR1B = 0;
TCNT1 = 0;
TCCR1B = _BV(CS10); // No pre-escaler
}
void loop() {
giro = digitalRead(Pin_in_ch1);
Dgiro = giro - giro_ant; // diferencia de valores leidos
if(Dgiro==1) // flanco de subida
Tini = TCNT1;
if(Dgiro == -1) // flanco de bajada
{
Tact = TCNT1;
if(Tact < Tini) // para los desbordes del TCNT1
{
//RestoT = (Tact + 65535) - Tini;
Duty_giro = ((Tact + 65536) - Tini)*Tclk;
}
else
{
//RestoT = Tact - Tini;
Duty_giro = (Tact - Tini)*Tclk;
}
}
giro_ant = giro;
Serial.print ("DIFERENCIA CONTADOR : ");
Serial.println (RestoT);
Serial.print ("Duty CH1 : ");
Serial.println (Duty_giro);
Serial.println (" us. ");
}