Autor Tema: Teclado 4x4 Realidad  (Leído 3677 veces)

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

Desconectado Desert

  • PIC10
  • *
  • Mensajes: 11
Teclado 4x4 Realidad
« en: 19 de Febrero de 2007, 16:11:55 »
Hola amigos, tengo un programa que simulado con el proteus va perfectamente ke se trata de un teclado 4x4 en el puerto B y un Display en el puerto D de tal manera ke si pulsas la tecla en el puerto B sale el digito por el puerto D. Cuando lo pongo en la realidad el PortB todo el rato esta dando unos y ceros las patillas 4 a 7(ke no son las ke escanean tenian ke kedarse kietas como en el proteus) no entiendo el porque, el pic no esta roto xq pasa con otros ke e probao, y claro se salta el btfsc y manda los datos ke le da la gana al display, si alguien prodria decirme el xq se lo agradeceria, x cierto al pasar el dedo por el portb se vuelve mas loco el display todavia

list    p=16f877       ;Comando que indica el Pic usado
include    "p16f877.inc"       ;Etiquetas genéricas para el Pic16F877
org          0x00          ;Inicio del programa en la posición cero de memoria
goto         INICIO
org            0x05          
Tecla         equ   0x40
CONTA         equ   0x50
Tecla2         equ 0x49
;Tecla3         equ 0x99

INICIO
   CLRF      PORTD         ;Borra los latch.
   CLRF      PORTB         ;Borra los latch.
   BSF         STATUS,RP0      ;Selecciona el banco 1
   CLRF      TRISD         ;Selecciona PORTB como salida
   MOVLW      0F0H         ;PB4-7 como entradas; 
    MOVWF      TRISB           ;y PB0-3 como salidas
    movlw      b'10000011'
    MOVWF      OPTION_REG
   BCF         STATUS,RP0      ;selecciona banco 0

BUCLE
   call   KB_Scan
   GOTO      BUCLE         ;Vuelve a la subrutina BUCLE

KB_Scan                                 ;Escanea el teclado
                CLRF    Tecla           ;Borra Tecla y
                INCF    Tecla,f         ;prepara Tecla para primer c¢digo.
                MOVLW   b'1000'             ;Saca 0 a la primera fila
                MOVWF   PORTB           ;de la Puerta B
                NOP                     ;Nada para estabilizaci¢n de señal. 
Cheq_Col        BTFSC   PORTB,4         ;Primera columna = 0       
                GOTO    antirebotes     ;Sale si se ha pulsado tecla.
                INCF    Tecla,f         ;Si no tecla pulsada, incrementa tecla.
               
            BTFSC   PORTB,5         ;Segunda columna = 0
                GOTO    antirebotes     ;Sale si se ha pulsado tecla.
                INCF    Tecla,f         ;Si no tecla pulsada, incrementa tecla.
               
            BTFSC   PORTB,6         ;Tercera columna = 0
                GOTO    antirebotes     ;Sale si se ha pulsado tecla.
                INCF    Tecla,f         ;Si no tecla pulsada, incrementa tecla.
               
            BTFSC   PORTB,7         ;Cuarta columna = 0
                GOTO    antirebotes     ;Sale si se ha pulsado tecla.
                INCF    Tecla,f         ;Si no tecla pulsada,incrementa Tecla.
                                     
Ultima_Tecla    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.   
                RRF     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   
Espera1 
            BTFSC   PORTB,4                ;Si no se suelta la tecla FILA 1
                GOTO    Espera1                 ;vuelve a esperar.
Espera2 
            BTFSC   PORTB,5                ;Si no se suelta la tecla FILA 2
                GOTO    Espera2                 ;vuelve a esperar.
Espera3   
             BTFSC   PORTB,6                ;Si no se suelta la tecla FILA 3
                GOTO    Espera3                 ;vuelve a esperar.
Espera4   
            BTFSC   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.
              movwf   Tecla2
            movwf    PORTD         ;Hace que salga ese valor por PORTB
             
RETURN                      ;vuelve al programa principal que hizo la llamada.
T_Conv         
             
               ADDWF   PCL,1
                RETLW   b'01010101'            ;
                RETLW   b'11110001'             ;
                RETLW   b'01111110'             ;
                RETLW   b'10101010'             ;
                RETLW   b'00111101'             ;                     
                RETLW   b'00110000'             ;
                RETLW   b'01111001'             ;
   RETLW   b'01001110'             ;
                RETLW   b'00110011'             ;
                RETLW   b'01011011'             ;
                RETLW   b'01011111'             ;
                RETLW   b'00011111'             ;
                RETLW   b'01110000'             ;
                RETLW   b'11111111'             ;
                RETLW   b'01110011'             ;
                RETLW   b'01110111'             ;             
                             

return
retardo
   movlw   d'50'
   movwf   CONTA
espera
   clrf   INTCON
   movlw   d'178'
   movwf   TMR0
espera_1
   btfss   INTCON,T0IF
   goto   espera_1
   decfsz   CONTA,F
   goto   espera
   return   
END
« Última modificación: 19 de Febrero de 2007, 16:17:20 por Desert »

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Teclado 4x4 Realidad
« Respuesta #1 en: 19 de Febrero de 2007, 17:26:35 »
Desert, antes que nada fíjate de leer las reglas del foro así tu post sale más claro, al menos en el código. Reglas del Foro

Respecto a cómo lees el teclado, te vales del uso de los weak pullup? o cómo es tu hardware?

Eso que comentas de que pasas el dedo y hace locuras me da a pensar en que sí los tienes activados y tal vez la lógica de tu hardware no prevea su uso.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado Desert

  • PIC10
  • *
  • Mensajes: 11
Re: Teclado 4x4 Realidad
« Respuesta #2 en: 19 de Febrero de 2007, 19:21:24 »
si les tengo activaos si, pero es ke si los desactivo no funciona nose porque, le e probao en el puerto D y lo mismo

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Teclado 4x4 Realidad
« Respuesta #3 en: 19 de Febrero de 2007, 22:39:45 »
si les tengo activaos si, pero es ke si los desactivo no funciona nose porque, le e probao en el puerto D y lo mismo

Podes subir tu código en .zip?

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado Desert

  • PIC10
  • *
  • Mensajes: 11
Re: Teclado 4x4 Realidad
« Respuesta #4 en: 20 de Febrero de 2007, 08:58:20 »
te pongo todo, hasta el del proteus, este esta puesto en el portD el teclado y el 7 segmentos en el puerto B

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: Teclado 4x4 Realidad
« Respuesta #5 en: 21 de Febrero de 2007, 03:40:48 »
Hola. Te mando un ejemplo de escaneo de un teclado 4x4. Lo probe y funciona muy bien. No recuerdo de donde lo saque. Suerte.
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Teclado 4x4 Realidad
« Respuesta #6 en: 21 de Febrero de 2007, 04:53:09 »
Hola.

Entre estas lineas:
                MOVF    Tecla,w      ;pone en w el numero contenido en la variable
   CALL    T_Conv         ;llama a la tabla de conversion y retornaPone:

Pone:
                andlw    0x0F

Te tiene que quedar:
                MOVF    Tecla,w   ;pone en w el numero contenido en la variable
                andlw    0x0F
   CALL    T_Conv         ;llama a la tabla de conversion y retorna

Eso no deberia hacer diferencia excepto si por algun motivo tecla adopta un valor superior a 0x0F(cosa que no deberia suceder) pero por las dudas, ponelo.

Y lo mas importante:

Pone una resistencia de 10k a GND en cada pin: D4,D5,D6 y D7 para impedir que ingrese ruido a estos pines generando problemas(probablemente lo que te este sucendiendo es esto).

Por lo que veo, tu programa envia un alto(5v) a una entrada del teclado cuando presionas una tecla.Generalmente se usa al reves(se usa en el puertob para provechar las pull ups internas en RB4-RB7), pero tambien es valido como lo estas haciendo.

Te paso los archivos modificados.

Saludos.
« Última modificación: 21 de Febrero de 2007, 04:58:47 por BrunoF »
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado microcom

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 568
Re: Teclado 4x4 Realidad
« Respuesta #7 en: 21 de Febrero de 2007, 18:02:26 »






LIST P=16F84A
      #INCLUDE<P16F84A.INC>
   
;DECLARACION DE VARIABLES
MEMORIA   EQU   10
REG1   EQU   11
REG2   EQU   12
REG3   EQU   13
PORTA   EQU   05
PORTB   EQU   06
STATUS   EQU   03



   ORG   00
   GOTO   INICIO

RETARDO   MOVLW   .9
   MOVWF   REG1
DEC3   MOVLW   .9
   MOVWF   REG2
DEC2   MOVLW   .5
   MOVWF   REG3
DEC1   DECFSZ   REG3,1
   GOTO   DEC1
   DECFSZ   REG2,1
   GOTO   DEC2
   DECFSZ   REG1,1
   GOTO   DEC3
   RETURN
   

CONFIGURACION DE PUERTOS

INICIO   
   BSF   STATUS,5
   MOVLW   0F
   MOVWF   PORTA
   CLRF   PORTB
   BCF   STATUS,5
   CLRF   PORTA
   CLRF   PORTB


      COLUMNA   
   CLRF    PORTB
        MOVLW   B'0001'
        MOVWF   PORTB
   BTFSC   PORTA,0
   GOTO   UNO
   BTFSC   PORTA,1
   GOTO   DOS
   BTFSC   PORTA,2
   GOTO    TRES
   RLF     PORTB,1
   BTFSC   PORTA,0
   GOTO   CUATRO
   BTFSC   PORTA,1
   GOTO   CINCO
   BTFSC   PORTA,2
   GOTO   SEIS
   RLF   PORTB,1
   BTFSC   PORTA,0
   GOTO   SIETE
   BTFSC   PORTA,1
   GOTO   OCHO
   BTFSC   PORTA,2
   GOTO   NUEVE
   RLF       PORTB,1      
   BTFSC   PORTA,1
   GOTO   CERO
   MOVF    MEMORIA,0
        MOVWF   PORTB
        CALL    RETARDO   
   GOTO   COLUMNA

      

UNO   MOVLW   01
   GOTO    MOSTRAR
CUATRO   MOVLW   04
   GOTO    MOSTRAR
SIETE   MOVLW   07
   GOTO   MOSTRAR
DOS   MOVLW   02
   GOTO   MOSTRAR
CINCO   MOVLW   05
        GOTO    MOSTRAR
OCHO   MOVLW   08
   GOTO   MOSTRAR
CERO   MOVLW   0
   GOTO   MOSTRAR
TRES   MOVLW   03
   GOTO   MOSTRAR
SEIS   MOVLW   06
   GOTO   MOSTRAR
NUEVE   MOVLW   09
   GOTO   MOSTRAR

MOSTRAR   MOVWF   PORTB
   MOVWF   MEMORIA
   CALL   RETARDO
   GOTO    COLUMNA


END

AQUI ESTA UN CODIGO QUE TE PUEDE SERVIR


Desconectado Desert

  • PIC10
  • *
  • Mensajes: 11
Re: Teclado 4x4 Realidad
« Respuesta #8 en: 23 de Febrero de 2007, 19:03:21 »
al final me hice otro programa como dices tu, al reves, ke aprovecha las resistencias internas y e conectao lo ke es un lcd de 4x20 y el teclao al mismo puerto y va perfectamente, este foro es mu bueno gracias, en cuanto pueda probare eso ke mas dicho y la modificacion aver si funciona y te digo