Manejar teclado matricial y mostrar en lcd

Manuel: El trabajo enviado por cusco está impecable (circuito más explicaciones) yo no podría explicártelo mejor; por lo que solo puedo decirte que lo leas varias veces.
Solo te diré un par de cositas:
Por ejemplo cuando presionas el 9 (en ese preciso instante no pasa nada) recién cuando el contador (escaneador) apunta a la columna 2, manda un 0(cero) a la columna 2 y por tanto también a la fila 3, al poner un 0 en la fila 3 entonces AND4 manda un 0 y detiene los pulsos de clock, esto hace que los códigos de filas y columnas queden fijos mientras no se suelte la tecla. El código de fila (salidas de A1 y A0 azul) será: 10; el código de columna (salidas de A1 y A0 rojo) será: 01, por lo tanto el código total será: 1001 = 9.
Saludos
 
hola que tal manuel
espero que te sirva esto
supongo que tu problema es que al teclear un dijito no te da el que necesitas y asi con todos, o quizas cuando lo vuelves a teclear te da otro numero bueno pues
en una terminal de el chip del que tu hablas que creo que es el decodificador,
se debe de poner un capacitor para que te puedan dar los datos correctos no estoy seguro cuel pin es pero para que salgas de dudaas debes de analizar la hoja de datos o especificaciones (no se como le llames) del ese circuito intergrado

me gustaria de favor que alguien me pasara un buen circuuito para armar un amplificador de audio que me pueda dar uno bajos muy notables (chidos). amplificador para casa
gracias
 
Hola quetal wacalo realmente yo no lo podria explicar mejor,
el teclado lo simule en proteus y funciona perfectamente,
tambien lo arme para un proyecto y no hubo problemas
talvez el unico problemilla con que te podrias topar seria
con los valores de los condensadores mañana a mas tardar
te paso el circuito por que primero voy a tener que buscarlo
hasta mañana.
 
mira yo soy nuevo en este foro pero aqui te dejo este diagrama no es con un teclado matricial
pero te podria servir y es con 4 displays pero eso es lo de menos nada mas le quitas dos.
bueno pues ojala y les sirva
 

Adjuntos

  • teclado_201.doc
    41.5 KB · Visitas: 698
bueno si ya la habia rebvisado e incluso dan el circuito hecho pero lo que yo quisiera saber es saber el funcionamiento de dicho integhrado, para q esta los capacitores ? pero de todas formas gracias por tu interes ...
 
Buenas!

Estoy interesado en la realización de este tema pero utilizando PIC's. Me podríais aconsejar de webs donde poder buscar información al respecto o recomendarme algún link sobre el tema.

Básicamente estoy buscando habilitar una salida de un pic siempre y cuando se haya introducido previamente una clave de seguridad por teclado. También existe la posbilidad de cambiar dicha clave.

Gracias de antemano.
 
Saludos, tengo problemas con un teclado matricial 4x3 que estoy usando con un pic 16F877. Este lo manejo por el convertidor A/D y me muestra los valores adecuados en una pantalla lcd, pero cuando los envio por puerto serial cambia el valor leido en el teclado. Les agradezco mucho si me pueden ayudar.

Adjunto el programa el programa en c y la simulacion esta en proteus y el foro no permite subir estos archivos, agradezco a los moderadores del foro si pueden hacer algo al respecto.

Gracias.
 

Adjuntos

  • teclado_listo_184.c
    7.8 KB · Visitas: 123
He resuelto el problema, habia que hacer dos cambios, uno era ajustando los valores de las resistencias, lo que amplificadora las ventanas de valores del teclado dando mayor flexibilidad al sistema. El otro era que la variable que estaba obteniendo estaba definida como tipo char y al tratar de convertirla en un entero carga su valor en la tabla asci, por supuesto al operar matematicamente con esta variable tenia errores.
 
Estoy realizando un proyecto y en mi diseño de hardware, decidí utilizar el puerto C del pic16f877 para controlar un teclado matricial de 3x3. ¿Es esa una buena elección?
 
Hola griseleishon, de normal cualquier puerto es bueno para aplicaciones como la del teclado. Ahora bien debes visualizar las diferentes opciones que traen los pines individuales de cada puerto.
Por ejemplo, el puerto A en muchos PICs poseen entradas para el conversor AD, el puerto C posee pines para comunicación de datos como el I2C, SPI, USART, etc. El puerto D por ejemplo esta diseñado para una comunicación de protocolo paralelo. Y así como esto hay muchos más dependiendo del PIC y del número de pines que posea.
Para manejar un teclado necesitas resistencias PULL-UP que te mantengan "fijo" un voltaje ( nivel lógico 1) a la salida. El puerto C no posee internamente estas PULL-UPs por lo que tendrías que poner por fuera las resistencias.
Si no usas el puerto B tal vez sería más sencillo para el teclado, ya que este puerto incorpora la opción de PULL-UPs.
En pocas palabras, el puerto B está diseñado para trabajar con un teclado matricial.
Espero que esto te pueda ser de utilidad.
Saludos
 
Te tengo un código en assembler para teclados matriciales. Lamentablemente es para teclados de 4x4, pero fíjate que eso puede darte totalmente lo mismo, porque para adaptar el programa, lo unico que tienes que hacer es no conectar la fila 4 y la columna 4 (digo, conectar físicamente).

En el programa se usa el PORTB, por lo que es eso lo unico que debes cambiar.

Este programa es bastante "tonto" también, lo cual puede ser ventajoso cuando le asignas letras o símbolos diferentes a cada tecla del teclado, en vez de los números ordenados, como es siempre.
El programa es fácil de entender también.

Código:
;Configuración del PIC 16F84A
STATUS	EQU	0x03
PORTA	EQU	0x05
PORTB	EQU	0x06
TRISA	EQU	0x85
TRISB	EQU	0x86

;Variables para el programa
PDel0	EQU	0x0C
PDel1	EQU	0x0D

RESULT	EQU	0x0E
CONTCL	EQU	0x0F
CLAVES	EQU	0x10

;Inicialización de puertos del PIC 16F84A
	bsf		STATUS, 5		;Banco 1
	clrf	TRISA			;Todo el perto A OUT
	movlw	0x0F
	movwf	TRISB			;0,1,2,3=IN 4,5,6,7=OUT
	bcf		STATUS, 5		;Banco 0

;Vaciar puertos
	clrf	PORTA
	clrf	PORTB
;Inicializar vaiable para el programa
	movlw	B'00011111'
	movwf	CONTCL

INTERR
	movlw	0xF0			;Activar el RB para INT
	movwf	PORTB
	btfsc	PORTB,0			;Para recibir señal: esta subrrutina
	goto	SCANTEC			; se encarga de llamar al decodificador
	btfsc	PORTB,1			; de caracteres si detecta alguna
	goto	SCANTEC			; tecla presionada.
	btfsc	PORTB,2
	goto	SCANTEC
	btfsc	PORTB,3
	goto	SCANTEC
	goto	INTERR

UNINT
	btfsc	PORTB,0			;Para ninguna señal: esta subrrutina
	goto	UNINT			; se encarga de asegurarse que ya no
	btfsc	PORTB,1			; haya ninguna tecla apretada para
	goto	UNINT			; continuar con el programa. Si no se
	btfsc	PORTB,2			; usara, el programa leería miles de
	goto	UNINT			; veces el mismo caracter, pero
	btfsc	PORTB,3			; normalmente se quiere leerlo una
	goto	UNINT			; sola vez.
	return

SCANTEC						;Subrutina que asigna valores para
	clrf	PORTB			; cada tecla diferente del teclado.
	call	DEMORA			;Llamar a Antirrebote de teclado (50ms)
	clrw					;Vaciar Work

	bsf		PORTB,4			;Activar primera fila
	btfsc	PORTB,0			;Si RB0 = 1, entonces
	movlw	0x01			;el resultado será = 1
	btfsc	PORTB,1			;Si RB1 = 1, entonces
	movlw	0x02			;el resultado será = 2
	btfsc	PORTB,2			; ...
	movlw	0x03
	btfsc	PORTB,3
	movlw	0x0C
	call	UNINT
	bcf		PORTB,4			;Desactivar primera fila

	bsf		PORTB,5			;Activar segunda fila
	btfsc	PORTB,0			;Leer y asignar valores
	movlw	0x04
	btfsc	PORTB,1
	movlw	0x05
	btfsc	PORTB,2
	movlw	0x06
	btfsc	PORTB,3
	movlw	0x0D
	call	UNINT
	bcf		PORTB,5			;Desactivar segunda fila

	bsf		PORTB,6			;Activar tercera fila
	btfsc	PORTB,0			;Leer y asignar valores
	movlw	0x07
	btfsc	PORTB,1
	movlw	0x08
	btfsc	PORTB,2
	movlw	0x09
	btfsc	PORTB,3
	movlw	0x0E
	call	UNINT
	bcf		PORTB,6			;Desactivar tercera fila

	bsf		PORTB,7			;Activar cuarta fila
	btfsc	PORTB,0			;Leer y asignar valores
	movlw	0x0A
	btfsc	PORTB,1
	movlw	0x00
	btfsc	PORTB,2
	movlw	0x0B
	btfsc	PORTB,3
	movlw	0x0F
	call	UNINT
	bcf		PORTB,7			;Desactivar cuarta fila

	movwf	RESULT			;Mover valor final a RESULT


;Demora de 50ms a 4Mhz para antirrebote de botones del teclado
DEMORA  movlw     .55       ; 1 set numero de repeticion  (B)
        movwf     PDel0     ; 1 |
PLoop1  movlw     .181      ; 1 set numero de repeticion  (A)
        movwf     PDel1     ; 1 |
PLoop2  clrwdt              ; 1 clear watchdog
        clrwdt              ; 1 ciclo delay
        decfsz    PDel1, 1  ; 1 + (1) es el tiempo 0  ? (A)
        goto      PLoop2    ; 2 no, loop
        decfsz    PDel0,  1 ; 1 + (1) es el tiempo 0  ? (B)
        goto      PLoop1    ; 2 no, loop
        return              ; 2+2 Fin.

END

;El teclado matricial está conectado de la sgte forma:
;			PORTB,4		PORTB,5		PORTB,6		PORTB,7
;PORTB,0	1			2			3			C
;POERB,1	4			5			6			D
;PORTB,2	7			8			9			E
;PORTB,3	A			0			B			F

;Está claro que el puerto B es capaz de hacer interrupciones
;justamente para ser usadas en un teclado matricial. Aquí
;no se usan. Puede tener algunas ventajas. Además, en este
;programa, uno puede asignar valores arbitrarios a cada tecla
;del teclado, y eso es útil, ya que no cualquier teclado
;matricial tiene los números en el mismo órden que el que uso
;aquí.

Saludos!
 
De hecho elegí el puerto C del pic16f877, porque tiene salida un buffer ST cuando lo usas como salida. El puerto b, a pesar de que le puedo activar las resistencias de pull up, preferí dejarlo para mi bus de datos, porque lo voy a conectar a varias TTLs y éste tiene un buffer TTL.
 
griseleishon, como te comenté el puerto B está preparado para usar un teclado matricial. Pero si ya has decido utilizar el puerto C para tu teclado, adelante solo ten en consideración las resistencias, ya que sin estas puedes tener disparos erráticos en tu programa.
Saludos
 
Ya terminé el programa y me veo en un caos.
Al compilarlo no tuvo problemas, así que pensé que estaría bien, pero al simularlo con Mplab sim, me he dado cuenta de que el puerto E no actúa como salida, no sé que hice mal.

Mi proyecto, es un probador de compuertas TTL.
la compuerta se elige por medio de un teclado matricial de 3x3, pero de esas 9 teclas, solo se usan 8.

busqué en el manual del pic16f877 y encontré algo refente al registro Adcon1.

Código:
BCF STATUS, RP0 ;
BCF STATUS, RP1 ; Bank0
CLRF PORTA ; Initialize PORTA by
; clearing output
; data latches
BSF STATUS, RP0 ; Select Bank 1
MOVLW 0x06 ; Configure all pins
MOVWF ADCON1 ; as digital inputs
MOVLW 0xCF ; Value used to
; initialize data
; direction
MOVWF TRISA ; Set RA<3:0> as inputs
; RA<5:4> as outputs
; TRISA<7:6>are always
; read as ’0’.

por lo que entendí, supuse que debo utilizar el adcon1, para indicarle al pic que su puerto E será utilizado como salida digital, TTL, pero no sé como hacer eso.
 
Atrás
Arriba