Ayuda con ICSP

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.

Hola,

Esto es para medir el tiempo a ON de la senyal y la frecuencia usando el timer del micro. Si solo quieres medir la frecuencia, lo puedes hacer mas sencillo usando el lenguaje de Arduino.
Cuando hice esto, buscaba precision, y era para medir una senyal cuadrada desde 0-50 KHz o algo asi, y tener tambien el duty cycle.
Me hice tambien una rutina para ir cambiando el preescaler del timer segun la frecuencia que estaba entrando, para intentar tener la maxima precision posible.

Para empezar con algo sencillo, puedes usar las intrucciones attachinterrupt() y cuentas pulsos, y cada cierto tiempo haces la operacion de pulsos entre el tiempo (usando millis() ).

Mira esto que hice para medir las rpm de un coche --> Tinkering with Electronics...: Shift Lights con Arduino
Esta creado completamente usando lenguaje Arduino bucando la maxima sencillez. Mide las rpm y las saca a unas led.(Se llama shift lights o luces de cambio).

Por cierto, ICSP no es lo mismo que usar la entrada ICP ... :wink:
ICP= Input Capture Pin
ICSP= In Circuit Serial Programming

Para ampliar la precision de millis(), mirate este reciente post --> http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1291044886

:smiley: