TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: psicopic en 02 de Octubre de 2004, 18:33:00
-
epa Gente....
Estoy comensando a ver la forma de medir la frecuencia de un tono de audio de 400 khz con que pic se podria lograr esto y que ideas me pueden dar a ver si me funciona lo que quiero ya que requiero detectar un tono especifico con un 10% +-
Gracias por las Ayudas
-
Hola
Yo usaria un conversor frecuencia-voltaje (por internet hay varios esquemas) conectado al ADC de un pic, por ejemplo el 16F88, el 16F877, etc...
salu2
-
gracias manex es buena la opcion vere que consigo en la red
-
hola,
q te parece si pones esa señal a la entrada de uno de los timers,
tipo timer 1 del f452, creo q eso te daria una buena precicion si con otro timer de precicion (con cristal, el oscilador ) lo mides durante un tiempo
Suerte .....
-
Si no te importa que el programa esté en C, los de CCS tienen un programa de un frecuencímetro que tiene un amplio margen de medida de frecuencias (1Hz hasta MHz) y para la frecuencia que tú quieres medir te la saca clavada. Está hecho para un 877 (para un 87x también valdría) y usa el TMR1 como contador externo de pulsos, utiliza un cristal de 20MHz.
Un saludo
-
Pocher conoces algo como eso pero con el 16F84?
Saludos,
-
Como este no. En la web de Pablin hay un frecuencímetro para un 16C54 (que seguramente ya habrás visto).
-
Si ese lo he visto, pero con el 16F84, hab"ia un par en la página de XooTRAooX, pero esta ya no existe

Bueno, la lo conseguiré. 
Gracias de todos modos,
Saludos,
-
Lo que hace la ignorancia jeje. Mis soluciones siempre son mas complejas que las vuestras por eso... pero nunca dejo de aprender!
salu2!
-
Bueno - Bueno que les parece que consegui el 2917 que es un conversor de frecuencia a tension a ver si de pronto funciona con eso y les cuento primero ver si consigo el fulano integrado de todas maneras si alguin consigue o sabe otra solucion bien recibida sera....
saludos....
-
Hola..
Yo hice algo pero en c.. para el 16f84 sirve.. es lo siguiente.. habilito la interrupcion del tmr0 y la externa.. coloco el preescaler en 64 y con un cristal de 4Mhz, eso hace que este se desborde aproximadamente cada 1ms creo variables para medir el tiempo.. milisegundos, segundos.. cuando hay interrupcion externa (RB0), cambio de flanco de alto a bajo o viceversa, pongo a ceros estas variables, y un "flag" a uno .. cuando de nuevo hay interrupcion externa, miro el "flag"para saber si pongo a cero de nuevo las variables, de lo contrario capturo el valor de las variables de tiempo.. y tengo el periodo de dicha señal y de nuevo pongo el "flag" a cero..
Como dije anteriormente esta en lenguaje c.. lo uso para lo mismo para detectar un tono, de 425Hz y asi saber cual es su periodo, logicamente a la entrada de RB0 tiene que haber una señal cuadrada.
Saludos
-
esos conversores de frecuencia a voltaje son para principiantes ademas de que tienes q montar toda una circuiteria como el conversor y un adc... no resulta prductivo.... la mejor manera es configurar el timer0 como contador de pulsos externos y SIN prescaler osea le asignas es prescaler al watchdog ya q contar pulsos con prescaler es demasiado impreciso y mucho mas cuando se trata de frecuencias altas.... lo mejor es contar los pulsos de 1 en 1 o de 10 en 10 o de 100 en 100 todo depende de la frecuencia para 400k seria bueno contar los pulsos de 100 en 100 inicializando el timer en .156 cada vez q cuente 100 pulsos interrumpes al micro con la interrupcion por timer e incrementas un registro, recargas el timer y sales de la interrupcion para lograr esto con precision tienes q activar la interrupcion y enseguida yamar a un retardo de 1 segundo exacto, como se te va a desbordar el registro q estas encrementando necesitaras incremetar otro registro cuando se desborde al anterior para poder contar los 400 khz, justo cuando el segundo del retardo termine tendras la informacion disponible en los registros q estuviste incrementado en la interrupcion, los multiplicas por 100 y voala!!! esto te dara exelentes resultados con un margen de error muy pekeño casi imperceptible a lo sumo 2 hz siempre y cuando hagas una rutina muy optimizada...... luego del proceso ejecutas tu rutina de binario a BCD o a ACCII y la envias a un display o lcd o a un PC o lo q kieras hacer con esa data!!! SUERTE
, claro mientras mas baja sea la frecuencia mas exacto sera el conteo y por supuesto hasta necesitaras menos registros y podras contar de 10 en 10 o de 1 en 1 y sera mas facil.... !!!! ah y con un cristal de 4 megas podras medir aproximadamente 1MHZ
-
gracias pwrinvitro... suena bien tratare de hacer eso a ver si me sale pero ufff esta un pelo complicada la cuestion pero tratare de hacerlo a verrrrr si me sale si no pana te aviso para que me digas como es la cosa saludos pues y gracias...
Desde maracaibo.... Venezuela
Up..LA VINO TINTO
-
Bueno suena complicado pero en realidad es muy facil solo incrementar un registro cada vez q se desborda el timer como el conteo va a yegar hata 4000 por ser una frecuencia de 400k necesitas 12 bits para poder contar hasta 4000 por ende debes incrementar otro registro al desbordarce el q estas incrementando los puedes yamar DATO_L y DATO_H, cada vez q se desborda dato_l incrementas dato_h esto lo haces chequeando la bandera Z del status eso no tiene gran problema lo unico q es medio engorroso es la rutina de multiplicacion por 100 un dato de 12 bits y sin embargo es solo codigo el resulta entra en 24 bits facilmente o 3 registros la rutina de binario a bcd si la haces diviendo entre 10 es un paseo... y ademas es un gran ejercicio ya q te acostumbras a trabajar con cantidades enormes de bits concatenados!!!
-
Hola Amig@s,... creo que hay un pequeñito error....
un tono de audio de 400khz... ni los murcielagos lo van a escuchar je je 
creo que hay una k de mas... y sera 400 hz...

Un abrazo
Norberto
-
ESO ES VERDAD DISCULPEN ES 400 Hz gracias Todopic
-
Si la frecuencia es de 400 hz entonces la rutina es demasiado facil, cuentas los pulsos de 10 en 10 osea inicializas en timer en .246 entonces cada vez q se desborde incrementas un solo registro en la interrupcion... al finalizar el retardo de 1 segundo multiplicas el resultado por 10 claro el resulta es de 9 bits pero luego haces la rutina binario a bcd y listo con unidad decena y centena... demasiado sencillo si no lo puedes hacer me avisas para pasartela!!... si no kieres multiplicar por 10 entonces inicilaliza el timer en .255 y cuentas de 1 en 1 el resultado va a ser en 9 bits y yamas a la rutina binario a bcd al finalizar el retardo y listo!!...
-
bueno, he visto algunas soluciones q dan aki, hace unos años me toco hacer ese proyecto, contando la frecuencia de 1 en 1 y usando la interrupcion solo para aumentar en 1 otro registro (cuenta en 16 bit), o sea mi frecuencia maxima era algo asi como 65355 pero si consideras salida a display y las operaciones internas eso t baja como a 60 o 55 KHz., a pesar de todo es bueno como frecuencimetro de audio, desafortunadamente no tengo el plano del ciruito pero si el codigo (LST) pero deberas agregar algun amplificador de señal para pasar a onda cuadrada porq eso no lo coloque, use un 16f84.
-
Bueno vamos a ver:
1) si es un tono de audio sera de frecencia menor a 20000 Hz
2)deteccion del tono
¿es un tono puro(sinusoidal pura)?¿o es una señal de audio normal?
Si es un tono puro el metodo de contar los cruces por cero pede funcionar
correctamente
Si la señal es mas compleja puedes tener muchos problemas, dependiendo
de la forma de a señal,(puede cruzar varias veces por cero debido a componentes
de frecuencia superiores)
Si esto es asi la solucion estaria en hacer una estimacion espectral, mediante
una FFT y buscar el pico en la frecuencia de 400 Hz
si no especificas para que lo quieres no puedo profundizar mas ![Giño Giño]()
mira como saltan!!!!!!!!!!!!!!!!
![Rebotado Rebotado]()
![Rebotado Rebotado]()
![Rebotado Rebotado]()
![Rebotado Rebotado]()
![Rebotado Rebotado]()
![Rebotado Rebotado]()
![Rebotado Rebotado]()
![Rebotado Rebotado]()
![Rebotado Rebotado]()
![Rebotado Rebotado]()
![Rebotado Rebotado]()
![Rebotado Rebotado]()
![Rebotado Rebotado]()
![Rebotado Rebotado]()
-
Hola!
No se que proyecto tenes en mente pero fijate si el LM567 te sirve, es un decodificador de tono muy barato.
Bajate el pdf del sitio de National.