Contador de 0-9 con PIC16F84A
Introducción
Cuando deseamos hacer un contador simple de 0-9 podemos usar flip-flops o circuitos integrados especiales para contadores, pero de cualquier manera tenemos que usar cierto número de elementos los cuales pueden ir creciendo dependiendo de lo que vamos a usar. Pero cuando usamos PICs todo se resuelve de manera más sencillo en el caso del Hardware los elementos son minimos y por lo tanto el gasto es menor comparado si lo hicieramos con flip-flops y lo bueno es que el PIC lo podemos reprogramar a nuestro antojo.
Descripción
En este pequeño proyecto utilizaremos un Display de 7 Segmentos para desplegar los números de 1 a 9 de manera que haremos un contador. Algo que tenemos que tener en cuenta es que dependiendo si usamos un display anódo común o cátodo común el programa del PIC puede cambiar. En este caso lo veremos con un display de cátodo común, lo que nos dice que para que algún segmento encienda el pin tiene que recibir un 1 lógico. Por lo tanto para saber que es lo que deseamos ver en el display necesitamos que el puerto B del PIC (RB0-RB7) tengan 1 lógicos ó 0 lógicos tal y como se ve en la siguiente tabla.
Descripción
En este pequeño proyecto utilizaremos un Display de 7 Segmentos para desplegar los números de 1 a 9 de manera que haremos un contador. Algo que tenemos que tener en cuenta es que dependiendo si usamos un display anódo común o cátodo común el programa del PIC puede cambiar. En este caso lo veremos con un display de cátodo común, lo que nos dice que para que algún segmento encienda el pin tiene que recibir un 1 lógico. Por lo tanto para saber que es lo que deseamos ver en el display necesitamos que el puerto B del PIC (RB0-RB7) tengan 1 lógicos ó 0 lógicos tal y como se ve en la siguiente tabla.

Funcionamiento
CODIGO DEL PROGRAMA
'DEFINIENDO VARIABLES 1 byte = 8 bits = 8 salidas > RB0-RB7
contador VAR byte
muestra var byte
'INICIANDO
TRISB = 0 'el PORTB como salida
inicio:
contador = 0 'inicializamos el contador a 0
programa:
gosub NUMERO 'se ve el numero elegido en PORTB
PORTB = muestra 'PORTB toma el valor de muestra
contador = contador + 1 'se incrementa contador con 1
pause 1000 'espera 1 segundo
if contador = 10 then inicio 'compara, si llega al #9 reinicia a #0
goto programa
NUMERO:
lookup contador, [63,6,91,79,102,109,125,7,127,111], muestra 'asigna valor
return
END 'fin del programa
Ahora explicaré el codigo del programa;
inicio:
contador = 0 'inicializamos el contador a 0
primero, contador será igual a 0 luego por la instrucción.
programa:
gosub NUMERO 'se ve el numero elegido en PORTB
.
.
.
.
NUMERO:
lookup contador, [63,6,91,79,102,109,125,7,127,111], muestra 'asigna valor
return
END 'fin del programa
con gosub numero nos direcciona a una subrutina (llamada NUMERO)que contiene el comando lookup; el cual puede ser usado para obtener valores de una tabla de constantes de 8 bits, en este caso usaremos contador y si contador es igual a cero, muestra toma el valor de la primera constante ( que seria 63 y así sucesivamente hasta que tome todas las constantes disponibles) luego regresá y toma la siguiente linea,
PORTB = muestra 'PORTB toma el valor de muestra
contador = contador + 1 'se incrementa contador con 1
pause 1000 'espera 1 segundo
if contador = 10 then inicio 'compara, si llega al #9 reinicia a #0
goto programa
luego el valor que tomó muestra es colocado en PORTB y será el valor que se visualizará en el DISPLAY, luego contador tendrá el valor que tenia anteriormente más uno, habra una pausa de 1 segundo para que podamos ver el resultado en el display y si contador es igual a 10 reinicia el programa de lo contrario repetira la secuencia.
En la siguiente tabla se muestra las constantes que se usarón en el comando LOOKUP, usamos decimales, aunque tambien se pueden colocar hexadecimales.

DIAGRAMA
















EgRoJack
14 de noviembre de 2009 20:59
hola, interesante, soy estudiante pero me gustaria saber como meter el programa al pic, bueno ya eh usado el mplab y el icprog, necesito algo mas?, como lo hago please...
mi correo es egrojack_ramyro@live.com.mx
Anónimo
18 de noviembre de 2009 09:09
Estoy tratando de aprender a grabar en los PIC etc. y queria hacer tu proyecto, pero tengo un problema, no lo logre hacer andar.
http://blog.electronicasimple.com/imagup/contadorconpic2.png
Queria consultarte ya que en el dibujo que mostras, solo conectas la pata 4 a res. y luego +, y de la 6 a la 12 con res. c/u 330 y luego a cada pata del display, y la pata 13 ? Esta con una resistencia? De 330 tambien? y va para el display? Ademas segun vi el datasheet del 16F84A la pata 14 va al + y la 5 al - cosa que no veo tampoco en el boseto que hiciste.
Desde ya disculpa mi ignorancia, yo me dedico a programacion, programo en PHP, trabajo con MySQL, Visual, C por lo que estoy muy poco familiarizado a la electronica por el momento, pero estoy tratando de aprender ya que me interesa mucho.
Saludos, Muchas gracias.
Mail: Costanzo_Pablo@hotmail.com
Anónimo
18 de noviembre de 2009 19:54
Ya esta ya pude, la 5 va a - y la 14 al +
15 y 16 cada pata se conecta a un cristal de 4 Mhz y a su ves a la pata + de 2 capacitores de 22 pf cada uno va al negativo quedaria algo asi:
15_____+(capacitor 22 pf) + (CRISTAL (pata1))
|
(-)
16_____+(capacitor 22 pf) + (CRISTAL (pata1))
|
(-)
Lo que me falta encontrar ahora es para hacerle bajar la velocidad ya que me gustaria que fuera un poco mas lento...
Anónimo
26 de noviembre de 2009 08:21
HOLA, DISCULPA ESTOY TRATANDO DE HACER ESTE MISMO CIRCUITO PERO LAVERDAD NO HE PODIDO, CONECTE TODO TALCUAL APARECE PERO NO ENCIENDE EL DISPLAY, QUISIERA SABER COMO SE A CUAL PIN VAN CONECTADOS LAS RESPECTIVAS RESISTENCIAS.
GRACIAS
Anónimo
26 de noviembre de 2009 09:51
DISCULPA YA IDENTIFIQUE LOS PINES, PERO IGUAL NO ENCIENDE QUIEN SABE QUE TENDRE MAL, OK GRACIAS
Anónimo
9 de febrero de 2010 09:04
LO QUE TE FALTA ES CARGAR LA INFORMACION AL PIC observa esta pagina en la seccion videos www.rdcm.webcindario.com , pudes escribirme al correo para cualquier consulta o dudas q tengas