Ayuda con frecuencimetro

hola, gracias a la comunidad por la ayuda que me han dado durante estos años, hoy tengo un problema mayor =( necesito un frecuencimetro capaz de medir por lo menos un Mhz y todo lo que encuentro en la red son los que no pasan de un Khz
Para este caso no tengo idea de como detectar la duración de un pulso para lo cual requiero un ejemplo que alguien me explique muy bien jaja
lo quiero hacer con la placa UNO y ocupare pulsos digitales

Estimado compañero, ya revisaste este tema que esta antes de tu publicación, Frecuencímetro con Arduino de 1Hz a 3Khz « 1 2 », ojala te pueda ayudar,

Hola
si, ya lo había checado, solo que como ya había comentado ese programa no mide mas de 3kHz y para mi necesidad requiero por lo menos 1.5MHz de hecho ya modifique un poco el programa para poder medir lo que necesito (un detector) lo posteo para que me digan que puedo cambiar o si es necesario rehacer el programa y utilizar un puerto digital, y de ser así ¿como hacerlo?

#include <LiquidCrystal.h>
long rango=2;
long ultimamedicion;
int ciclo=0;
int cambiodeciclo=0;
int picodetension;
int valledetension=1023;
long contadorvisualizacion;
long contadorciclo;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {

Serial.begin(9600);
lcd.begin(16, 2);
pinMode(A0, INPUT);
}

void loop() {

long sensorValue = analogRead(A0);
float gamma = (contadorciclo / 2.0) / 1.5;
if (micros()>contadorvisualizacion+2000000)
{

lcd.clear();
Serial.print(" ");
Serial.print(gamma);
lcd.print(gamma);
lcd.write(" mR/h");

rango=(2+((picodetension-valledetension)/5));
contadorvisualizacion=micros();
picodetension=sensorValue;
valledetension=sensorValue;
contadorciclo=0;
}

if (sensorValue >= ( ultimamedicion+rango) )
{

ultimamedicion = sensorValue;
ciclo=1;

if (sensorValue>picodetension)

{
picodetension=sensorValue;
}

}

if (sensorValue <= ( ultimamedicion-rango))

{

ultimamedicion = sensorValue;
ciclo=0;
if (sensorValue<valledetension)
{
valledetension=sensorValue;
}

}

if (ciclo==1 && cambiodeciclo==0)

{
cambiodeciclo=1;
contadorciclo++;
}

if (ciclo==0 && cambiodeciclo==1)

{
cambiodeciclo=0;
}

}

estuve trabajando con otro programa y tiene un gran rango, el problema es que entre mayor sea la frecuencia este se vuelve mas impreciso

const int med = 7;
void setup() {
Serial.begin(9600);
pinMode(med, INPUT);
}
void loop()
{
long duracion;
duracion = pulseIn(med, HIGH);
float hz = 1000000.00 / duracion;
float gamma = hz / 1.50;
Serial.print(gamma);
delay(1000);
}

la respuesta la encontré aquí http://interface.khm.de/index.php/lab/experiments/arduino-frequency-counter-library/
gracias por su inexistente ayuda