Todas las salidas de un 12F629 quedan en alto

Ante buenas noches a todos (ahora es de noche para mi jeje ), tengo un problema con un PIC 12F629, resulta que estoy armando un display de mensajes hecho con leds, es una columna de 7 leds, que desplazados por el aire a cierta velocidad deben mostrar un mensaje cortito.

El problema es que el codigo funciona bien en el MpLab, pero en la practica me deja los 7 leds prendidos (todos las salidas en alto), es la segunda vez que programa este tipo de integrados y no se si la primera vez funcionó :( . Utilizo el icprog :cool: y el programador Quark Pro 2 (basado en el JDM), no estoy seguro de si estoy configurando bien el oscilador en el IcProg (IntOsc gp4 o CLKOUT), ni siquiera se si debo colocar una de esas 2 opciones. Dejo el valor de oscilador que tiene el integrado (345C). Supuestamente ya esta configurado un valor en el archivo fuente, por ende no me deberia cambiar nada lo que configure en el soft.

Si alguien me puede ayudar le voy a estar MUY agradecido (y en deuda ) . Dejo el archivo fuente (ASM) y un par de fotitos :eek:
 

Adjuntos

  • 6rsyeq_140.jpg
    6rsyeq_140.jpg
    51.4 KB · Visitas: 27
  • 11uxhm8_149.png
    11uxhm8_149.png
    7.8 KB · Visitas: 57
  • real_619.jpg
    real_619.jpg
    99 KB · Visitas: 60
  • air_display_128.asm
    6.5 KB · Visitas: 18
Bueno, no me extrañaría que veas todos los leds prendidos todo el tiempo cuando eso está quieto.
Empezarías a ver las "letras" como resultado del movimiento y del muestreo/retención del ojo (mejor dicho, de la parte de nuestro cerebro que interpreta los datos del ojo).
Veo en el código fuente que se usan retardos de 500 us, si uno ve parpadeando algo con ese ritmo, nuestra mente ve algo constantemente prendido.
Más aún, lo va a ver constantemente prendido si parpadea más allá de unas 50 veces por segundo (eso creo que es para dar sensación de movimiento, para algo estático debe ser bastante menor).

Entonces, si eso esta diseñado para dibujar 50 veces por segundo (no sé cuanto será exactamente, habría que estudiar los tiempos en el código fuente) una frase, quiere decir que cada led se estará dibujando cada 50 x nro columnas de cada letra x nro letras en la frase.
Es una frecuencia muy alta que nuestro ojo no puede distinguir.

Para ver si funciona realmente y no es un efecto aliasing de nuestro ojo (perdón, mente) tendrías que usar un osciloscopio que te permita ver las formas de onda que salen de las patas del PIC. Si salen pulsos no me preocuparía, tendrías que verlo en movimiento para decir si funciona. Si sale un nivel de continua entonces ahí sí debe ser un problema aparte del aliasing visual. De ser este último caso avisanos y vemos que puede ser.

Saludos
 
Nunca está demas poner un capacitor electrolítico más otro cerámico en los pines de alimentación del PIC. También debería ir uno entre /MCLR y GND.
Pero lo de las salidas en alto creo que se debe a lo que expliqué antes.
 
http://ww1.microchip.com/downloads/en/devicedoc/41190c.pdf

En el pic12f675 la patilla 4 era solo entrada
Debes configurar la parte analogica, por defecto viene activada.
Mira el ejemplo 3.1 de la pagina 21



Te recomendaria que antes de programar todo eso, primero montate un simple intermitente de 1segundo, te permitira verificar que las cosas andan, un simple goto y un retardo, como mas simple mejor.

Te recomiendo utilizar los retw 'loque sea' y un call, mucho mas sencillo y facil de modificar.


La tabla, donde pci es un puntero

numbers addwf pcl,f

;number 0

retlw 0x1C

retlw 0x36

retlw 0x63

retlw 0x6B

retlw 0x63

retlw 0x36

retlw 0x1C

retlw 0x0

en el bucle principal
movfw counter2

addlw 4 ;busca el valor numero 4
call numbers ; retornara en w el valor de la posicion 4


Con dos tablas, una para los puntos de cada letra y otra para el mensaje.
Dos bucles, uno externo para recorrer el mensaje y un interno para recorrer los puntos + retardados.

Mira este codigo tal y como lo hacen los maestros, trata de un generador de video que "dibuja" la hora y un mensaje
http://www.ubasics.com/archive/picdream.zip
 
tiopepe123 dijo:
Te recomendaria que antes de programar todo eso, primero montate un simple intermitente de 1segundo, te permitira verificar que las cosas andan, un simple goto y un retardo, como mas simple mejor.

Totalmente de acuerdo, no te molestes con el osciloscopio(*), es mucho más sencillo como dice tiopepe123 (hace cuánto que no se lo veía por acá... ¿como le va?).
Para verlo más lento ese retardo que tenés de 500us hacelo más largo para que lo puedas ver a simple vista (yo empezaría con 1segundo).

Saludos

(*) como oí decir por ahí "es matar un mosquito con un cañón".
 
Atrás
Arriba