Autor Tema: AYUDA TECLADO MATRICIAL  (Leído 3205 veces)

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

Desconectado Umbilical

  • PIC10
  • *
  • Mensajes: 2
AYUDA TECLADO MATRICIAL
« en: 04 de Enero de 2005, 10:48:00 »
EN EL PIC16F877-4 EL TODO EL PUERTO RC ES SCHMITT TIGGER, AL IGUAL QUE EL PUERTO RA4.
TENGO LOS PUERTOS DEL RC0 AL RC6 COMO SALIDAS (7 SALIDAS) Y LOS PUERTOS RA0 AL RA5 INCLUIDO RC7 COMO ENTRADAS, PARA UN TECLADO MATRICIAL DE 7x7 Y AUN NO ME FUNCIONA MUY BIEN. QUE PUEDO HACER PARA QUE FUNCIONE CORRECTAMENTE Y QUE SIGNIFICA "SCHMITT TIGGER"? AL SER UN PUERTO "SCHMITT TIGGER" INTERFIERE SU FUNCIONAMIENTO CUANDO ES UNA ENTRADA Y/O UNA SALIDA?, COMO SE SOLUCIONA ESTO.

Desconectado Lager.

  • Moderadores
  • PIC18
  • *****
  • Mensajes: 477
RE: AYUDA TECLADO MATRICIAL
« Respuesta #1 en: 04 de Enero de 2005, 14:09:00 »
Que onda Umbilical,
Antes que nada un google ,concepto de Schmitt Trigger:



Bibliografia :  http://hyperphysics.phy-astr.gsu.edu/hbase/electronic/schmitt.html


"La puerta Trigger-schmitt, se comporta de forma lógica como una puerta NAND, pero el circuito que la constituye, además recorta la señal y la escuadra, de manera que su salida es realmente cuadrada, utilizándose esencialmente para este cometido"



Bibliografia:  http://www.fortunecity.es/felices/barcelona/146/3d/lecciones/lecc1.htm

Por lo que comentas de tu codigo estas seteando los registros de salida y entrada, pero creo que no es suficiente con esa informacion, si quieres que te ayudemos con certeza, podrias empezar poniendo el codigo para que entre todos los panas del foro intentemos ayudarte. Si se puede ,tambien deberias explicarnos el hardware de tu proyecto, para darte una respuesta mas precisa.

Salu2

Desconectado RGL

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 634
RE: AYUDA TECLADO MATRICIAL
« Respuesta #2 en: 05 de Enero de 2005, 04:16:00 »
quizás te ayude este teclado de 8x8 teclas que escribí estos días atrás para protón:

"****************************************************************
"* Titulo  : Proyecto para Teclado de 64 teclas                 *
"* Nombre  : TECLADO64                                          *
"* Autor   : "Se obvia el nombre por seguridad*
"* Notice  : Copyright (c) 2002 "Se obvia el nombre por seguridad*
"*         : All Rights Reserved                                *
"* Fecha   : 25/11/2004                                         *
"* Version : 1.00                                               *
"* MCU     : PIC16F877A                                         *
"* COMPILER: PROTON+ Compiler. Version 3.01                     *
"*         :                                                    *
"* REVISIÓN:                                                    *
"*                                                              *
"* REVISIÓN:                                                    *
"* REVISION:                                                    *
"* REVISION:                                                    *
"****************************************************************

"*******************************************************************
"DESCRIPCION : Se usa un micro 877A para escanear un teclado de hasta 64 teclas
"mediante dos puertos completos PORTB y PORTC. Un tercer puerto (PORTD) se usa
"para pasar la tecla codificada a un segundo microcontrolador o a otro dispositivo.
"Por el PORTA.0 generouna interrupción para avisar de que hay una tecla leida.
"El proceso de escaneo se realiza sin interrupción al ser la única tarea que se
"va a realizar con el micro.
"Al PORTC se le ponen unas resistencias en serie de 270 OHm para limitar corriente
"********************************************************************




"***************************************
"*          FUSIBLES                   *
"***************************************

CONFIG XT_OSC , WDT_OFF , PWRTE_ON , BODEN_ON , LVP_OFF , WRT_HALF , CPD_ON , DEBUG_OFF

   " Oscilador interno XT_OSC(4MHz)    
   " Watchdog Timer desconectado
   " Power-On Timer conectado
   " Brown-Out Detect conectado
   " Low Voltage Programming desconectado
   " Data Memory Code Protect la mitd
   " Flash Program Memory Protect activado
                " In Circuit Debuger desactivado    
   " Program Code Protection activado
   
"** FIN DE FUSIBLES

"*****************************
"*        DEFINE             *
"*****************************

 DEVICE 16F877A
 
 DECLARE XTAL 4                  "Frecuencia del reloj 4MHz
 DECLARE WATCHDOG OFF             "Wachdog desconectado

"** FIN DE DEFINE


"DEFINICION DE CONSTANTES

 SYMBOL NOT_RBPU = OPTION_REG.7 " PORTB Pull-up Enable
 SYMBOL LED=PORTA.1

"DEFINICION DE VARIABLES  
 DIM fila AS  BYTE  "fila del teclado
 DIM columna AS BYTE  "columna del teclado
 DIM tecla AS BYTE "Variable para el valor de la tecla
 DIM salida AS BIT
 DIM retardo AS BYTE "retardo para impedir rebotes
 
"DEFINICION DE LOS PINES DE ENTRADA/SALIDA.

ADCON1 = 7     "PORTA y PORTE como I/O digitales

TRISA=%00000000   "Los pin PORTA son salidas
TRISB=%11111111   "Los pin  son entradas.
TRISC=%00000000   "Los pin  son SALIDAS.
TRISD=%00000000   "Los pin  son SALIDAS.

EWRITE 0,[50,1,0,0]  "Configuración activa

"Posicion 0-----------> Retardo ajustado para impedir rebotes, 50 milisegundos.
"Posicion 1,2,3 ------> Version del firmware
 
EWRITE 48,[50,1,0,0]  "Guardo la configuración de fábrica


"INICIALIZACIÓN DE VARIABLES

 NOT_RBPU=0 "Activo las resistencias internas de pullup puerto B
 fila=0
 columna=0
 tecla=0
 salida=0
 PORTC=0
 PORTA.0=1
 retardo=50
 LED=1
" ** PROGRAMA PRINCIPAL **


 WHILE 1=1
    DELAYMS retardo  "tiempo de espera para eliminar rebotes
    GOSUB pulsada
    GOSUB lee_tecla

 WEND

"*************************************************************************
"** SUBRUTINA: pulsada
"** espera hasta que no haya ninguna tecla pulsada
"*************************************************************************

pulsada:
    WHILE 1=1
      IF PORTB =$FF THEN BREAK
    WEND
    DELAYMS retardo "tiempo de espera para eliminar rebotes
    RETURN
   
"** FIN SUBRUTINA: pulsada

"*************************************************************************
"** SUBRUTINA: lee_tecla
"** lee una tecla del teclado y devuelve su valor en el puerto PORTD
"** provocando una salida de interrupción para avisar de una pulsación
"*************************************************************************

lee_tecla:
    WHILE 1=1
      FOR columna=0 TO 7
        PORTC=(DCD columna)^$FF
        fila=PORTB
        IF fila != $FF THEN
          salida=1
          BREAK
        ENDIF
      NEXT columna
      IF salida=1 THEN BREAK
      LED=~LED
    WEND
    salida=0
    tecla= (columna*8)+ (NCD (fila ^ $FF))
    PORTD=tecla  "Pongo en el PORTD la codificación de la tecla
    PORTA.0=0    "genero la interrupción de tecla pulsada 10 milisegundos
    DELAYMS 10
    PORTA.0=1
   
    RETURN
   
"** FIN SUBRUTINA: lee_tecla


END

Saludos
Ricky


 

anything