POV - (Persistence Of Vision) PIC

El proyecto que se presenta es el de un POV, si bien ya es algo común con el tema de los MCU, se trato de llevarlo a los mas simple posible.
El circuito esta desarrollado en función a un microcontrolador PIC16F84, pero con su mismo PCB se puede implementar cualquier PIC16F62x (usando el cristal o con osc interno).
La idea de este dispositivo como lo dice en su titulo Visión persistente, vendría a ser como en un tv u osciloscopio donde se utiliza un barrido horizontal para desplazar la señal vertical y así poder crear una imagen, solo que en este caso el desplazamiento horizontal lo genera el movimiento de un ventilador de pc, osea montando esta formacion de 8 leds en el extremo uno de los alabes de la turbina de 12V, logramos realizar el barrido necesario como para que se construya la imagen o el texto en nuestro caso.
Al igual que en un osciloscopio nosotros ingresamos una señal y tenemos que sincronizarla en frecuencia con la finalidad de que se vea estática en la pantalla para poder analizarla, en este caso sucede lo mismo, como tenemos el ventilador girando y la señal del pic a una determinada frecuencia, debemos sincronizar la misma para que permanesca estática y se pueda leer, para ello se implemento un sensor de efecto hall UGN3503 que comanda directamente el reset del MCU, osea cuando el sensor detecte campo magnético se va a reiniciar, y esto mismo lo va a hacer por cada revolución del ventilador por ende vamos a estar refrescando la imagen a cada rpm, con esto se logra que el texto se mantenga estático y se estabilice sin importar la variación de rpm.
A continuación se mostrara el circuito, PCB, y las fotos del proyecto andando, también se dejara un link para descargar el programa que se encuentra en ensamblador y un pdf para imprimir el pcb.
NOTA: Se debe balancear el peso, si no se encuentra bien balanceado comenzara a bibrar.
LINK DE DESCARGA: http://www.mediafire.com/?8vq3u2308j6qm95





80 comentarios:

  1. muy, muy, muy buen post, buen trabajo y mis felicitaciones por el proyecto me a servido de mucho, gracias

    ResponderBorrar
  2. que bueno, gracias. ¿que compilador utilizaste?

    ResponderBorrar
  3. Hola si no recuerdo mal el programa se codifico en assembler en el block de notas, y se compilo con el MPASM de microchip.
    Saludos.

    ResponderBorrar
  4. Hola amigo, los lees como los pusiste?

    ResponderBorrar
    Respuestas
    1. hola, no entiendo bien la pregunta, los caracteres se hacen columna por columna y se envia cada una de ellas al puerto del MCU con intervalos de tiempo iguales. Cada letra requiere 5 columnas.
      Saludos.

      Borrar
  5. Hola amigo, los leds como los pusiste?

    ResponderBorrar
    Respuestas
    1. hola son leds de 1,8mm, conectados al puerto del MCU junto a su resistencia limitadora por led.
      Saludos

      Borrar
  6. que sensor se puede utilizar aparte de este ?

    ResponderBorrar
    Respuestas
    1. Podes usar cualquier sensor Hall, en realidad cualquier sensor de cualquier tipo, la idea es que funcion ecomo un switch, en mi caso use ese porque me parecia practico el iman, pero podes usar infrarrojo tambien, un fototransistor cumpliendo la misma funcion que el hall y un diodo infrarrojo apuntando al mismo cumpliendo la funcion del iman.
      Saludos.

      Borrar
    2. Usando un hall de 3 terminales se debe invertir la forma en que sensa el mclr, dado que su funcionamiento es opuesto; conduce excepto cuando se le acerca un imán.

      Borrar
    3. Hola, depende del modelo de sensor efecto Hall. Saludos.

      Borrar
    4. cuando "mido" tensión entre la salida del hall y la pata 14 del micro funciona, de lo contrario no. ¿Qué hago?

      Borrar
    5. Hola, esta bien, asi debe funcionar, cuando el hall envia tension el reset del micro se pone a estado alto y activa el proceso interno, cuando el hall envia nivel bajo, el reset se pone a 0v y el proceso interno se reinicia, lo que pasa que esto sucede cuando el hall pasa por un iman, entonces al girar y pasar repetidas veces por el iman, esta generando una señal cuadrada en el reset que permite ver por el lapso mientras se encuentra activo, la persistencia en los leds. Saludos.

      Borrar
    6. Al medir, le estoy "agregando un resistor" (con el tester). El multímetro es resistivo cuando mide tensión. ¿Hay que agregarle un resistor entre el pin 4 y el 14? ¿De qué valor, si eso es cierto?

      Borrar
    7. Podes agregarle un Pull-Up entre RST y VDD de unos 10k.
      De todas formas la impedancia interna de un multimetro es muy elevada, tan elevada que es despresiable como para casi cualquier circuito digital, la idea de que la impedancia sea alta es para que se drene la menor corriente posible en el instrumento y la medicion sea mas exacta.
      Saludos.

      Borrar
    8. Gracias, ahí estoy en eso. Muy bueno el proyecto, lo he "retocado" un poco, ahora te subo fotitos si queres.

      Borrar
    9. Por nada, espero que te sirva, claramente es un proyecto muy básico, es más que nada para tener una "idea" de cómo funcionan estos POV, pero está claro que hay versiones mucho mas elaboradas. Espero que te funcione bien!!! :D
      Bueno dale subí alguna foto así lo vemos! Gracias!
      Saludos

      Borrar
    10. ehmm no se ve... ilumina como un símbolo pero no se ve nada...

      Borrar
    11. Probaste variando la velocidad del motor? ya que de ello depende si logras ver toda la imagen/texto o si solo ves un sector del mismo.

      Borrar
    12. Mirá: Esto solamente muestra http://imgur.com/fUJEfbR

      Borrar
    13. Mmm proba variando la velocidad, o bien una vez que lo tenes girando desplazale el iman para otros costados a ver que hace, como responde.

      Borrar
    14. Probé todo eso y nada. El reloj gira en sentido antihorario, olvidé mencionarlo.

      Borrar
    15. El pic se alimenta de los 5V que obtengo del transformador conectado a un puente rectificador, un capacitor y al 7805. Eliminé la cr de 3v3 que tenía.

      Borrar
    16. Esta bien, igual deberia andar con esa fuente, pero se me hace que puede estar en el sentido de giro el tema... no pode sinvertirlo?

      Borrar
    17. No, porque es polarizado... no como el resto de los motores dc convencionales.

      Borrar
    18. Ahi tenes un tema, ya que el problema es que cuando se produce el sincronismo con el iman, el cartel en lugar de desplegarse se corta. Pudiste probar poniendo el iman en diferentes lugares?, o mas alejado, que diametro tiene donde tenes el iman, para saber el recorrido que hace, ya que el perimetro que recorre si el diametro es poco, sera menor. fijate que en mi video lo tengo con el sensor en la punta del pov, entonces tiene el diametro maximo donde recorre el perimetro mas largo y asi logra desplegar un tiempo de reinicio mayor y mostrar el mensaje completo. distinto es si el sincronismo se hace mas rapido y ahi no te llega a mostrar nada, de todas formas proba aumentar la velocidad porque pareciera en la foto que todo tu texto esta comprimido en ese sector

      Borrar
    19. Aparte creo que en el video lo muestra en el mismo sentido, fijate (soy el mismo ezequiel de antes, pero se me cerró esto).

      Borrar
    20. El hall está en la placa de los led's (o sea, en la punta)

      Borrar
    21. Otra cosa, debido al consumo (le hice un trafo para eliminar la pila como dije antes) el motor no gira demasiado rápido porque tiene más peso y porque la corriente que recibe es de unos 500mA. Creo que deberé retocar el .asm añadiéndole más retardo o el loop...

      Borrar
    22. ya encontré el problema. Es mi hall sensor, que es normal cerrado (o sea, la pata "out" está a GND contínuamente, excepto cuando pasa sobre el imán). Con razón sólo mostraba la primer letra :v

      Borrar
    23. A, esta bien, algo tenia que haber, porque el programa es muy sencillo y el circuito tambien, como para que funcione tan mal. De todas formas tene en cuenta la velocidad del motor, ya que si es muy lenta es posible que veas parpadeos y demas.
      Lo del Hall no se soluciona girando el mismo? yo tengo unos aca que de un lado cierran y del otro lado abren, osea segun de que lado le ponga el iman.
      Saludos.

      Borrar
    24. eso lo soluciono toqueteando el loop y el delay o retardo. Lo del hall sensor, hice pruebas aparte y no. Siempre está NC (GND) el out y cuando pasa sobre el imán, el pin OUT pasa a NA

      Borrar
    25. Me olvidaba, si queres podes pasarte por el grupo de Facebook, que hay bastante gente ya en el tema que por ahi puedas sacar otras opciones y demas, para este u otros desarrollos!

      Borrar
    26. dale, pasame el nombre del grupo! :D

      Borrar
    27. https://www.facebook.com/groups/electgpl

      Hay mucha gente copada, gente que recien empieza, gente que sabe y profesionales. esta bueno

      Borrar
    28. el hall tiene una inscripción y lamentablemente no encuentro el modelo. La inscripción es:
      105C
      F 35

      Borrar
    29. No te voy a mentir, recién acabo de terminar unos tutoriales sobre Assembler... estoy bastante fresco en el tema. Creo que se podría modificar desde el software para que funcione el circuito como normal cerrado, pero honestamente no tengo ni idea de cómo hacerlo.

      Borrar
    30. Si mira, en realidad ahora para la sencillez del firmware se esta usando la interrupcion externa por reset, por lo que ese pin no funciona de otra forma (en el 16F84) pero si usas otro micro por ejemplo 16F628, podes usarlo como I/O, sino podes tambien no usar ese pin de Reset y usar cualquier otro, testear la entrada y si es verdadera producir un goto al inicio de la tabla. o bien generar un reset por programacion. hay muchas formas de hacerlo.

      Borrar
    31. también puedo cambiar el hall por otro... tengo varios coolers por suerte y de ellos puedo extraer de esos de 4 pines. Uno de los pines es normal abierto y el otro normal cerrado, tengo entendido. ¿Es así?

      Borrar
    32. Esos Halls denominados BLDC tienen dos salidas porque de ellas manejan directamente las dos bobinas del motor Brushless de un FAN, no se si te sirvan como estado logico, pero si queres podes cambiar el frimware, y en lugar de usar el reset usar otro pin del puerto A por ejemplo como entrada y mediante la tecnica de Polling (testear continuamente una entrada) podes reiniciar la tabla donde creas los datos de salida para comience a empezar nuevamente.

      Borrar
    33. http://www.diodes.com/datasheets/AH284.pdf
      Ahi te dejo un datasheet comercial de un hall para motor brushless

      Borrar
    34. Conseguí este http://www.datasheetarchive.com/dl/Datasheet-010/DSA00167474.pdf dice NO (Normally Open)!!! Estamos de fiesta!!! :D

      Borrar
    35. buenisimo! espero que te funcione mejor con el nuevo sensor

      Borrar
    36. Buenisimo!!! subi foto!! Saludos!

      Borrar
    37. Ya termino las placas de circuito impreso y las subo :D

      Borrar
  7. ya arme el circuito tal como dice el diagrama pero no me sale las letras estoy utilizando un sensor magnetico tipo fusible que va conectado al reset y al vdd
    en donde estaria mi falla?

    ResponderBorrar
    Respuestas
    1. A estas usando un ReedSwitch, el problema de estos sensores es que son lentos, de todas formas la forma correcta de coneccion seria, del Reset una Resistencia de 10k a Vdd y del Reset el ReedSwitch a GND. de esa forma cuando se acciona el ReedSwitch (siempre funcionando como Normal Abierto) se reinicia el microcontrolador. Fijate si lo podes modificar y avisame!

      Borrar
  8. hola una pregunta lo que se encuentra alado de la pila y casi junto al pin 18 del ucontrolador quees???? no lo puedo aprecia my bien espero tu respuesta gracias creo qparece un led porfadime que es

    ResponderBorrar
    Respuestas
    1. Hola, (en la segunda foto del post) de izquierda a derecha, Primero está el imán en el armazón del fan de PC, luego en el rotor lo primero es un sensor efecto Hall, que es el que junto con el imán mantiene el sincronismo, después viene la Pila (CR2032 3V), después viene el microcontrolador, y encima de él se encuentra el Cristal de cuarzo de 4MHz (el componente rectangular plateado), después vienen los 8 leds que son los que forman la imagen, y al lado de los 8 leds hay un "pedazo" de transistor que solamente sirve de contra peso (el cuadrado negro con el agujero), para balancear el peso del rotor y que no vibre, pero podría usarse un contrapeso de cualquier material y forma mientras establece el sistema.
      Saludos.

      Borrar
    2. muchas gracias por responder me quedo claro todo y el crystal de cuarzo lo veo muy bien pero una ves mas con la duda y perdon por ser tal molestoso :) pero lo que esta entre la pila y el cristal encima del ucontrolador (esta juntito a la pila) no lo noto muy bien y en el circuito impreso veo unas conexiones a la rectura del pin 18 del micro porfa dime que es lo que va conectado ahi una ves mas perdn por mlestar ......

      Borrar
    3. aaa perdon, jeje sabes que paso.. no lo vi.. por algun motivo es como que no lo vi en la foto no se contrasta bien o no veo bien yo, eso es un Jumper, es solo el interruptor de encendido!
      Saludos!

      Borrar
    4. ok muchas pero muchas gracias por todo sigue adelante en todo y muchas gracias por tomarte la molestia de responder eres lo maximo mil gracias hasta la proxima adiosssss....... :)

      Borrar
    5. Por nada! para eso es el blog! espero que te funcione bien!
      Saludos.

      Borrar
  9. Hola! Se puede reemplazar un conector por los led's y luego hacerlo para que se muestre en forma horizontal?

    ResponderBorrar
    Respuestas
    1. HOla, si, claramente podes reemplazar los leds por un conector. Saludos.

      Borrar
  10. Buen post, oye en el archivo asm no se alcanza a distinguir el mensaje que pusiste, si quiero cambiarlo estaría bien ponerlo de esta forma, por ejemplo para la O
    retlw b '01111110''
    retlw b '10000001'
    retlw b '10000001'
    retlw b '10000001'
    retlw b '01111110'

    ResponderBorrar
    Respuestas
    1. Hola como estas, es correcto!, ese retorno de literal conformaria:

      _ooo_
      o___o
      o___o
      o___o
      o___o
      o___o
      o___o
      _ooo_

      Saldos.

      Borrar
    2. Gracias, ya de último, cuál es el led más cercano al centro del ventilador el de RB0 o el de RB7, para saber montarlo y que no quede al revés

      Borrar
    3. Muchas gracias Sebastian andaba con problemas con el código

      Borrar
    4. Por nada, cualquier cosa consultame! Saludos!

      Borrar
    5. Oye el archivo pcb no me quiere abrir, uso pcb wizard y live wire y no me abre, podrías pasar el archivo de nuevo ya que a lo mejor está dañado el que tengo

      Borrar
    6. Hola, los archivos de este post están realizados con el programa ExpressPCB, el resto de los post están realizados con Proteus y Eagle. No usamos PCB Wizard o Live Wire.
      Saludos.

      Borrar
  11. hola muy buen proyecto, solo tengo una duda en el código donde se puede cambiar el valor del tiempo cambiar el valor de los mili segundos y también si este proyecto puede realizarse sin usar un reset. Gracias

    ResponderBorrar
    Respuestas
    1. Hola, el Delay esta creado en la subrutina:

      Retardo movlw .10
      movwf J
      LoopA movlw .15
      movwf K
      LoopB decfsz K
      goto LoopB
      decfsz J
      goto LoopA
      return

      Para calcular un delay en ASM tenes que calcular cuanto tiempo demora cada una de las instrucciones utilizadas, desde el "call retardo" hasta el "return".

      CALL: 2 ciclos
      MOVLW: 1 ciclo
      MOVWF: 1 ciclo
      DECFSZ: 2 ciclos
      GOTO: 2 ciclos
      RETURN: 2 ciclos

      ((((6*15)+4)*10)+6)=946us aproximadamente 1ms

      Respecto a cambiar el pin de reset (MCLR) por otro pin, podes hacerlo sin ningún problema. En lugar de reiniciar el micrcontrolador tendrás que reiniciar la rutina, es decir, vos tenes la tabla donde alojas los valores literales LeeTabla, donde cada vez que es llamada posiciona el registro que se encuentra en la posiciona PCL + el valor en el programa, y luego retorna un valor literal "retlw" que se copia al puerto B y lo ves en los leds.
      Aquí podrías omitir el MCLR (si no lo usas tenes que dejarlo con un PullUp de 10k aprox), y tendrías que hacer un salto condicional cuando alguno de los pines encuentre un pulso del efecto Hall, por ejemplo podes agarrar la entrada RA0.
      Vas a tener que cambiar la configuración de puertos, ya no sera: clrf TRISA, ya que eso dice que son todas salidas, sino que tendrás movlw b'0000001', de bajo movwf TRISA, esto dice que serán todas salidas menos RA0 que es entrada.
      Luego tenes que hacer un salto condicional preguntando por la entrada.
      btfss (testea el bit F, y salta si esta seteada (es 1)).

      entrada btfss PORTA,0
      goto Sigue
      clrf TablaPosicion
      sigue .............

      De esta forma testea RA0, pregunta si esta en 1, si es correcto borra el inicio de la tabla y "reinicia" el proceso, si no salta a Sigue, donde la etiqueta sigue, podes ponerla así como esta seguida, y continuara con el programa, saltando el borrado del inicio de la tabla.

      Saludos.

      Borrar
  12. Hola, buen proyecto amigo, el ugn3503 a dónde va conectado en su pin 2? Según encontré va a gnd, pero en tu pcb no va conectado a nada, o más bien va al (-) de la batería?

    ResponderBorrar
    Respuestas
    1. Hola, esta conectado a GND tanto en el diagrama como en el PCB, fíjate que en el PCB es el pin del medio que es la masa de toda la placa que a su vez conecta también la batería y el VSS del microcontrolador.
      Claro el negativo de la batería es el GND.
      Saludos!

      Borrar
  13. hola amigo muchas gracias por tu aporte. ya hice el circuito en la protoboard pero me actúa diferente al principio no me prende ningún led al revisar el cableado y los componentes noto que el cristal esta un poco flojo y al momento de tocarlo empiezan a parpadear los leds al principio sospecho que era eso pero noto que si no lo toco no parpadean los leds.le puse otro cristal y actúa igual o peor ya que si lo ensamblo bien parpadean todos los leds sin tener ninguna variación quito un pin del cristal de la proto y empieza a variar según el programa.
    crees que la he regado en algo????? o es normal este comportamiento

    ResponderBorrar
    Respuestas
    1. Hola como estas?, si podes sácale una foto y sibila a algún lado asi me pasas el link y la veo.
      Debería andar, como tenes el Reset (MCLR)? tenes puesto el sensor de efecto hall?

      Saludos.

      Borrar
    2. te etiquete un vídeo.según yo el puerto MCLR es el pin 4 por cierto estoy usando un pic16f84a Y no encontre el ugn3503 pero me dieron un remplazo que es An503

      Borrar
    3. Proba agregar una R de 10k entre MCLR y Vdd, ya que el AN503 parece ser salida a colector abierto.

      Saludos!

      Borrar
    4. de verdad amigo no sabes lo mucho que te agradezco que me estés ayudando ya que es un proyecto para poder terminar la preparatoria abierta. le conecte la resistencia de 10k y al parecer ya no parpadea pero le paso el iman al tal grado que lo toque y solo se apaga le vuelvo a pasar el iman y no reacciona despues de un rato le paso el iman de igual forma que lo toque y prenden todos los leds sin ninguna variacion

      Borrar
    5. Proba pasar el imán rápido, el imán fíjate de que polo lo pasas ya que los sensores hall son polarizados en cuanto al Norte y Sur.
      La idea es que el imán pase rápido ya que el POV debe girar rápidamente.
      Saludos!!

      Borrar
    6. lo que paso fue lo siguiente:con la resistencia de 10k le paso el iman al AN503 y no reacciona le quito la R. se la quito y reinicio la a prueba y si prende y apaga pero no inicia el programa para que me entiendas mejor te etiquete un video

      Borrar
    7. Mm.. habria que revisar el circuito y si el sensor esta funcionando de la misma manera que el UGN, ya que si funcionara al revez podria no andar.

      Borrar
  14. Este comentario ha sido eliminado por el autor.

    ResponderBorrar