elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Informática
| |-+  Electrónica
| | |-+  contador con pic16f84
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: contador con pic16f84  (Leído 38,503 veces)
julyos

Desconectado Desconectado

Mensajes: 59


Ver Perfil
contador con pic16f84
« en: 30 Abril 2005, 21:34 pm »

por favor quien me ayuda a conseguir el codigo del programa para un contador de 0 a 99 y otro para leer datos del teclado numerico y representarlos en un display y el diseño de circuito del teclado con pic lo mas rapido posible


En línea

ROOTX

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: contador con pic16f84
« Respuesta #1 en: 1 Mayo 2005, 11:42 am »

Primero con Los teclado, Te dire que hay varios modelos aqui te dejo las posibles soluciones con algunos de estos:


  • Teclado MAtricial 4x4
Dispositivo de entrada de datos que consta de 16 teclas o pulsadores, dispuestos e interconectados en filas y columnas. 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.


  • Funcionamiento
En la siguiente figura vemos el esquema de conexionado interno del teclado matricial y sus correspondientes pines de salida numerados de izquierda a derecha mirando el teclado tal y como se ve en la foto anterior. Cuando se presiona un pulsador se conecta una fila con una columna, teniendo en cuenta este hecho es muy fácil averiguar que tecla fue pulsada. También podemos ver el conexionado típico con el puerto B del µC PIC. 

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. 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, la puerta B es configurada como salidas. Entonces se podrían cortocircuitar accidentalmente las salidas de los puertos provocando su destrucción, 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.
  • Rutina
La siguiente librería configura las salidas y entradas para usar el teclado escanea las teclas y si es pulsada alguna retorna el valor de tecla en modo hexadecimal para ser mostrado directamente en un display LCD. Las variables y subrutinas utilizadas son:
  • KB_Port:
Configura los puertos B del PIC para ser usados con el teclado.
  • KB_Scan:
Escanea todas las teclas y devuelve la tecla pulsada en formato Hexadecimal.
  • Tecla
Variable en donde se devuelve la tecla pulsada
Descripción: Para controlar el teclado, los puertos del µC conectados a las filas se programan como salidas y los conectados a las columnas del teclado se programan como entradas, también se activan las resistencias de polarización internas en los puertos de salida. Esto se hace mediante la llamada a la etiqueta "KB_Port" que inicializa los puertos para ser usados con el teclado matricial.
Código:
KB_Port    ;Inicializa la puerta B para las entradas del
                             ;teclado. Programa RB0-3 como salidas y RB4-7
                             ;entradas con las resistencias de polarización
                             ;habilitadas----------------------------------
                 BSF          STATUS,RP0       ;Selecciona Pagina 1 (Banco)
                 MOVLW   0F0h                     ;PB4-7 como entradas
                 MOVWF   TRISB                   ;y PB0-3 como salidas
                 BSF          OPCION,RBPU     ;Habilita R de polarización en entradas
                 BCF          STATUS,RP0       ;Vuelve a la pagina 0 (Banco)
                 RETURN                               ;Retorna.

Ahora para saber que tecla esta siendo pulsada necesitamos escanear el teclado, 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. 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.

Código:
KB_Scan                                               ;Escanea el teclado
                 CLRF         Tecla                   ;Borra Tecla y
                 INCF          Tecla,f                 ;prepara Tecla para primer código.
                 MOVLW    0Eh                      ;Saca 0 a la primera fila
                 MOVWF    PORTB                 ;de la Puerta B
                 NOP                                      ;Nada para estabilización de señal.
Cheq_Col  BTFSS     PORTB,4              ;Primera columna = 0
                 GOTO      antirebotes           ;Sale si se ha pulsado tecla.
                 INCF         Tecla,f                 ;Si no tecla pulsada, incrementa tecla.
                 BTFSS     PORTB,5              ;Segunda columna = 0
                 GOTO      antirebotes          ;Sale si se ha pulsado tecla.
                 INCF         Tecla,f                 ;Si no tecla pulsada, incrementa tecla.
                 BTFSS     PORTB,6              ;Tercera columna = 0
                 GOTO      antirebotes          ;Sale si se ha pulsado tecla.
                 INCF        Tecla,f                  ;Si no tecla pulsada, incrementa tecla.
                 BTFSS     PORTB,7              ;Cuarta columna = 0
                 GOTO      antirebotes          ;Sale si se ha pulsado tecla.
                 INCF        Tecla,f                  ;Si no tecla pulsada, incrementa Tecla.

Ultima_Tecla                                         ;comprueba si se a escaneado todo el teclado

                MOVLW   d'17'                     ;Carga W con el n£mero de Teclas + 1.
                SUBWF    Tecla,w               ;y lo compara con el valor actual de Tecla.
                BTFSC      STATUS,Z          ;Si Tecla + 1 = valor actual.
                GOTO       NTeclas              ;No ha sido pulsada ninguna tecla.
                BSF          STATUS,C          ;Pone a 1 Bit C.
                RLF          PORTB,f              ;as¡ la Fila 1 pasa a 1 con la rotaci¢n a izqda.
                GOTO      Cheq_Col 

                NTeclas   CLRF Tecla          ;Coloca variable Tecla a 0
                RETURN                               ;y regresa.

antirebotes      ;ahora se espera a que la tecla sea soltada para evitar rebotes
                        ;y reactivaciones de tecla
                        ;esta parte puede ser eliminada si para nuestro proyecto no es necesaria
                        ;o es un inconveniente.

Espera1   BTFSS   PORTB,4                ;Si no se suelta la tecla FILA 1
                GOTO    Espera1                 ;vuelve a esperar.
Espera2   BTFSS   PORTB,5                ;Si no se suelta la tecla FILA 2
                GOTO    Espera2                 ;vuelve a esperar.
Espera3   BTFSS   PORTB,6                ;Si no se suelta la tecla FILA 3
                GOTO    Espera3                 ;vuelve a esperar.
Espera4   BTFSS   PORTB,7                ;Si no se suelta la tecla FILA 4
                GOTO    Espera4                 ;vuelve a esperar.
                 

                MOVF    Tecla,w               ;pone en w el numero contenido en la variable
                CALL     T_Conv                ;llama a la tabla de conversion y retorna
                MOVWF Tecla                   ;con el valor en hexadecimal y lo pone en la variable.
                RETURN                             ;vuelve al programa principal que hizo la llamada.
;----------------------------------------------------------------------------------------------------------

T_Conv   ADDWF   PCL,1
               RETLW    '0'                        ;Tecla nº0 = 0
               RETLW    '1'                        ;Tecla nº1 = 1
               RETLW    '4'                        ;Tecla nº2 = 4
               RETLW    '7'                        ;Tecla nº3 = 7
               RETLW    'A'                       ;Tecla nº4 = A
               RETLW    '2'                        ;Tecla nº5 = 2
               RETLW    '5'                        ;Tecla nº6 = 5
               RETLW    '8'                        ;Tecla nº7 = 8
               RETLW    '0'                        ;Tecla nº8 = 0
               RETLW    '3'                        ;Tecla nº9 = 3
               RETLW    '6'                        ;Tecla nº10 = 6
               RETLW    '9'                        ;Tecla nº11 = 9
               RETLW    'B'                        ;Tecla nº12 = B
               RETLW    'F'                        ;Tecla nº13 = F
               RETLW    'E'                        ;Tecla nº14 = E
               RETLW    'D'                        ;Tecla nº15 = D
               RETLW    'C'                        ;Tecla nº16 = C

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.


Ideas y mejoras: Para disminuir el número de conexión a usar para detectar la tecla que se esta pulsando, 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. 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.

 

Los diodos utilizados son del típico modelo 1N4148. 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. Esto es debido a que el circuito no tiene resistencias de limitación para protegerlos en estos casos, pero es totalmente viable el uso de ellas, 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), es este caso 
 
 
dispone de 2 filas de 16 caracteres cada una y cada carácter dispone de una matriz de 5x7 puntos (pixels), aunque los hay de otro número de filas y caracteres. 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.

Caracteristicas principales:
 -Pantalla de caracteres ASCII, además de los caracteres Kanji y Griegos.
 -Desplazamiento de los caracteres hacia la izquierda o la derecha.
 -Proporciona la dirección de la posición absoluta o relativa del caracter.
 -Memoria de 40 caracteres por línea de pantalla.
 -Movimiento del cursor y cambio de su aspecto.
 -Permite que el usuario pueda programar 8 caracteres.
 -Conexión a un procesador usando un interfaz de 4 u 8 bits


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. 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


atte
ivan


En línea

botboat


Desconectado Desconectado

Mensajes: 346



Ver Perfil
Re: contador con pic16f84
« Respuesta #2 en: 2 Mayo 2005, 21:36 pm »

felicidades ROOTX, un auténtico currazo  ;D
En línea

BADBYTE-K
Knowledge is power, Diesel-K


Desconectado Desconectado

Mensajes: 2.329


Aprende todo lo que este a tu alkance


Ver Perfil WWW
Re: contador con pic16f84
« Respuesta #3 en: 3 Mayo 2005, 06:13 am »

me gusto hasta el orden del post  8) muy bueno todo, solo faltaria probar el software en el pic  8)..

saludox
En línea

+ enrique ZP


Desconectado Desconectado

Mensajes: 2.936


X-Aqui


Ver Perfil WWW
Re: contador con pic16f84
« Respuesta #4 en: 4 Mayo 2005, 04:29 am »

felicidades ROOTX, un auténtico currazo ;D

Este tio si que sabe xD ya lo a demostrado  :) opino que este post pase a la biblioteca ya que esta mas que completo y esta super bueno.

Que paciencia que orden xDDD  :D

Hasta Pronto ;)
En línea

vlad67

Desconectado Desconectado

Mensajes: 21



Ver Perfil
Re: contador con pic16f84
« Respuesta #5 en: 19 Mayo 2005, 19:55 pm »

http://www.x-robotics.com/rutinas.htm

No es por demeritar..
En línea

[[[VLAD]]]
BADBYTE-K
Knowledge is power, Diesel-K


Desconectado Desconectado

Mensajes: 2.329


Aprende todo lo que este a tu alkance


Ver Perfil WWW
Re: contador con pic16f84
« Respuesta #6 en: 20 Mayo 2005, 02:23 am »

jejeje C&P

buena observacion vlad67  ;)

saludox
En línea

dengueboy

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Re: contador con pic16f84
« Respuesta #7 en: 27 Junio 2006, 07:22 am »


porfavor como seria el codigo y la forma de envio de datos del teclado en este caso solo de 12 digitos,los comunes, hacia el pic16f84a para plasmarlo en un display, es de urgencia muchas gracias
En línea

Syphroot

Desconectado Desconectado

Mensajes: 268


All You Need To Do Is Follow The Worms


Ver Perfil WWW
Re: contador con pic16f84
« Respuesta #8 en: 27 Junio 2006, 10:09 am »

Es muy parecido al codigo que ya te ponen al principio, nadamas checa el modo de conexionado (tambien similar si el teclado es matricial) y modificas la tabla donde retorna los valores de las teclas pulsadas... realmente es incluso mas sencillo por ser menos teclas... ;D
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema al programar microcontrolador PIC16F84
Electrónica
Fox_Neo 5 7,783 Último mensaje 8 Marzo 2013, 17:53 pm
por Fox_Neo
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines