P. 1
Contador Con Pic

Contador Con Pic

|Views: 1.899|Likes:
Publicado pormaycol29492

More info:

Published by: maycol29492 on Jun 03, 2011
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as DOCX, PDF, TXT or read online from Scribd
See more
See less

08/18/2013

pdf

text

original

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

muestra 'asigna valor return END 'fin del programa A inicio: contador = 0 programa: gosub NUMERO en PORTB .127.125.102.7. t i l l gosub numero i k .6.111]. 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 .125. . .102.91. NUMERO: lookup contador. si llega al #9 a #0 .127.111]. l l contador t t i 63 t l i i i . si llega al #9 NUMERO: lookup contador. .79.79. 'inicializamos el contador a 0 l i t i .109.109.6.if contador = 10 then inicio reinicia a #0 goto programa 'compara. 'se ve el numero elegido ti t l i contador i l í i t t t li .91. muestra t t t l t t l l 8 it .7. t l l i t t i i l ti 'PORTB toma el valor de 'se incrementa contador con 1 'espera 1 segundo 'compara. [63. ll NUMERO) t l . [63.

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

Primero con Los teclado. 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. . 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. x u w sq rq y Func nam nto v tq . también se activan las resistencias de polarización internas en los puertos de salida.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. Tam ién podemos ver el conexionado típico con el puerto B del µC PIC. y si es pulsada alguna retorna el valor de tecla en modo hexadecimal para ser mostrado y KB_Scan: directamente en un display LCD. 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. y Tecla Variable en donde se devuelve la tecla pulsada Descripción: Para controlar 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. 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. Cuando se presiona un pulsador se conecta una fila con una columna. Las variables y subrutinas utilizadas son: Escanea todas las teclas y devuelve la tecla pulsada en formato Hexadecimal. Entonces se podrían cortocircuitar accidentalmente las salidas de los puertos provocando su destrucción. 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 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.Selecciona Pagina 1 (Banco) MOVLW 0F0h . BTFSC Tecla. .Tercera columna = 0 . Cheq_Col BTFSS PORTB.f incrementa tecla. BTFSS PORTB.Habilita R de polarización en BCF RETURN STATUS. .6 GOTO antirebotes INCF Tecla.Primera columna = 0 .y lo compara con el valor . BTFSS PORTB.Si Tecla + 1 = valor actual.Sale si se ha pulsado tecla.Inicializa la puerta B para las entradas del . SUBWF actual de Tecla. MOVLW 0Eh MOVWF PORTB NOP estabilización de señal.Carga W con el n£mero de .7 GOTO antirebotes INCF Tecla.f incrementa Tecla.5 GOTO antirebotes INCF Tecla.PB4-7 como entradas MOVWF TRISB . Ultima_Tecla escaneado todo el teclado MOVLW Teclas + 1.entradas con las resistencias de polarización .Vuelve a la pagina 0 (Banco) . entradas Ahora para saber que tecla esta siendo pulsada necesitamos escanear el teclado.RBPU . .f incrementa tecla. .Z d'17' Tecla Tecla.Nada para .y PB0-3 como salidas BSF OPCION.comprueba si se a . .habilitadas---------------------------------BSF STATUS. BTFSS PORTB.Si no tecla pulsada. .Si no tecla pulsada.Escanea el teclado .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.teclado. .de la Puerta B .prepara Tecla para .Cuarta columna = 0 .Esto se hace mediante la llamada a la etiqueta "KB_Port" que inicializa los puertos para ser usados con el teclado matricial.Si no tecla pulsada.Sale si se ha pulsado tecla. Código: KB_Port . .RP0 . .w STATUS.Sale si se ha pulsado tecla.Saca 0 a la primera fila .Si no tecla pulsada.Borra Tecla y . Código: KB_Scan CLRF INCF primer código.f incrementa tecla. Programa RB0 -3 como salidas y RB4 -7 .RP0 .f .Segunda columna = 0 .Retorna.4 GOTO antirebotes INCF Tecla.

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

es este caso dispone de 2 filas de 16 caracteres cada una y cada carácter dispone de una matriz de 5x7 puntos (pixels). además de los caracteres Kanji y Griegos. Los diodos utilizados son del típico modelo 1N4148. -Proporciona la dirección de la posición absoluta o relativa del caracter. Esto es debido a que el circuito no tiene resistencias de limitación para protegerlos en estos casos. -Memoria de 40 caracteres por línea de pantalla. 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. -Desplazamiento de los caracteres hacia la izquierda o la derecha. símbolos o incluso dibujos (en algunos modelos). Ideas y mejoras: Para disminuir el número de conexión a usar para detectar la tecla que se esta pulsando. -Conexión a un procesador usando un interfaz de 4 u 8 bits . 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. -Movimiento del cursor y cambio de su aspecto. 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. 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. -Permite que el usuario pueda programar 8 caracteres.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. pero es totalmente viable el uso de ellas. aunque los hay de otro número de filas y caracteres. 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. Caracteristicas principales: -Pantalla de caracteres ASCII. Este dispositivo esta gobernado internamente por un microcontrolador Hitachi 44780 y regula todos los parámetros de presentación. este modelo es el mas comúnmente usado y esta información se basará en el manejo de este u otro LCD compatible.

net/electronica/contador_con_pic16f84-t68594. 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.Funcionamiento: Para comunicarse con la pantalla LCD podemos hacerlo por medio de sus patitas de entrada de dos maneras posibles. este ultimo es el que explicare y la rutina también será para este.elhacker.0.html#ixzz1NhgCO2Cf . con bus de 4 bits o con bus de 8 bits.

. 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 ambos casos la señal puede ser TT siempre que al circuito se lo conecte a 5V de tensi n.. 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. En tanto. el anti rebote por retorno a reposo de la línea de disparo es mas apropiado cuando se lo conecta a . 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). 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. 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 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. El contador funciona alrededor de un µC de Microchi .

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).barreras I en líneas industriales. a alimentaci n recomendada es de 5V y el consumo no llega a los 100mA. Esta rutina. El mismo puede ser descargado en versiones ASM para ver y modificar si de desea) o EX listo para cargar en el PICmicro). En este caso los interruptores J1 y J2 no cumplen ninguna funci n. 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. Estando ambos abiert os sus líneas en estado alto) el tiempo es breve. dig3 y dig4) en las que va acumulando la cantidad de veces que se disparo el sistema. luego configura los puertos de E/S el A como entradas. dig2. El firmware: Este. 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. Seguidamente se inicializan los acumuladores dig1 o unidades. deriva al programa a otra sub -rutina la cual se encargará de llevar a cabo el anti rebote que se haya configurado. Para mayor brillo se puede probar con resistencias de 100 ohms o incluso 56 ohms. Este integrado necesita solo cuatro líneas de entrada para mostrar el número en los segmentos de un display. En tanto. 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. En tanto las de 150 ohms se encargan de limitar la corriente en los displays. 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. además. as resistencias de 10K ohms se encargan de fijar estados l gicos definidos. 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). dig2 o decenas. Cada display permanece encendido aproximadamente 3 milisegundos. Como todo programa de estos dispositivos comienza definiendo equivalencias para nombrar posiciones de la memoria así como valores literales. 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. El pulsador marcado como es el que reinicia el micro. mientras que estando ambos cerrados sus líneas a masa) el tiempo es el mas largo posible. Descripción del circuito: El µC en su interior tiene cuatro variables dig1. censores m ecánicos o levas entre varios ejemplos). 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. 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. cuando en verda d solo uno lo esta. Este disparo puede producirse tanto por un flanco ascendente en el pin 2 como por un flanco descendente en el pin 3. En caso de ser un anti . el B como salidas). volviendo la cuenta a cero. como todo desarrollo micro controlado necesita de un firmware o programa de dispositivo) para funcion ar. 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.

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. 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. Pero el retorno se produce incondicionalmente. En tanto. Sin esta llamada los mismos quedarían apagados.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 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.

You're Reading a Free Preview

Descarga
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->