TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: jhefren en 14 de Septiembre de 2009, 10:53:40
-
Hola a todos
estoy interesado en realizar un analizador de espectro con un pic 16f877 y una lcd de 16x2 solo en asm, se que seria mas facil usar una dspic, pero deseo hacerla con el que mencione, se que seria algo engorroso y
dificil de implementar, ya que una trasnformada FFT requiere el uso de mucho calculo, la idea mia es hacer algo como se ve aqui:
feature=related
y este otro
feature=PlayList&p=8424B3DFB2C27B68&playnext=1&playnext_from=PL&index=2
por lo que he investigado por la red y visto en varias paginas es que usan transformada fft. Encontre, la implementaciòn de microchip de fft AN542 y el la pagina de piclist halle un analizador de espectro:
http://www.piclist.com/techref/microchip/fft/picspect.htm
y
http://www.circuitcellar.com/library/print/0998/Lacoste98/index.htm
Todos basados en la implementaciòn de by Robert Lacoste
Si tienen alguna idea para hacerlo Gracias de antemano
-
mira el siguiente link
http://www.todopic.com.ar/foros/index.php?topic=26860.msg220443#msg220443
-
ya habia visto este post, pero lo quiero implementar en asm.
muchas gracias cerebro
-
Oye cerebro, ya que tu implementaste esta transformada podrias explicarla detalladamente, es decir, con un algoritmo un diagrama de estados, puedes ser aqu de esta manera lo pueda hacer en ASM
-
Hola, implementar funciones de matemáticas con punto flotante lo veo complejo en ASM. Creo que la mejor opción es usar un compilador de C gratuito y sería más rápido.
-
Hola, implementar funciones de matemáticas con punto flotante lo veo complejo en ASM. Creo que la mejor opción es usar un compilador de C gratuito y sería más rápido.
Si, sino vas a sudar la gota gorda :z) :D :D :D
-
Qué resolucion de FFT necesitas? cuantos puntos quieres representar? 16?
Si son pocos, lo más eficiente y fácil de implementar en asm es la DFT mediante correlación.
Aquí te dejo algo de literatura:
http://www.dspguide.com/ch8/6.htm
-
si sycho mas o menos en eso estaba pensando en 16 puntos. Revisare el enlaces a ver que tal..
Gracias
-
La cuestion de hacerlo en la serie 16, tiene varios inconvenientes.
1.- La velocidad de muestreo del ADC
2.- El tamaño de la RAM de la serie 16
3.- El hecho de que solo contiene un solo apuntador indirecto
De hecho, yo he hecho la FFT en assembler puro, la cual, corre desde losngitudes de 2 hasta de 256 puntos, y esta, requiere para que sea rapida, que las operaciones sean hechas con apuntadores, y ademas, requiere de multiples multiplicaciones, a no se diga, vectores de RAM para hacer el proceso.
La serie 18, tiene ADCs mas rapidos, y 3 apuntadores FSR para realizar las operaciones, ya subi un hilo con la info y un ejemplo de lo que buscabas hacer, ahi esta el hex y te lo puedes bajar. El topico se encuentra aca (http://www.todopic.com.ar/foros/index.php?topic=31783.0) mismo.
El tema de la FFT, lo subire en la medida que vea la respuesta de los demas participantes.
-
bueno victor lo primer de todo es definir que microcontrolador usar. Existen muchos para tal fin, en mi caso vivo en venezuela y es dificil conseguir el que tu usaste. Yo en mi caso usaria el 18F4550, que es lo mas parecido al 18F4620 o 18F4525.
-
Aqui le tengo una pagina interesante donde llamada zaxione, donde nuestro amigo saul implementa un vumetro con pic16f877 al que le interese ese es el link:
http://www.zaxione.com/index.php?option=com_content&view=article&id=31:vumeter-estereo-con-varias-visualizaciones&catid=4:proyectos-varios&Itemid=3
-
La cuestion de hacerlo en la serie 16, tiene varios inconvenientes.
1.- La velocidad de muestreo del ADC
2.- El tamaño de la RAM de la serie 16
3.- El hecho de que solo contiene un solo apuntador indirecto
De hecho, yo he hecho la FFT en assembler puro, la cual, corre desde losngitudes de 2 hasta de 256 puntos, y esta, requiere para que sea rapida, que las operaciones sean hechas con apuntadores, y ademas, requiere de multiples multiplicaciones, a no se diga, vectores de RAM para hacer el proceso.
La serie 18, tiene ADCs mas rapidos, y 3 apuntadores FSR para realizar las operaciones, ya subi un hilo con la info y un ejemplo de lo que buscabas hacer, ahi esta el hex y te lo puedes bajar. El topico se encuentra aca (http://www.todopic.com.ar/foros/index.php?topic=31783.0) mismo.
El tema de la FFT, lo subire en la medida que vea la respuesta de los demas participantes.
Si deseas compartir adelante y con mucho gusto , pero aqui no hay aplausometro,ni top post , ni usuario top.
Seguro notaras algunos post muy interesantes pero con pocas respuestas , y es que no todos entendemos su importancia , pero a la larga son muy útiles!
Si tu idea es compartir , pues adelante , pero no esperes a que la gente lo pida!
-
Si deseas compartir adelante y con mucho gusto , pero aqui no hay aplausometro,ni top post , ni usuario top.
Seguro notaras algunos post muy interesantes pero con pocas respuestas , y es que no todos entendemos su importancia , pero a la larga son muy útiles!
Si tu idea es compartir , pues adelante , pero no esperes a que la gente lo pida!
Tienes toda la razon, te la doy, mi interes no es recibir la gloria, sino el hecho de que no dispongo de mucho tiempo para subir tantas cosas. Se que lo importante es compartir, pero preparar la info, subirla, etc, no tendria mucho caso si a nadie le interesara, es decir, tampoco busco llamar la atencion o decir, mira lo que hice!!! mira lo que hice!!! como niño pequeño. Tampoco es postear un codigo y esperar a ver quien le entiende y quien no, porque ahi, veo 2 cosas.
1.- Muchos lo copian, lo pegan y listo, jamas se enteraron que hacia el programa
2.- Quienes intentan entenderlo, sin un tutorial previo, les surgen miles de preguntitas que se van contestando, Yo creo, que la idea, es entender bien el todo de como funciona un programa, para despues adecuarlo a nuestros proyectos, de ahi la importancia de explicarlo, documentarlo etc etc.
Luego entonces, prepararia un tutorial sobre la FFT, ya que no es un tema sencillo, la verdad a mi me llevo algunas semanas y muchas hojas de libreta llenas con test y errorres, hasta que por fin comprendi cada una de sus partes, subir el codigo tal cual, es util, pero no nos brinda del conocimiento para entender de donde salieron las cosas...
-
Totalmente de acuerdo contigo !!
Saludos!
-
Pero hay otras personas ansiosas que queremos ver código, y no necesitan tantas explicaciones! :D :D
-
Pero hay otras personas ansiosas que queremos ver código, y no necesitan tantas explicaciones! :D :D
A pues para todos ellos que se les queman las habas por ver el programa correr ahi esta el hex en su topico correspondiente :D :D :D
-
Pero hay otras personas ansiosas que queremos ver código, y no necesitan tantas explicaciones! :D :D
A pues para todos ellos que se les queman las habas por ver el programa correr ahi esta el hex en su topico correspondiente :D :D :D
:D :D :D Naaa. Es un chiste! :D
Igualmente para los que quieran implementar una FFT para visualizar un LCD no necesitan gran cosa, por ejemplo la FFT que se muestra en este post (http://www.todopic.com.ar/foros/index.php?topic=26860.0) en un 18F4620 se ejecuta en unos 1.8 ms. Es de 16 puntos y les sobra para visualizaciones de ese estilo.
Si quieren algo de teoria de FFT, algoritmos, errores de truncamiento, ect, pueden darle una leída a Tratamientos Digital de señales, Proakis y Manolakis ;-) Aclaro que hay que tener una base sobre tratamientos de señales, sino van a quedar :z) :D :D
Saludos!
-
:D :D uyyy suky, en 1.8 ms ya se habia creado y expandido el uiverso despues del big bang....
mmm FFT en C, 16 muestras, de las cuales solo les sirven 8, porque las otras 8 son simetricas, en 1.8 milisegundos.....
Veamos estos datos, digo, para aquellos pacientes que aprecien el poder del ensamblador....
Los tiempos que tarda en ejecutarse mi FFT @ 12mips
Muestras Tcys tiempo FFTs/seg
2 317 26.41us 37854
4 888 74us 13513
8 1999 166.58us 6003
16 4705 392.08us 2550
32 10841 903us 1106
64 24448 2.037ms 490.83
128 53996 4.499ms 222.23
256 117032 9.752ms 102.53
* Estos tiempos mejoraran en cuanto haga unos updates pendientes...
sacando datos en español, en una FFT de C de 16 muestras, caben 4.59 FFT-16 hechas en assembler. Visto de otra manera, una FFT de 16 muestras @ 1.8ms en C, equivale a una FFT de 64 muestras en assembler @ 2ms.
Claro, yo saque mucha info del proakis manolakis, lo importante del tutorial que tengo pendiente, no es llenarlos de formulas y matematicas, para eso pueden romperse la cabeza con el proakis, la idea, es como implementarla en un programa, entendiendo 1ro, como y porque funcionan cada una de sus partes... para despues implementar el codigo, a eso me referia con eso de que es bien facil copiar y pegar y no saber ni por donde quedo la bolita, paciencia pues...
Ademas, esta FFT que hice es universal, basta con escribir el numero de muestras y listo, el mismo codigo funciona para todas las longitudes desde 2 hasta 256 muestras
-
Felicitaciones, hiciste una FFT que se calcula antes que se haya creado y expandido el universo despues del big bang :D :D Yo no digo nada de tu rutina, te felicito por el todo el tiempo que has ocupado para realizarla. ;-) Pero todo depende de la aplicación.
Claro, yo saque mucha info del proakis manolakis, lo importante del tutorial que tengo pendiente, no es llenarlos de formulas y matematicas, para eso pueden romperse la cabeza con el proakis, la idea, es como implementarla en un programa, entendiendo 1ro, como y porque funcionan cada una de sus partes... para despues implementar el codigo, a eso me referia con eso de que es bien facil copiar y pegar y no saber ni por donde quedo la bolita, paciencia pues...
Ademas, esta FFT que hice es universal, basta con escribir el numero de muestras y listo, el mismo codigo funciona para todas las longitudes desde 2 hasta 256 muestras
Me encantan las matemáticas :D :D
Saludos! :)
-
Felicitaciones, hiciste una FFT que se calcula antes que se haya creado y expandido el universo despues del big bang :D :D Yo no digo nada de tu rutina, te felicito por el todo el tiempo que has ocupado para realizarla. ;-) Pero todo depende de la aplicación.
Precisamente has dado en el clavo, todo depende de la aplicacion, pero esta, depende de hasta a donde quieras o te veas llegar, Vamos a un ejemplo en concreto. El dia de hoy, quiero hacer mi pantallita y listo, no me importa si la rutina corre a 1.8ms o en 350us... Pero el dia de mañana, cuando quiera hacer una pantalla grande, que tenga vectores, graficos, touch screen, sensores, etc, SI, desde el comienzo, tengo una rutina que el dia de ayer hice a las carreras por querer las cosas faciles (CSS), pues obvio no voy a tener tiempo para ejecutar todo mi demas codigo en tiempo real...
Por eso hago mucho enfasis en hacer lo mas eficientemente posible las rutinas, porque asi, en aplicaciones a futuro o presentes, tenga tiempo para hacer mas procesos... Por eso, JAMAS uso C, sabiendo que es mas sencillo, no tendria tanto ancho de banda en tareas multiprocesos. Mas tarea aun, tendria que regresar a reprogramar rutinas que en su momento no me importo su tiempo de ejecucion.
Entonces, como dices, depende de la aplicacion, pero creo, que todas ellas, deben ser eficientes pensando en el futuro. Quizas en este debate ya, el pic se la pase flojeando y haciendo 10 FFTs porque no tiene nada mejor que hacer u otros procesos, pero pensar en hacer bien las cosas desde el inicio.... bueno, a la larga, obtienes tanta rapidez que puedes hacer cosas y aplicaciones como esta.... (aprovecho para hacer comercial a otro proyecto, :D :D :D)
saludos...
-
Interesante lo que comentas! Y es muy cierto, eso de mejor comenzar a hacer bien las cosas del principio. En mi caso no lo hago porque me aburro rápido y seguro dejo el proyecto :? Mientras más rápido salga y funcione adecuadamente, todo joya. Total es hobby :mrgreen:
Saludos!
-
Tambien estabas preparando un tuto con el robot de proceso de imagenes ?????
Con razon reconoci el robotcito!
-
Interesante lo que comentas! Y es muy cierto, eso de mejor comenzar a hacer bien las cosas del principio. En mi caso no lo hago porque me aburro rápido y seguro dejo el proyecto :? Mientras más rápido salga y funcione adecuadamente, todo joya. Total es hobby :mrgreen:
Saludos!
Esa es la diferencia, entre ir a cojer cubitos con un robot, o perseguir pelotas... Me gusta mas el hobby de tener un perro robot con quien jugar...
-
El problema es hacer el hobby algo que ocupe todo el tiempo :? Las cosas importantes están en otro lado :) Pero cada uno hace lo que quiere ;-) El último comentario, no hay que perder el tema principal del hilo.
Adios!
-
Tambien estabas preparando un tuto con el robot de proceso de imagenes ?????
Con razon reconoci el robotcito!
No tanto como el robot, pero por fin, conseguimos los mentados sensores de imagen para el sistema de vision artificial.... Proximamente publicaremos la camarita como un producto, o la venta del sensor de imagen, que es el talon de aquiles, que no ha dejado a muchos empezar, y por otro lado, no tenia caso continuar con el tema si nadie mas podia armar la camarita, dado la escases de los sensores de imagen....
Era solo un ejemplo de que tan rapido son ya todos los procesos del robot, tal que puede correr tras un objeto, muchos pueden tomarse todo el tiempo del mundo en tomar un objeto estatico, seguirlo... es otra cosa...
Me tomo poco tiempo esta funcion como hobby, al no tener que regresar al reprogramar... todo depende de la aplicacion...
Saludos...
-
Ya veo!
Esta interesante!
Suerte con tu producto!!
Saludos!
-
primero obtenemos un valor del ADC del PIC, luego lo guadamos en la memoria RAM
esto ce hace hasta completar la cantidad de 8 puntos. y para la cantidad de 8 puntos o muestras de datos tendremos un tiempo de 166.58 us si usamos un PIC que corra a 12 mhz
-
primero obtenemos un valor del ADC del PIC, luego lo guadamos en la memoria RAM
esto ce hace hasta completar la cantidad de 8 puntos. y para la cantidad de 8 puntos o muestras de datos tendremos un tiempo de 166.58 us si usamos un PIC que corra a 12 mhz
Si, medio entiendoo tu idea pero creo que no entendiste a lo que me referia con los tiempos de la FFT
efectivamente, 8 muestras tomadas a 40khz... tomarian 200 microsegundos exactamente
por otro lado, la FFT de 8muestras, tarda 166.58 us en ejecutarse, es decir, la FFT se calcula mas rapido, de lo que tardarias en adquirir otras 8 nuevas muestras...
Eso te puede llevar a pensar, que si hicieras la FFT al mismo tiempo que capturas 8 muestras... para cuando las termine de calcular, ya habra otras 8 nuevas muestras, sin que hayas perdido una sola en ese intervalor de tiempo... Efectivo no? si tu FFT de 8 muestras, tardara no se... 900 microsegundos haciendola en C... pues para cuando acabaras la primera FFT, ya habrias perdido 28 muestras que NO podras procesar...
De hecho la FFT de 32 muestras, tarda 903 us, el tiempo en adquirir esas 32 muestras, a 40 khz son 800 us... o sea, la FFT de 32 corre casi en el mismo tiempo en que las muestras son capturadas, solo pierde 100us, o un equivalente a 4 muestras entre FFT y FFT.
En este momento estoy mejorando el codigo, espero la FFT corra al mismo tiempo en que se llena el buffer de las muestras
Saudos
-
Esa ya lo vi anteriormente, quiero aprender a hacer eso tambien. e visto que usando filtros de kalman lo hacen, pero con mictrocontroladores pic, creo que seria como dicen en mi pais "UN FUME TOTAL", cuando hallamos terminado de aprender FFT lograremos hacer que la camara siga el objeto y genere una grilla en la pantalla calculando la posicion del objeto. Para luego.........
-
Aqui le tengo una pagina interesante donde llamada zaxione, donde nuestro amigo saul implementa un vumetro con pic16f877 al que le interese ese es el link:
http://www.zaxione.com/index.php?option=com_content&view=article&id=31:vumeter-estereo-con-varias-visualizaciones&catid=4:proyectos-varios&Itemid=3
Hola el enlace anterior es antiguo :? y ya no esta en uso, aporto el nuevo :):
http://www.zaxione.com/index.php/8-proyectos/1-vu-meter-estereo-con-varias-visualizaciones
Un saludo.