Pic Basic Display
Pic Basic Display
Pic Basic Display
1) Se debe calcular los valores correspondiente a cada dgito de 0 a 9 que queremos presentar .La necesidad de
calcularlos radica en que al conectar el display directo al pic ya no tenemos decodificador por tanto hay que sacar los
valores que activaran los segmentos que formen el carcter numrico que deseamos .
Para esto primero vamos a suponer una conexin , supongamos que conectamos el dysplay al puerto B
del PIC16F628a ( es igual para otro PIC) como se muestra en la figura .
Como se muestra se conectaron al mismo puntos los terminales de los segmentos y el punto comn que es positivo para
este caso se conecto individual a cada uno por medio de transistores , que seran de ayuda para multiplexar o alternar los
display para poder tener el efecto de presentar valores diferentes en cada uno y poder visualizar cantidades de 0 a 999
para el caso de 3 display.
Como este display es nodo comn encender cuando los segmentos estn en 0 logico (0v) y apagara Cuando estn en 1
logico (5v) .
Al realizar esta conexin se debe definir en la programacion que los pines del puerto donde esta conectado el display son
de salida , cuando hacemos esto ( en la parte de la programacin se explican los detalles) tendremos que el terminal B0 =1
bit menos significativo y el terminal B7=64 bit mas significativo
esto implica que los valores decimales asociados a cada terminal son :
Estos valores son tiles conocer debido a que es mas fcil pensar en valores decimales que en valores binarios y los
podemos usar para encender cada uno de los terminales lo que implica que podemos controlar cada segmento del
dysplay.
Calculo
primero vamos a suponer que nuestro display es ctodo comn ( negativo comn ) inverso al que mostramos hace un rato
que veremos en el segundo ejemplo , primero hay que recordar donde estn posicionados los segmentos
correspondientes a cada letra veamos la figura .
En la imagen vemos como se distribuyen cada segmento en el display , ahora imagine que desea formar un numero 2
cuales segmentos deben estar encendidos para lograr esto ?
Vemos que son los segmentos a,b,d,e,y g , esto corresponde a los valores decimales 1,2,8,16,64, entonces para indicarle
al pic que encienda estos segmentos lo hacemos para el caso del display catodo comn sumando los valores
correspondiente a cada segmento esto es 1+2+8+16+64=91 este es el valor que demos indicarle al pic sacar para formar
el carcter numrico correspondiente al numero 2
Si deseamos que se forme un cero se deben encender todos los segmentos menos el g esto es 1+2+4+8+16+32=63 y
para formar un 8 se encienden todos que corresponde a 1+2+4+8+16+32+64=127
figura 1 y figura 2 respectivamente.
De este modo los valores para formar los caracteres de 0 a 9 son:
0=>63 3=>79 6=>125 9=>111
Con estos valores podemos presentar los caracteres numricos de 0 a 9 para un display ctodo comn .
Ahora consideremos un display nodo comn .
La diferencia consiste en que uno enciende cuando se le pone el segmento a 1 lgico (ctodo comn el anterior) y el otro
cuando se le pone a cero lgico (nodo comn ) , los clculos entonces hay que realizarlos de forma invertida para
obtener los mismo caracteres , esto es al valor calculado
anteriormente lo restamos de 127 que es al valor total mximo que pueden sumar , esto nos dar el valor decimal que
corresponde a tener esos terminales en 0 lgico y no en 1 lgico como el caso anterior , de modo que los valores son
entonces .
ya con esto valorese mano estamos casi listo para poder manejar los caracteres numricos .
2) ver lo concerniente a la programacin , esta se realizara bajo el editor microcode studio el copilador es pic basic
pro , para grabar el pic se uso ic prog.
DEFINE OSC 4 esto para definir un oscilador a 4 MHZ puede ser externo.
para inicial primero ver algunos detalles de los comandos a usar orientados al PIC16f628A.
CMCON=7 esto lo escribimos para hacer digital el funcionamiento del puerto A de dicho pic
TRISB=%10000000 lo usamos para indicar que los pines desde B0 hasta B6 son de salida. que es donde tenermos
conectado el display como se mostro en la figura , con esto saldra el valor binario por dichos terminales que se
corresponder luego con los caracteres que queremos mostrar .
el proceso para presentar los valores requiere que lo tengamos almacenados en una variable para que luego sea
mostrados . esto es .
DATO VAR BYTE [10] , en este caso creamos una variable llamada datos con tamao de 1 BYTE que puede almacenar
255 valores , y hemos indicado que sus valores seran 10 en total , ahora tenemos que definir cuales 10 valores tomara y
es el momento de usar los valores calculados anteriormente .
note que en lo adelante el ejemplo seguir para un display nodo comn por tanto usaremos los valores para dicho display.
p=0 la iniciamos con valor de cero esto es importante , para poder tomar el valor almacenado en la posicion 0 de la
variable DATO despues .
luego escribimos la rutina ,
doto
inicio: nombre que se le asigno a la rutina , puede ser cualquier otro . siempre seguido de dos puntos
PORTB=dato[P] esto es que saque el valor almacenado en la posicin p de datos por el puerto B
pause 1000 esperar un segundo (1000ms)
P=P+1 esto es que p en lo adelante tendra el valor de p anterior +1
en este punto requerimos una comando que evite que p tome valores mayores de 9 pues solo tenemos almacenado
valores en las posiciones de 0 a 9 de la variable datos.
para ellos usamos el comando IF ... THEN . permite dar un salto en la rutina si la axion es verdadera y continua la rutina
si es falsa .
si p=10 salta a la rutina reset m que la creamos a continuacin pero indicamos en este punto
antes de eso GOTO inicio regrsa a inicio , esto para que la rutina inicio se mantenga en ejecucin infinita .
RESET:
p=o
goto inicio
Creamos la subrutina reset y decimos que p=0 nuevamente y lo mandamos al inicio con esto , presentaremos valores de
0 a 9 de forma infinita .
El programa es el siguiente.
Link para descargar elarchivo hex para grabar el pic o usarlo en el simulador
luego usaremos una instruccin llamada for .... next , permite repetir una accin una cantidad finita de veces
for Y=1 to 15
next
Repetir 15 veces lo que este dentro de la instruccin , es decir , entre for y nex .
Otra cosa importante es como va,os a lograr mostrar caracteres diferentes si los las pantallas estn conectadas al
mimo terminal todas ,
Esto sera gracias a realizar un multiplexado , que consiste en presentar los valores intermitente mente en tiempos
cortos , pero que lo veremos nosotros como si estuvieran fijos y de esa forma se mostraran las 3 pantallas encendida
permanentemente y con valores diferentes para nosotros ,aunque en realidad no es a si , ( una muestra de que no todo
es lo que creemos ver jajaj) .
Para esto usamos intervalos de 5 ms entre una pantalla y otra , vamos a renombrar los terminales A0 A1 y A4 del pic
que es donde estan los transistores que nos ayudaran a apagar y encender esos display sera nuestros SW pero
controlados por el pic .
a var porta.0 ; en lo adelante el puerto a.0 se llamara a ( lo mismo para los otros dos se llamaran b yc )
b var porta.1
c var porta.4
Otra cosa que necesitamos es usar un comando llamado DGI este nos permite descomponer una cantidad como ejemplo
123 en sus digitos 1 , 2 y 3 con ello podremos presenta cada uno en el display correspondiente.
el programa es el siguiente :
define osc 4
cmcon=7
trisb=%10000000
p var byte
y var byte
a var porta.0
b var porta.1
c var porta.4
p=0
inicio:
uni=p dig 0
de=p dig 1
cen=p dig 2
for y=1 to 33
high b
high c
low a
portb=dato[uni]
pause 5
high a
high c
low b
portb=dato[de]
pause 5
high a
high b
low c
portb=dato[cen]
pause 5
high c
next
p=p+1
if p=1000 then reset
goto inicio
reset:
p=0
;gotoi nicio
end
La velocidad con que cambia o cuenta los valores se puede ajustar al modificar el numero de repeticiones en la
instruccin for Y=1 to 33 , si en lugar de 33 usa otro valor si es mas alto tardara mas en cambiar si es bajo cambiara
mas rpido , en el vdeo use un valor de repeticiones de 10 ,
como tenemos 15 ms de pausas acumulados dentro de la instruccin , el tiempo aproximado de cambio o contero
sera T=15 ms x numero de repeticiones , para el caso del video es T=15x10 =150 ms entre un valor y otro , para el
ejemplo propuesto es de T=15x33=495ms casi medio segundo , con 66 puede contar casi 67 puede contar casi un
segundo 1.05 segundos . etc.