Autor Tema: Duda teclado 4x4 Ayuda POR FAVOR, suplico  (Leído 2076 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Peliparado

  • PIC10
  • *
  • Mensajes: 14
Duda teclado 4x4 Ayuda POR FAVOR, suplico
« en: 16 de Marzo de 2005, 11:11:00 »
Como estan, soy nuevo en el foro, es para pedirles ayuda:

Se trata de un teclado matricial 4x4, no he encontrado ABSOLUTAMENTE NADA en el foro acerca de esto ni mucho menos en las paginas en español de microcontroladores. Estoy construyendo un sistema muy basico, muy:

Teniendo el teclado matricial, detectar cual tecla se pulsa y mostrarla en el display de 7 segmentos.

Les comento cual es mi metodo:

1. Saqué la tabla de teclas usando el voltimetro en continuidad, el teclado tiene 8 pines en la parte de abajo, los primeros cuatro (contando de izquierda a derecha) son columnas, y el resto filas. Entonces junte la primera columna - con la primera fila, la primera columna - con la segunda fila, la primera columna - con la tercera fila y asi sucesivamente y saque la siguiente tabla :

+--- +--- tecla 1
+--- -+-- tecla 4
+--- --+- tecla 7
+--- ---+ tecla *

-+-- +--- tecla 2
-+-- -+-- tecla 5
-+-- --+- tecla 8
-+-- ---+ tecla 0

--+- +--- tecla 3
--+- -+-- tecla 6
--+- --+- tecla 9
--+- ---+ tecla #

---+ +--- tecla a
---+ -+-- tecla b
---+ --+- tecla c
---+ ---+ tecla d

El + representa el lugar (en los 8 pines) donde coloco los extremos del voltimetro, cuando undo la tecla "pita" y por eso se a que corresponde.

Con base en esa tabla realice el siguiente metodo:

En el PIC, destino al puerto B para manejar el teclado, de RB0 a RB3 colocare las filas, y de RB4 a RB7 las columnas.

Aqui viene la duda # 1, en el software programe a TRISB asi: 11110000, porque como explicare mas adelante, las columnas se toman como entradas y las filas como salidas, ya que el sistema para manejar el teclado es ir rotando un 0 por las filas e ir buscando otro 0 en las columnas, cuando lo hace, se determina la posicion y por ende la tecla pulsada.

El circuito es:

 
 |     |rb0                                rb7   -| 1 2 3 A |  Con resistencia a VCC 260 Oh
 |     |rb1                                rb6   -| 4 5 6 B |  Con resistencia a VCC 260 Oh
 |     |rb2                                rb5   -| 7 8 9 C |  Con resistencia a VCC 260 Oh
 |     |rb3                                rb4   -| * 0 # D |  Con resistencia a VCC 260 Oh
 |     |rb4                                rb3   -|
 |     |rb5                                rb2   -|
 |     |rb6                                rb1   -|
 |     |rb7                                rb0   -|

Como pueden ver, a la derecha esta el teclado con los 8 pines, los primeros columnas y los restantes filas, a la izquierda esta el PIC, y por ejemplo, el PIN RB0 del PIC va conectado con un cablecito al PIN RB0 de teclado (ver la figura)

ESO ES TODO, mi software SENCILLO es:

LIST P=16F873A
INCLUDE <P16F873A.INC>

DATO1 EQU 20
DATO2 EQU 21
DATO3 EQU 22

INICIO BSF STATUS,5
            CLRF TRISC
            MOVLW 0xF0
            MOVWF TRISB             ; TRISB 11110000 , 0-> salidas, 1-> Entradas
            BCF STATUS,5
            GOTO PRIN

; Programa principal

PRIN    CALL TECLADO
           CALL RETARDO20           ; para el rebote
           CALL IMPRIMIR
           GOTO PRIN
      
; Rutina para hallar la tecla pulsada

TECLADO       CLRF PORTB        ; asi es el metodo de escaneo de un teclado
       BSF PORTB,1       ; matricial, en los primeros bits, (RB0 a RB3), osea
       BSF PORTB,2       ; en las filas, voy rotando un 0(los demas estan en1)
       BSF PORTB,3       ; y voy verificando las columnas (en busca de un 0)
       BTFSS PORTB,4   ; y si encuentro la coincidencia, hallo la tecla.
       RETLW .13
       BTFSS PORTB,5
       RETLW .15
       BTFSS PORTB,6
       RETLW .0
       BTFSS PORTB,7
       RETLW .14
       BSF PORTB,0
       BCF PORTB,1
       BTFSS PORTB,4
       RETLW .12
       BTFSS PORTB,5
       RETLW .9
       BTFSS PORTB,6
       RETLW .8
       BTFSS PORTB,7
       RETLW .7
                    BSF PORTB,1
       BCF PORTB,2
       BTFSS PORTB,4
       RETLW .11
       BTFSS PORTB,5
       RETLW .6
       BTFSS PORTB,6
       RETLW .5
       BTFSS PORTB,7
       RETLW .4
                    BSF PORTB,2
       BCF PORTB,3
       BTFSS PORTB,4
       RETLW .10
       BTFSS PORTB,5
       RETLW .3
       BTFSS PORTB,6
       RETLW .2
       BTFSS PORTB,7
       RETLW .1
       BSF PORTA,0

; Rutina para el retardo de 1 segundo

RETARDO    MOVLW .25
   MOVWF DATO1
ONE   MOVLW .90
   MOVWF DATO2
TWO   MOVLW .150
   MOVWF DATO3
THREE   DECFSZ DATO3,1
   GOTO THREE
   DECFSZ DATO2,1
   GOTO TWO
   DECFSZ DATO1,1
   GOTO ONE
   RETURN

RETARDO20 MOVLW .1
   MOVWF DATO1
UNO   MOVLW .90
   MOVWF DATO2
DOS   MOVLW .150
   MOVWF DATO3
TRES   DECFSZ DATO3,1
   GOTO TRES
   DECFSZ DATO2,1
   GOTO DOS
   DECFSZ DATO1,1
   GOTO UNO
   RETURN

; Rutina para imprimir en orden descendente

IMPRIMIR    CALL TABLA
   MOVWF PORTC
   CALL RETARDO
   RETURN
      
TABLA   ADDWF PCL,1                           ; mi display se prende con 0s
   RETLW b"00000010" ; 0
   RETLW b"10011110" ; 1
   RETLW b"00100100" ; 2
   RETLW b"00001100" ; 3
   RETLW b"10011000" ; 4
   RETLW b"01001000" ; 5
   RETLW b"01000000" ; 6
   RETLW b"00011110" ; 7
   RETLW b"00000000" ; 8
   RETLW b"00011000" ; 9
   RETLW b"00010000" ; 10 A
   RETLW b"11000000" ; 11 B
   RETLW b"01100010" ; 12 C
   RETLW b"10000100" ; 13 D
   RETLW b"01100000" ; 14 E
   RETLW b"01110000" ; 15 F

FIN   NOP
   END


Eso es todo, es lo unico que se y que tengo para mostrarles mi problema: NO FUNCIONA NADA, QUEMO EL PIC Y NADA DE NADA, yo se que es un error de programacion o cableado, porque el PIC esta bueno 16F873A y mi quemador tambien, el circuito para el display ya esta probado, osea que ese no es el problema. Por favor, si alguien me puede ayudar, se los agradeceria, y repito, no hace nada de nada, lo enchufo a los 5V y presiono teclas y nada.


Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
RE: Duda teclado 4x4 Ayuda POR FAVOR, suplico
« Respuesta #1 en: 16 de Marzo de 2005, 11:32:00 »
No te comento nada sobre el programa porque no tengo idea de ASM, pero con respecto a lo de que no haga nada, ¿tienes puesta una resistencia a la patilla MCLR?, ¿el cristal oscila?.

Si tienes dudas respecto al funcionamiento del pic, te recomiendo hagas un programa muy simple, como el típico de parpadeo de un led, y ajustes tu hardware hasta que compruebes que funciona. Una vez hecho esto, ya podrás grabar un programa complejo en el micro con la seguridad de que el hardware te está respondiendo adecuadamente.

Desconectado blocktel

  • PIC10
  • *
  • Mensajes: 11
RE: Duda teclado 4x4 Ayuda POR FAVOR, suplico
« Respuesta #2 en: 17 de Marzo de 2005, 08:45:00 »
aver prueba con esto

prin
  call teclado
  xorlw h"00"
  btfsc status,z
  goto prin       ; si no se pulsa ninguna tecla te vas a prin
  call retardo
  call   imprimir
  goto prin
; en teclado eliminas ese porta,0 y ponees retlw h00" ,ninguna tecla pres