TODOPIC
Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: Umbilical 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.
-
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
-
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