En este post veremos como hacer un contador de 0 a 99 utilizando un PIC, programado en lenguaje basic utilizando el programa microcode.
Materiales:
- 1 pic 16f628A
- 2 Displays ánodo comúnç
- 2 Transistores NPN
- 2 Resistencias de 1k
Diagrama de conexiones:
Explicación del código:
1.- Declaramos los pines del puerto a como digitales.
2.- Declaramos los pines del puerto B del PIC como salidas.
3.- Declaramos todo el puerto A como salidas.
4.- La variable numero toma el valor de todo el puerto B.
5.- Creamos una variable llamada pausa.
-Esta variable la vamos a utilizar para la pausa en la parte de multiplexacion, si la velocidad de multiplexacion es muy alta aumentamos el numero, si es muy lenta lo disminuimos.
cmcon = 7
trisb = %0000000
trisa = 0 numero VAR portb
pausa VAR BYTE
pausa = 40
;Creamos dos variables en donde se almacenaran los números correspondientes a la unidad y a la decena num es para la unidad, num2 es para la decena.
num VAR BYTE
num2 VAR BYTE
porta = 0 ;Apagamos todo el puerto a
x VAR BYTE ;Esta variable la utilizaremos en un ciclo for el cual nos permitirá modificar la velocidad del conteo
tiempo VAR BYTE ;Esta variable también la utilizamos para delimitar el ciclo FOR.
tiempo = 2 ;Para aumentar o disminuir la velocidad del conteo modificamos este valor.
Creamos 10 constantes, cada una contiene un numero en código binario, el código lo usaremos para activar los leds del display de 7 segmentos. Dependiendo en el numero que se encuentre se activar unos leds u otros para mostrar el numero en el display. Por ejemplo.
n0 CON %1000000
Si igualamos el valor de esta constante con el valor de la variable numero: numero = n0, entonces no mostrara el numero 0 en el display.
%1000000 = %gfedcba
Como estamos utilizando un display de ánodo común, activamos los leds del display con un '0' lógico. Si utilizan un display de cátodo común deberán cambiar los 0 por 1 y viceversa.
n0 CON %1000000
n1 CON %1111001
n2 CON %0100100
n3 CON %0110000
n4 CON %0011001
n5 CON %0010010
n6 CON %0000010
n7 CON %1111000
n8 CON %0000000
n9 CON %0010000
Después de haber declarado las constantes, creamos un array con 10 posiciones.
secuencia VAR BYTE[10]
Igualamos las posiciones de memoria con las constantes.
SECUENCIA[0] = n0
SECUENCIA[1] = n1
SECUENCIA[2] = n2
SECUENCIA[3] = n3
SECUENCIA[4] = n4
SECUENCIA[5] = n5
SECUENCIA[6] = n6
SECUENCIA[7] = n7
SECUENCIA[8] = n8
SECUENCIA[9] = n9
Abrimos un bucle infinito,en este bucle ocurrida los siguiente:
1.- Sumaremos la variable num esta variable se sumara hasta llegar a 9. Una vez llegado a 9:
- Enceramos la variable para que comience otra vez desde 0.
- Empezamos a sumar la variable de las decenas
2.- Una vez alcanzado el valor de 9 en el la variable num2 (numero de las decenas), enceramos esta variable.
3.- Creamos un ciclo For, dentro de este ciclo for tenemos la multiplexacion de los displays:
- Para realizar la multiplexacion debemos activar un transistor y desactivar el otro, esto nos ayudara a visualizar los dos números a la vez, realizamos multiplexacion porque estamos utilizando los mismos pines de conexión para los dos displays.
- Primero activamos el display de las decenas, desactivamos el display de las unidades y mostramos el valor de la variable con la condición, numero = secuencia[num]. Establecemos una pausa,
- Luego Activamos el display de las unidades, desactivamos el display de las decenas y mostramos el valor de la variable con la condición, numero = secuencia[num2].Establecemos una pausa,
ciclo:
1.- num = num + 1
IF num == 10 THEN
num = 0
num2 = num2 + 1
ENDIF
2.- IF num2 == 10 THEN num2 = 0
3.- FOR x = 1 TO tiempo
HIGH porta.0
LOW porta.1
numero = secuencia[num]
PAUSE pausa
LOW porta.0
HIGH porta.1
numero = secuencia[num2]
PAUSE pausa
;Cerramos el ciclo for
NEXT
;Retornamos a ciclo:(cerramos el bucle).
GOTO ciclo
Publicar un comentario
¡Hola! Nos alegra mucho que hayas llegado hasta aquí y que estés leyendo este artículo en Edeptec.
Este formulario es un espacio abierto para ti: puedes dejar un comentario con tus dudas, sugerencias, experiencias o simplemente tu opinión sobre el tema tratado.
» ¿Te resultó útil la información?
» ¿Tienes alguna experiencia personal que quieras compartir?
» ¿Se te ocurre algún tema que te gustaría ver en próximos artículos?
Recuerda que este espacio es para aprender y compartir, por eso te animamos a participar de manera respetuosa y constructiva. Tus comentarios pueden ayudar a otros lectores que están en el mismo camino, ya sea en electrónica, programación, deportes o tecnología.
¡Gracias por ser parte de esta comunidad de aprendizaje! Tu participación es lo que hace crecer este proyecto.