TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: orsaja en 17 de Noviembre de 2004, 19:19:00
-
necesito saber como hacer una rutina ya tengo el programa que reconoce el teclado pero ahora quiero por ejemplo que al apretar la tecla con el nuemro 5 el pic mande una señal por el puerto que estoy utilizando como salida y active un optoacoplador para generar una corriente y esta haga girar un motor por 5 minutos. despues de esto se apaga el motor y espera otra tecla a pulsar por ejemplo el 3 y hace girar el motor por 3 minutos asi cualquier tecla hasta el 9
gracias
-
Ok, por lo que veo el programa es bastante sencillo, si ya puedes reconocer que tecla has presionado y sabes su valor, entonces lo que haces es crearte una rutina de tiempo base de un minuto, lo demas es incluir el valor que has obtenido del teclado y repetir esa rutina base de un minuto tantas veces el valor leido desde el teclado, por supuesto, antes de ingresar en la rutina debes elevar a un estado alto el pin, ejecutar el retardo y finalmente bajar el pin y colocar al PIC listo para otra lectura desde el teclado, la secuencia seria mas o menos asi:
a) Inicializa puertos
b) Lee Teclado
c) Si existe un valor entonces envia este valor a una variable
d) HIGH en el pin de salida
e) Comienza retardo base de 1 minuto
f) Decrementa el valor de la variable en 1
g) Si el valor de la variable es distinto de 0 entonces repite ciclo desde e)
h) LOW en el pin de salida
j) Repetir ciclo desde a)
FIN
Por supuesto esta es una vista muy general, depende del lenguaje q uses para crear el programa...
-
Bueno, si estás realizando el programa en asembler, este pedazo de codigo te ayudará mucho. Si lo realizas en C de CCS, te recomiendo que llames el driver del teclado que viene incluido. Empieza a hacer el programa y ya iremos mejorandolo.
gfp 
;ESTA RUTINA DECODIFICA EL TECLADO DE 4X4 Y EL RESULTADO ES GUARDADO EN EL
;REGISTRO "TECLA"
CONTBYTE EQU 0X0C
CONTADOR EQU 0X1C
TECLA EQU 0X2C
COLUMNA EQU 0X3C
FILA EQU 0X4C
CONTA1 EQU 0X4F
REG1 EQU 0X0E
REG2 EQU 0X13
CONT EQU 0X0D
#DEFINE BANK1 BSF STATUS,5 ;Macro para abreviar el Banco 1
#DEFINE BANK0 BCF STATUS,5 ;Macro para abreviar el Banco 0
TECLADO BANK1 ;Seleccion de banco1
MOVLW 0XF0 ;W = 0XF0, PORTB 0,1,2,3 = OUT; 4,5,6,7 = IN
MOVWF TRISB ;TRISB=W
BANK0 ;Seleccion de banco0
NEW CLRF FILA
MOVLW .1
MOVWF COLUMNA
MOVLW 0XFE ;Columna 1
MOVWF PORTB
MOVLW .4
MOVWF CONTBYTE
SCAN BTFSS PORTB,4 ;Oprimieron tecla de Fila 0?
GOTO SUEFIL0 ;si
INCF FILA,1 ;no
BTFSS PORTB,5 ;Oprimieron tecla de Fila 1?
GOTO SUEFIL1 ;si
INCF FILA,1 ;no
BTFSS PORTB,6 ;Oprimieron tecla de Fila 2?
GOTO SUEFIL2 ;si
INCF FILA,1 ;no
BTFSS PORTB,7 ;Oprimieron tecla de Fila 3?
GOTO SUEFIL3 ;si
DECFSZ CONTBYTE,1
GOTO RESET
GOTO NEW
RESET CLRF FILA ;no
INCF COLUMNA,1
BSF STATUS,0
RLF PORTB,1
GOTO SCAN
SUEFIL0 BTFSS PORTB,4
GOTO SUEFIL0
GOTO TECLAD
SUEFIL1 BTFSS PORTB,5
GOTO SUEFIL1
GOTO TECLAD
SUEFIL2 BTFSS PORTB,6
GOTO SUEFIL2
GOTO TECLAD
SUEFIL3 BTFSS PORTB,7
GOTO SUEFIL3
GOTO TECLAD
TECLAD MOVLW .3
MOVWF CONTBYTE
MOVF FILA,0
SUMA ADDWF FILA,1
DECFSZ CONTBYTE,1
GOTO SUMA
MOVF FILA,0
MOVWF TECLA
MOVF COLUMNA,0
ADDWF TECLA,1 ;Tecla decodificada!
PUERTOS BANK1 ;Seleccion de banco1
CLRF TRISB ;trisb=w
BANK0 ;Seleccion de banco0
RETURN