Contador con pic 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 e caso del Hardware los elementos son l 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.

Funcionamiento CODIGO DEL PROGRAMA

'DEFINIENDO VARIABLES 1 byte = 8 bits = 8 salidas > RB0 -RB7 contador VAR byte muestra var byte 'INICIANDO TRISB = 0 inicio: contador = 0 programa: gosub NUMERO PORTB PORTB = muestra muestra contador = contador + 1 pause 1000

'el PORTB como salida

'inicializamos el contador a 0 'se ve el numero elegido en 'PORTB toma el valor de 'se incrementa contador con 1 'espera 1 segundo

127.91.125. ll NUMERO) t l . t i l l gosub numero i k . 'inicializamos el contador a 0 l i t i .79.6.102.111]. t l l i t t i i l ti 'PORTB toma el valor de 'se incrementa contador con 1 'espera 1 segundo 'compara.79. 'se ve el numero elegido ti t l i contador i l í i t t t li . si llega al #9 NUMERO: lookup contador. NUMERO: lookup contador. l l contador t t i 63 t l i i i .6. muestra 'asigna valor return END 'fin del programa A inicio: contador = 0 programa: gosub NUMERO en PORTB . muestra 'asigna valor return END 'fin del programa l l PORTB = muestra muestra contador = contador + 1 pause 1000 if contador = 10 then inicio reinicia goto programa RVY V YV Tg S R RXb Q iSVhgVh bgVT fSV e YbdS c SV YR SYbU SR SRcb VXb VTa R SR` V YVXR W SVUTS SR Q @ B76 79P I 7 H@ 6HCA @ B7D BG @ 7F BC @ E 7 @DC CB7A @ @98 67 65 (04")%($ 0(%# " (" 2" ( 1 "' (" 2% (20# "' % 1% %2$ "' (")0 % 3 )"2" 10 %)%& 0'%($ )"( "'"$& %$# " !  ¡§£©¡¦ ¤ ¤¤ ¡¦ ¤ £§£©£  £ ¢ £ £ £¡ ¦¦¤¢ § ¡ ¡¦  ¦¦¢  £ ¢¡¥ ¡¨¤  £ £¨ ¢¤ ¢¡§£ ¡¦ ¡¢¤© ¢¥ £©£¢¨¡¢¥ ¤§ ¡¨ §¡¦ ¤ ¢£¦ ¥ ¤ £¢¡   x li é l i l i .91. [63.7. .125.109.7. . . muestra t t t l t t l l 8 it .109.102. [63.127.111]. si llega al #9 a #0 .if contador = 10 then inicio reinicia a #0 goto programa 'compara.

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. luego contador tendrá el valor que tenia anteriormente más uno. En la siguiente tabla se muestra las constantes que se usarón en el comando LOOKUP. DIAGRAMA explicado DIAGRAMA p . aunque tambien se pueden colocar he adecimales. usamos decimales.luego el valor que tomó muestra es colocado en PORTB y será el valor que se visualizará en el DISPLAY.

Te dire que hay varios modelos aqui te dejo las posibles soluciones con algunos de estos: y Teclado MAtricial 4x4 Dispositivo de entrada de datos que consta de 16 teclas o pulsadores. Dispone de un conector SIL (Single In Line) macho de 8 pines que se corresponden con las 4 filas y las cuatro columnas de las que dispone.Primero con Los teclado. . dispuestos e interconectados en filas y columnas.

teniendo en cuenta este hecho es muy fácil averiguar que tecla fue pulsada. Las resistencias de 2k2 son necesarias para poder compartir el puerto del pic independientemente del teclado y por ejemplo poder conectar un LCD o una barra de leds al mismo tiempo. y Rutina y KB_Port: La siguiente librería configura las salidas y Configura los puertos B del PIC para ser entradas para usar el teclado escanea las teclas usados con el teclado. la puerta B es configurada como salidas. si pulsásemos alguna tecla es ese momento con lo que al poner estas resistencias evitamos este hecho y así si se produjera el cortocircuito tan solo circularía una pequeña corriente y el puerto del µC no correría ningún riesgo. Tam ién podemos ver el conexionado típico con el puerto B del µC PIC. Cuando se presiona un pulsador se conecta una fila con una columna. x u w sq rq y Func nam nto v tq . Entonces se podrían cortocircuitar accidentalmente las salidas de los puertos provocando su destrucción. también se activan las resistencias de polarización internas en los puertos de salida. y si es pulsada alguna retorna el valor de tecla en modo hexadecimal para ser mostrado y KB_Scan: directamente en un display LCD. los puertos del µC conectados a las filas se programan como salidas y los conectados a las columnas del teclado se programan como entradas. y Tecla Variable en donde se devuelve la tecla pulsada Descripción: Para controlar el teclado. Las variables y subrutinas utilizadas son: Escanea todas las teclas y devuelve la tecla pulsada en formato Hexadecimal. Durante la fase de lectura del teclado la mitad de la puerta B es configurada como entrada y la otra mitad como lectura y durante la escritura en el lcd o otro sistema.En la s uiente figura vemos el es uema de conexionado interno del teclado matricial y sus corres ondientes pines de salida numerados de izquierda a derec a mirando el teclado tal y como se ve en la foto anterior.

RP0 .Nada para .f incrementa tecla.Sale si se ha pulsado tecla. Código: KB_Scan CLRF INCF primer código.Sale si se ha pulsado tecla. Cada vez que una fila se pone a nivel bajo se hacen 4 comprobaciones para ver si una de las cuatro columnas se a puesto a nivel bajo y así saber la tecla pulsada.Sale si se ha pulsado tecla.4 GOTO antirebotes INCF Tecla.teclado.Inicializa la puerta B para las entradas del .y PB0-3 como salidas BSF OPCION.Tercera columna = 0 . . . entradas Ahora para saber que tecla esta siendo pulsada necesitamos escanear el teclado.Selecciona Pagina 1 (Banco) MOVLW 0F0h .Segunda columna = 0 . .Borra Tecla y . Cheq_Col BTFSS PORTB. BTFSC Tecla. Programa RB0 -3 como salidas y RB4 -7 .RBPU .Habilita R de polarización en BCF RETURN STATUS.PB4-7 como entradas MOVWF TRISB .Si no tecla pulsada.RP0 . .Saca 0 a la primera fila . SUBWF actual de Tecla. BTFSS PORTB.Cuarta columna = 0 . .Carga W con el n£mero de .f incrementa tecla. Ultima_Tecla escaneado todo el teclado MOVLW Teclas + 1.f incrementa tecla. Código: KB_Port .7 GOTO antirebotes INCF Tecla. .habilitadas---------------------------------BSF STATUS. y esto se consigue mediante la siguiente rutina que consiste en ir poniendo una a una las líneas RB0 a RB3 (conectadas a las filas del teclado) a nivel bajo ya que estas salidas tienen conectada la resistencia de polarización a Vcc y por lo tanto están siempre a nivel lógico alto. .Retorna. .w STATUS.Si no tecla pulsada.y lo compara con el valor . BTFSS PORTB.Si no tecla pulsada.Escanea el teclado . MOVLW 0Eh MOVWF PORTB NOP estabilización de señal. .Si Tecla + 1 = valor actual.5 GOTO antirebotes INCF Tecla.Z d'17' Tecla Tecla.entradas con las resistencias de polarización .6 GOTO antirebotes INCF Tecla.comprueba si se a .Primera columna = 0 .Vuelve a la pagina 0 (Banco) .f .de la Puerta B .f incrementa Tecla.Si no tecla pulsada.prepara Tecla para .Sale si se ha pulsado tecla. BTFSS PORTB.Esto se hace mediante la llamada a la etiqueta "KB_Port" que inicializa los puertos para ser usados con el teclado matricial.

--------------------------------------------------------------------------------------------------------T_Conv ADDWF PCL.vuelve a .Tecla nº8 = 0 .vuelve a la tecla esperar. BSF RLF la rotaci¢n a izqda.Tecla nº3 = 7 . Espera1 Espera2 Espera3 Espera4 BTFSS PORTB.7 GOTO Espera4 .Tecla nº14 = E .llama a la tabla de conversion MOVWF Tecla . .Tecla nº13 = F .Tecla nº1 = 1 .Tecla nº4 = A .vuelve al programa principal que hizo la llamada.Tecla nº16 = C .Tecla nº10 = 6 .con el valor en hexadecimal y lo pone en la variable.ahora se espera a que la tecla sea soltada para evitar .vuelve a .as¡ la Fila 1 pasa a 1 con .Si no se suelta .vuelve a .Si no se suelta .pone en w el numero contenido .6 GOTO Espera3 BTFSS PORTB.Tecla nº5 = 2 . GOTO NTeclas RETURN antirebotes rebotes NTeclas STATUS.o es un inconveniente.Si no se suelta . RETURN .y regresa. .Pone a 1 Bit C.4 GOTO Espera1 BTFSS PORTB.w T_Conv .C PORTB.1 RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW '0' '1' '4' '7' 'A' '2' '5' '8' '0' '3' '6' '9' 'B' 'F' 'E' 'D' 'C' . .Tecla nº11 = 9 .y reactivaciones de tecla .5 GOTO Espera2 BTFSS PORTB.Tecla nº12 = B .Coloca variable Tecla a 0 . la tecla esperar. FILA 1 FILA 2 FILA 3 FILA 4 MOVF en la variable CALL y retorna Tecla.Tecla nº6 = 5 .Tecla nº15 = D .Tecla nº7 = 8 .f Cheq_Col CLRF Tecla . la tecla esperar.GOTO tecla.Tecla nº0 = 0 .No ha sido pulsada ninguna .Si no se suelta .esta parte puede ser eliminada si para nuestro proyecto no es necesaria .Tecla nº2 = 4 . la tecla esperar.Tecla nº9 = 3 .

-Movimiento del cursor y cambio de su aspecto.La parte de código de Espera se puede ser eliminada sin ningún problema si no queremos que el pic tenga que esperar a que soltemos la tecla para continuar con su ejecución normal. -Permite que el usuario pueda programar 8 caracteres. Esto es debido a que el circuito no tiene resistencias de limitación para protegerlos en estos casos. -Desplazamiento de los caracteres hacia la izquierda o la derecha. este modelo es el mas comúnmente usado y esta información se basará en el manejo de este u otro LCD compatible. es este caso dispone de 2 filas de 16 caracteres cada una y cada carácter dispone de una matriz de 5x7 puntos (pixels). Caracteristicas principales: -Pantalla de caracteres ASCII. así que si queremos usar las puertas para controlar el teclado y también para alguna otra cosa podemos poner unas resistencias de 2k2 en serie con las puertas RB0 a RB4. lcd 2X16 Descripción: La pantalla de cristal liquido o LCD (Liquid Crystal Display) es un dispositivo µControlado de visualización grafico para la presentación de caracteres. símbolos o incluso dibujos (en algunos modelos). pero es totalmente viable el uso de ellas. Este dispositivo esta gobernado internamente por un microcontrolador Hitachi 44780 y regula todos los parámetros de presentación. Los diodos utilizados son del típico modelo 1N4148. podemos modificar un teclado matricial tal y como se expone en la siguiente figura: Solo usaremos las salidas correspondientes a las filas del teclado y de RB0 a RB4 serán configurables como salida o entrada mientras que RB4 solo será entrada. hay que tener especial cuidado en no programar mas de una puerta como salida ya que podría destruirse algún diodo debido a una circulación excesiva de corriente en los mismos. -Memoria de 40 caracteres por línea de pantalla. Para saber la tecla que se esta pulsando tendremos que configurar una línea como salida y ponerla a nivel alto y las demás como entrada y comprobar el valor de las entradas para saber que columna se a pulsado. aunque los hay de otro número de filas y caracteres. además de los caracteres Kanji y Griegos. -Conexión a un procesador usando un interfaz de 4 u 8 bits . Ideas y mejoras: Para disminuir el número de conexión a usar para detectar la tecla que se esta pulsando. -Proporciona la dirección de la posición absoluta o relativa del caracter.

En la siguiente figura vemos las dos maneras posibles de conexionar el LCD con un pic16F84 Conexionado con bus de 4 bits tengo mas informacion si deseas dejame tu email http://foro.elhacker.Funcionamiento: Para comunicarse con la pantalla LCD podemos hacerlo por medio de sus patitas de entrada de dos maneras posibles. con bus de 4 bits o con bus de 8 bits. este ultimo es el que explicare y la rutina también será para este.net/electronica/contador_con_pic16f84-t68594.0.html#ixzz1NhgCO2Cf .

En ambos casos la señal puede ser TT siempre que al circuito se lo conecte a 5V de tensi n. Anti rebote configurable: Por medio del interruptor marcado como A se puede seleccionar entre un anti rebote por tiempo esto quiere decir que entre pulsaci n y pulsaci n el µC esperará un tiempo previamente definido) un un anti rebote por retorno a reposo de la línea de disparo cuando se produzca la vuelta a su estado de reposo del pulsador o entrada). El contador funciona alrededor de un µC de Microchi .. el PIC16F84 cuyo rograma se encarga de llevar la cuenta de los impulsos recibidos así como controlar los displays y demás aspectos que se verán a continuaci n. El tiempo de retardo se puede configurar por medio de los interruptores J1 y J2 los cuales en combinaci n permiten hasta cuatro tiempos diferentes.Cont or 4 í itos onfi rabl Dada la rsatilidad de este ircuito se lo uede colocar irtual ente en cual uier desarrollo o equi o. el anti rebote por retorno a reposo de la línea de disparo es mas apropiado cuando se lo conecta a . El caso del anti rebote por tiempo suele ser el mas empleado cuando un contador es disparado por un pulsador dado que éste presenta repiques mecánicos indeseados. Doble entrada de disparo: Una con un pulsador hacia el positivo para flancos de subida) y otra con un pulsador hacia la masa para flancos de bajada). Gracias a que el sistema de anti rebote puede ser configurado la entrada de disparo puede provenir tanto de un pulsador como de una barrera infra roja de cruce peatonal como así también un censor de efecto all o cualquier otro reproductor mecánico.. En tanto.

mientras que estando ambos cerrados sus líneas a masa) el tiempo es el mas largo posible. Para mayor brillo se puede probar con resistencias de 100 ohms o incluso 56 ohms. Seguidamente se inicializan los acumuladores dig1 o unidades. En tanto las de 150 ohms se encargan de limitar la corriente en los displays. Como todo programa de estos dispositivos comienza definiendo equivalencias para nombrar posiciones de la memoria así como valores literales. En este caso los interruptores J1 y J2 no cumplen ninguna funci n. Esta rutina. Este disparo puede producirse tanto por un flanco ascendente en el pin 2 como por un flanco descendente en el pin 3. dig3 o centenas y dig4 o millares) y se ponen en bajo todas las líneas del puerto B consiguiendo con esto que ningún display quede iluminado. K ohms se encargan de limitar tanto la corriente en las bases de los transistores co mo así también la carga sobre los pines del puerto B del microcontrolador. dig3 y dig4) en las que va acumulando la cantidad de veces que se disparo el sistema. si se configura para esperar la vuelta a reposo de la línea de disparo por mas que el pulsador permanezca presionado la cuenta no avanzará sino hasta que se lo suelte. además. as resistencias de 10K ohms se encargan de fijar estados l gicos definidos. Cada display permanece encendido aproximadamente 3 milisegundos. Debido a la limitada cantidad de líneas de E/S de este chip se decidi implementar un integrado decodificador de BCD a display de segmentos a fin de formar los números sobre los mismos. luego configura los puertos de E/S el A como entradas. Por medio de cuatro transistores actuando como llaves corte/ saturaci n) se logra manejar cuatro dígitos independientes con tan solo ocho líneas o cables. dig2. dig2 o decenas.barreras I en líneas industriales. a alimentaci n recomendada es de 5V y el consumo no llega a los 100mA. Estando ambos abiert os sus líneas en estado alto) el tiempo es breve. as de 4. Al hacerse el encendido alternado de los dígitos a gran velocidad para la vista pareciese que están los cuatro encendidos al mismo tiempo. El firmware: Este. deriva al programa a otra sub -rutina la cual se encargará de llevar a cabo el anti rebote que se haya configurado. Si no hay actividad en ninguna de las dos líneas de entrada el ciclo solo se encarga d e hacer que en los displays se vean los acumuladores. Este integrado necesita solo cuatro líneas de entrada para mostrar el número en los segmentos de un display. En tanto. uego el programa queda en un ciclo infi nito el cual comprueba si hay actividad en las líneas de entrada pines 2 y 3) y muestra el contenido actual de la cuenta haciendo una llamada a la sub -rutina display). El pulsador marcado como es el que reinicia el micro. como todo desarrollo micro controlado necesita de un firmware o programa de dispositivo) para funcion ar. En caso de ser un anti . El mismo puede ser descargado en versiones ASM para ver y modificar si de desea) o EX listo para cargar en el PICmicro). el B como salidas). Un pulso bajo en el pin 3 o uno alto en el pin 2 hará que el programa salte a la sub -rutina "increm" la cual aumenta en uno el acumulador de unidades y maneja el acarreo de ser necesario). Descripción del circuito: El µC en su interior tiene cuatro variables dig1. Si se selecciona por tiempo y el pulsador permanece presionado el conteo irá avanzando de uno en fondo y el tiempo de espera entre cada avance dependerá de como estén los interruptores J1 y J2. cuando en verda d solo uno lo esta. volviendo la cuenta a cero. censores m ecánicos o levas entre varios ejemplos).

Sin esta llamada los mismos quedarían apagados. Pero el retorno se produce incondicionalmente.rebote por retorno a estado de reposo lo único que se hace es quedar a la espera que el pin 2 quede en estado l gico bajo y el pin 3 en alto. En tanto. sin verificar en que estado se encuentran las líneas por lo que si algún pulsador continua pulsado la cuenta se aumentará nuevamente. el número restante será la cantidad de veces que se ejecute la sub -rutina de display antes de retornar al programa principal. . Mientras se espera que esto suceda se llama a la rutina de display para que los dígitos sigan mostrando el estado actual del conteo. en caso de ser configurado para un anti rebote por tiempo el sistema primero determinará dicho tiempo cargando a W inicialmente con 25 y agregándole mas valor según el estado de los pines 17 y 18.

Sign up to vote on this title
UsefulNot useful