Hola The_Some,
Primero tienes que asegurarte que tu señal sea mayor de 2.5 v, que es el nivel cuando una entrada digital distingue entre un "0" y un "1". En teoría parece que eso lo cumples. Tienes que adaptar la señal(a TTL), que si en tu caso es de menos de 5v, una simple resistencia de gran valor te servirá ya que el micro dispone de diodos de clamping internamente en cada pin. Pero bueno, esto ya depende un poco de tu montaje, de dónde viene la señal, etc.
Como dice chiva, es una pregunta que ha salido unas cuantas veces, te pongo unos links:
http://arduino.cc/forum/index.php/topic,31432.0.html
http://arduino.cc/forum/index.php/topic,31279.0.html
http://arduino.cc/forum/index.php/topic,31681.0.html
Estoy seguro que hay más post, pero estos son los que he encontrado de una busqueda rápida. Básicamente existen dos métodos para medir la frecuencia:
- Cuentas el número de pulsos durante un tiempo fijo y calculas la frecuencia.
- Mides directamente el tiempo entre dos flancos de tu señal.
Para usar el primero, tienes que tener una frecuencia más o menos rápida, ya que por ejemplo para una señal de 1Hz o algo así, tendrás bastante error.
Ahora bien, para resolver cualquiera de estos dos métodos tienes varias opciones, como utilizar timers, utilizar interrupción, utilizar ICP, etc.
Espero que te sirva.
Saludos
Igor R.