Buenas y gracias de antemano os cuento;
Tengo el arduino Mega y las conexiones a ICSP son los pines 50,51,52,53 sino me equivoco.
Tengo el siguiente codigo
volatile long contador_overflow;
volatile long tiempo_on;
volatile long periodo;
unsigned int flanco_subida;
unsigned int flanco_bajada;
int rpmcount;
void setup()
{
// CONFIGURO LOS REGISTROS PARA HABILITAR INPUT CAPTURE DEL TIMER 1
TCCR1A=0;
// Deshabilito Noise Canceler,Flanco de subida,1/8 preescaler
TCCR1B=(0<<7)|(1<<6)|(0<<4)|(0<<3)|(0<<2)|(1<<1)|(0<<0);
// Habilito Input Capture y Overflow
TIMSK1=(1<<5)|(0<<2)|(0<<1)|(0<<0);
}
// ---------------------------------------------------------
// Funcion para la interrupccion INPUT CAPTURE
ISR(TIMER1_CAPT_vect)
{
if (PINB & B00000001)
{
//Un nuevo flanco de subida significa fin de periodo
periodo=ICR1-flanco_subida;
tiempo_on=flanco_bajada-flanco_subida;
// Recojo el tiempo para medida del nuevo pulso
flanco_subida=ICR1;
//Cambio a flanco de bajada (bit 6 a "0")
TCCR1B=TCCR1B & 0xBF;
//contador_overflow=0;
//En la documentación explica que hay que poner un "1" para desactivarlo y es recomendable hacerlo cuando se trata de medir duty cycle
TIFR1|=(1<<ICF1);
rpmcount++;
}
else
{
flanco_bajada=ICR1;
//Cambio a flanco de subida(bit 6 a "1")
TCCR1B=TCCR1B | 0x40;
}
}
void loop()
{
}
// ---------------------------------------------------------
Sacado del post IGOR
El problema es que no se como funciona y me he leido la pagina que Igor recomienda pero nada de nada
http://winavr.scienceprog.com/avr-gcc-tutorial/program-16-bit-avr-timer-with-winavr.html
a ver si me podeis ayudar
Mi proyecto se basa en medir una Frecuencia que cambia segun la humedad de un Silo.