TODOPIC

Microcontroladores PIC => * PROYECTOS * => Mensaje iniciado por: matyvico en 30 de Enero de 2013, 18:55:51

Título: Generador de señales USB PIC18F4550
Publicado por: matyvico en 30 de Enero de 2013, 18:55:51
Buenas y bienvenidos a este post. Pido disculpas por adelantado, este es el primer post que inicio y obviamente va a haber algún que otro error. Doy gracias por adelantado por visitarlo, espero que alguno se anime y colabore, o porque no, arme su propio generador de señales!

El proyecto nace como una aplicación de microcontroladores (de la familia de Microchip) para la regularización de una materia de la facultad (Técnicas Digitales II). Después de mucho pensar en que hacer (siempre es lo que mas me cuesta) decidí en hacer un generador de señales ya que no tengo uno.

La idea es bien simple, pero quería compartirla porque considero que abarca muchos temas interesantes, en especial uno que me llamo la atención y es la utilización de un display de reemplazo de los Nokia 1100.

El proyecto NO está terminado por el momento, pero (espero) debería estarlo en los próximos días... Así que subo lo que tengo hasta ahora que en su mayoría funciona y obviamente espero sus críticas y sus opiniones para mejorarlo cada vez mas entre todos (esta es una de las razones por lo que lo comparto, además de devolver algo de tooooodo lo que pude aprender en estos días de este foro).

El proyecto se (quiso) centró en:
-Generar DIGITALMENTE a partir de un microcontrolador (PIC) distintos tipos de señales preestablecidas y comunes.
-Para lograr lo anterior se hace uso además de un conversor DA (entrada en paralelo) (TLC7226 - muestra gratis que conseguí de Texas Instruments).
-Que las señales pudieran tener polaridad negativa (se puede lograr mediante el conversor mencionado).
-Bajo consumo.
-Maxima frecuencia que pueda lograrse para cada señal (sin comprometer "tanto" la forma de onda de la señal).
-Pantalla y botonera (todo digital) para interfaz con el usuario.
-Interfaz y programa SIMPLE.
-BARATO  :D

Actualmente el proyecto PUEDE:
-Generar señales tipo: Rampa (dientes de sierra), Senoidal, Triangular, Cuadrada.
-Utilizar toda su interfaz (ir y venir entre menúes y seleccionar opciones).
-Mandar a sleep al micro en una intención de "apagar" el sistema.

Actualmente el proyecto NO PUEDE:
-Modificar la amplitud de la señal.
-Modificar la frecuencia/período de la señal.
-Modificar el ciclo de trabajo de la señal.
-Conectarse por USB (este es uno de mis objetivos a largo plazo).
-Y muchas cosas que seguramente me olvido.

De cualquier manera son modificaciones (que supongo) son simples de implementar (salvo la del USB) y hasta tengo preparadas las funciones (en el programa) para aceptar estas modificaciones.

Herramientas utilizadas:
-PIC18F4550
-TLC7226
-Display Nokia 1100
-PICkit3
-CCS, PIC C v4.130
-Proteus ISIS v7.8 SP2
-PICkit3 Programmer
-TODO PIC (foro)  ;-)

Lo que propongo (a los que les interese) es generar una lista de cosas implementar, digamos una "wish list" además de modificaciones al código que les adjunto para ir tratando de llevarlo hacia los objetivos planteados (como por ejemplo mejorar el aspecto del consumo y cosas por el estilo) y en todo caso plantear nuevos objetivos, de a poco quien dice, puedan hasta armarse un generadorsito de señales que sea portable, de bajo consumo y les salve por ahí las papas!  :mrgreen:

Bueno, mas abajo entonces les adjunto los archivos de código fuente y los de simulación en proteus, si puedo además trataré de adjuntar fotos o un enlace a un video para que  vean el funcionamiento actual.

Espero que esto llegue a buen puerto ya que es algo que deseaba hacer hace mucho tiempo y pueda ir actualizando este tema con frecuencia (en lo posible ya que estamos en época de exámenes jaja).

Muchas gracias a todos por su tiempo y sigan programando!  :c)
Título: Re: Generador de señales USB PIC18F4550
Publicado por: Alumno en 01 de Febrero de 2013, 01:14:10
hola amigo, queria simularlo pero no simula el proteus ( not found LCD1 ) yo también estoy diseñando
un generador de funciones para ponerlo al alcance de todos ya lo tengo muy avanzado puedo generar
ondas cuadradas, triangulares, diente de sierra, y la onda seno se puede variar la frecuencia,
la amplitud y el offset y todos estos datos se muestran en una LCD de 2x16  cuando lo termine
pienso publicarlo, estaba pensando ponerle una salida PWM también si estas interesado puedo pasarte
la simulación de los circuitos encargados de la amplificación y el offset funcionan bien.
Título: Re: Generador de señales USB PIC18F4550
Publicado por: sirias52 en 01 de Febrero de 2013, 02:07:12
Interesante proyecto. Analizando código para aportar ideas. y Gracias matyvico por compartir tu proyecto.

Título: Re: Generador de señales USB PIC18F4550
Publicado por: matyvico en 01 de Febrero de 2013, 18:02:42
Muchas gracias por responder! Ya me estaba asustando!  :D te voy respondiendo por partes:


hola amigo, queria simularlo pero no simula el proteus ( not found LCD1 )

Tenés razón, y proteus aún mas jaja no vas a poder simularlo nunca porque para hacerlo hace falta importar el modelo de la pantalla de Nokia 1100 (además del PIC18F4450 y algunos LED's para observar las salidas de los puertos) en el esquema que armes en el proteus. Me olvidé de agregarlo en el posteo anterior! En este post lo adjunto, vas a tener que ubicar los archivos en la carpeta de instalación de proteus en los lugares correspondientes a "modules" o algo así, te paso los links del foro de donde yo conseguí eso, la librería y los ejemplos de uso de la misma:

Link al foro sobre display (http://www.neoteo.com/foro/f29/display-nokia-1100-18f4550-2833-page-2/)

Módulos pantallas NOKIA (http://www.luisko.net/cantillo/descargas/Nokia_LCDs-Proteus_VSM_Models.zip)

Citar
yo también estoy diseñando un generador de funciones para ponerlo al alcance de todos ya lo tengo muy avanzado puedo generar
ondas cuadradas, triangulares, diente de sierra, y la onda seno se puede variar la frecuencia,
la amplitud y el offset y todos estos datos se muestran en una LCD de 2x16  cuando lo termine
pienso publicarlo, estaba pensando ponerle una salida PWM también si estas interesado puedo pasarte
la simulación de los circuitos encargados de la amplificación y el offset funcionan bien.

Eso es genial! Podríamos basarnos en el tuyo, en el mio, o mezclarlos y de ahí avanzar en conjunto entre todos! (esta última opción me parece la mejor si estas de acuerdo) de cualquier manera agradecería si los subís así voy viendo tu código y veo que podemos mezclar!

Citar
Interesante proyecto. Analizando código para aportar ideas. y Gracias matyvico por compartir tu proyecto.

Muchas gracias! Recién entro al foro pero me gusta mucho la idea de compartir! (soy pro open soft y hard, de hecho estoy muy rústicamente tratando de comenzar un blog con esa finalidad www.eohos.wordpress.com).

Aparte de todo lo anterior quiero hacer una aclaración MUY grande... Como trato de ser prolijo en todo lo que hago, mi forma de programar no podría (intentar) ser de otra forma, por lo que una vez que hago algo le doy mil vueltas hasta que logro la manera mas simple o mas correcta, en este caso intento de hacer la programación de acuerdo a la mayoría de los estándares posibles y a las buenas costumbres de programación, cosa que se me complica porque no conozco muy a fondo el compilador y las millones de opciones que este aporta...
Es por lo anterior que modifiqué demasiado el programa anterior que publiqué, y si bien las diferencias pueden parecer menores NO lo son. Por dar un ejemplo, en el programa anterior yo utilizaba la interrupción INT_EXT para llamar al menú principal (una función) como eso no debe hacerse desde una interrupción es que la modifiqué para que esto sea hecho mediante una flag y desde el main() ahí sí llamar a la función principal(), esto obviamente generó muchísimas modificaciones ya que para "volver hacia atrás" en un nivel del menú (como dije utilizaba la interrupción INT_EXT) dejaba SIEMPRE seteada la bandera de la interrupción es decir, NO hacia clear_interrupts(INT_EXT); (previo a esto había deshabilitado la interrupción con: disable_interrupt(INT_EXT);) en cambio la dejaba en 1 y cuando necesitaba volver lo que hacía era enable_interrupt(INT_EXT); ahí la interrupción actuaba inmediatamente (porque su bandera había sido seteada previamente) y llamaba nuevamente al menú principal...

Básicamente un desastre jaja, por lo que ahora la interrupción fue modificada para hacer algo que creo yo mas correcto, la interrupción solo se habilita para interrumpir la generación de señal y para retornar del sleep, para cualquier otra cosa la interrupción está desactivada y solo es utilizado el botón (conectado a RB0) como una entrada digital que selecciona la opción correspondiente, en el menú que sea, y luego retorna hasta la función main() que llama a su vez a principal() (para mostrar el menú principal) mediante el uso de la flag (salir) y el uso de muchos return;  :D

Se que es complicado de entender leyéndolo así, pero siguiendo el código fuente la lógica de movimientos dentro del menú y las llamadas a funciones no es tan complejo. Nuevamente para el aventurero que se embarque en este proyecto, si ven cualquier cosa que quieran modificar o mejorar avisen nomas!  ;-)

Además de todo lo dicho anteriormente, en la librería que adjunté para el uso del display en estos días he descubierto un error que me tuvo estúpido programando, simulando, leyendo, etc... renegando en sí jaja y es que como verán de los ejemplos del display (desde el foro se pueden ver) el uso del dibujo de rectángulos (comando lcd_rect();) me trae problemas muy serios, dibujar se dibujan, como pueden ver si simulan mi programa anterior en los items de AMPLITUD, FRECUENCIA, PERIODO O DUTY CICLE el inconveniente es que no se si está mal la librería o que algún puntero o variable se excede de sus límites y me invade otra variable, que resulta ser un array donde se almacenan las opciones del menú a mostrar (char opciones[8][16]) pisándome con valores extraños o con caracteres nulos resultando en un menu mal impreso (caracteres extraños, faltan letras, se corta la frase, etc), por lo demás todo funciona a la perfección y esto fué corregido en la nueva versión del programa (por desgracia no como yo quisiera puesto que la "solución" fue NO utilizar el dibujado de rectángulos).

Bueno me extendí demasiado, pero eran varias cosas! Muchas gracias por su tiempo! Saludos!
Título: Re: Generador de señales USB PIC18F4550
Publicado por: Alumno en 09 de Febrero de 2013, 01:31:54
disculpa la demora, ahi te paso el circuito simulalo, pruebalo con otros tipos de ondas etc.
el opamp mas recomendable es el LF353 ya que es FET.
http://dl.dropbox.com/u/103747449/OFFSET%20Y%20GANACIA.rar
Título: Re: Generador de señales USB PIC18F4550
Publicado por: Alumno en 02 de Marzo de 2013, 00:58:14
hola queria saber como vas con el proyecto?
Título: Re: Generador de señales USB PIC18F4550
Publicado por: matyvico en 02 de Marzo de 2013, 11:22:22
disculpa la demora, ahi te paso el circuito simulalo, pruebalo con otros tipos de ondas etc.
el opamp mas recomendable es el LF353 ya que es FET.
http://dl.dropbox.com/u/103747449/OFFSET%20Y%20GANACIA.rar

Descargue la simulación que me pasaste, la probé y funcionó en la simulación pero no pude ver mucho mas.

Citar
hola queria saber como vas con el proyecto?

Al proyecto lo tenía que presentar en la facultad para regularizar una materia y solo tenía que funcionar la generación de señales y la muestra del menú en el display y así fué lo que presente, no como me hubiera gustado, pero no había mas tiempo! Ahora mi objetivo es que lo sigamos desarrollando ya por el simple hecho de hacerlo, y así lograr la conexión USB, etc. El problema es que hasta la semana que viene me es imposible ponerme de nuevo con algo porque estoy estudiando para un final bastante largo y complejo, así que hasta que eso no termine no voy a poder seguir desarrollando para este proyecto. De cualquier manera tengo pensadas muchisimas cosas para agregarle, para sacrle pero sobre todo estaba pensando seriamente en cambiar de "plataforma" hacia los entornos y el lenguaje de Microchip, la experiencia que tuve con CCS no fue de las mejores y además mi interés máximo en todo esto es aprender a programar "como la gente" con todas las formalidades y las cuestiones técnicas/prácticas tenidas en cuenta y para eso me parece que casi que tendríamos que arrancar de nuevo! No se, escucho ofertas!!!  :mrgreen:
Título: Re: Generador de señales USB PIC18F4550
Publicado por: Alumno en 04 de Marzo de 2013, 02:14:03
ok, dale prioridad al examen ahora hablando sobre las plataformas yo uso CCS y tambien C18 y C33 y estoy empazando a usar el C32, creo que el CCS esta bien para micros de 8 bits( PIC10, PIC12, PIC16, PIC18) pero para 16bits y 32bits necesariamente se tienen que usar los compiladores de MICROCHIP.
Yo lo logre la conexion USB en los tres modos CDC, BULK TRANFER y HID usando CCS es mas facil y hay un monton de ejemplos y tutoriales en toda la red.
para este proyecto estoy usando el PIC18F4420 este puede trabajar hasta 40MHZ, es un pic comercial sin USB
Título: Re: Generador de señales USB PIC18F4550
Publicado por: javibautista90 en 04 de Abril de 2015, 23:58:52
hola  me prodrias decir como hacer para generar una onda senoidal (pura si es posible) con el pic 18f4550. es para hacer un inversor de 12vDC a 220V AC. desde ya muchas gracias
Título: Re: Generador de señales USB PIC18F4550
Publicado por: KILLERJC en 05 de Abril de 2015, 01:47:59
hola  me prodrias decir como hacer para generar una onda senoidal (pura si es posible) con el pic 18f4550. es para hacer un inversor de 12vDC a 220V AC. desde ya muchas gracias

Aqui lo que hace es tener una tabla o array con todos los valores del seno en sus 360 grados ( el solo tomo 200 valores ), luego saca esa señal por un puerto el cual tendra un DAC y lo convertira a analogico. Esto convierte tu señal a una "casi" senoidal, pero no tiene la potencia como para lo que exigis vos.

Si es para un inversor, normalmente la frecuencia es fija, y se utilizan otras tecnicas, como SPWM o SVPWM entre otras, ya que al atravesar el transformador las otras frecuencias se "eliminan". Te dejo una imagen de lo que es un SWPM bipolar

http://www.intechopen.com/source/html/39956/media/image48_w.jpg

Con lo cual podrias hacer una tabla de cuando esta en positivo y cuando en negativo y asi conmutar las salidas. La tabla se hace en comparacion de una señal triangular y una senoidal, la division de estas frecuencias da un numero entero y mientras mayor sea la frecuencia de la trinagular, significa menos distorsion armonica. Seguramente debe haber un codigo para un inversor SPWM bipolar o unipolar ( SPWM inverter ) de algun micro y que podes sacar. pero ver la teoria o la idea detras de la generacion de la onda senoidal mas el tema de la distorsion armonica ayudaria mucho y seria imprescindible.

Título: Re: Generador de señales USB PIC18F4550
Publicado por: Kaneki en 02 de Junio de 2017, 22:28:34
disculpa la demora, ahi te paso el circuito simulalo, pruebalo con otros tipos de ondas etc.
el opamp mas recomendable es el LF353 ya que es FET.
http://dl.dropbox.com/u/103747449/OFFSET%20Y%20GANACIA.rar
El link se cayó podrías reponerlo😀