Teclado y Display Ing. Marcelo Trujillo Profesor Asociado
Teclado Ing.Marcelo Trujillo
Recordamos: Panorama general Info II-UTN-FRBA @2011-Ing. Mandrut & M. Prieto @2009-Ings. Marcelo Trujillo & Marcelo Giura @2009-Ings. Marcelo Trujillo & Marcelo Giura 3
Teclado Vcc Input Hay Tecla Hay Tecla Hay Tecla 1 1 1 1 1 1 Input 1 1 Hay Tecla Hay Tecla Hay Tecla Ing.Marcelo Trujillo
Teclado controlado Vcc Input output 1 1 1 1 1 1 1 1 1 1 1 Ing.Marcelo Trujillo
Teclado controlado Vcc Input output Hay Tecla Hay Tecla Hay Tecla 1 1 1 1 Input 1 1 Hay Tecla Hay Tecla Hay Tecla output Ing.Marcelo Trujillo
Y si tengo un montón de teclas ?????? Teclado controlado Y si tengo un montón de teclas ?????? Cuantos pines uso ?????? Ing.Marcelo Trujillo
Barrido Teclado Matricial output Input 1 Y cómo la identifico? 1 Y cómo la identifico? output 1 Input Hay Tecla Ing.Marcelo Trujillo
Teclado Matricial 1 output Input Código de tecla Ing.Marcelo Trujillo
Teclado Matricial output Input col0 col1 col2 col3 1 2 3 1 fila0 4 5 6 1 2 3 1 fila0 4 5 6 7 fila1 output 8 9 10 11 Código de tecla 12 fila2 12 13 14 15 fila3 1 Input Ing.Marcelo Trujillo
Abstracción de software Teclado Matricial Hardware dependiente Abstracción de software Ing.Marcelo Trujillo
Tenemos que independizar uno de otro Para optimizar la portabilidad Teclado Matricial Tenemos que independizar uno de otro Para qué ? Para optimizar la portabilidad Ing.Marcelo Trujillo
Implementación del barrido Ing.Marcelo Trujillo
Defines teclado #define NO_KEY (uint8_t) 0XFF #define fila0 PORTn,m #define fila1 PORTn,m #define fila2 PORTn,m #define fila3 PORTn,m #define col0 PORTn,m #define col1 PORTn,m #define col2 PORTn,m #define col3 PORTn,m #define fila0_OFF Set_PIN (fila0, OFF) #define fila0_ON Set_PIN (fila0, ON) #define fila1_OFF Set_PIN (fila1, OFF) #define fila1_ON Set_PIN (fila1, ON) #define fila2_OFF Set_PIN (fila2, OFF) #define fila2_ON Set_PIN (fila2, ON) #define fila3_OFF Set_PIN (fila3, OFF) #define fila3_ON Set_PIN (fila3, ON) #define Col0 Get_PIN (col0, ACTIVO_BAJO) #define Col1 Get_PIN (col1, ACTIVO_BAJO #define Col2 Get_PIN (col2, ACTIVO_BAJO #define Col3 Get_PIN (col3, ACTIVO_BAJO #define NO_KEY (uint8_t) 0XFF 14
uint8_t TecladoHW(void) { fila0_ON; fila1_ON; fila2_OFF; fila3_ON; if ( (Col0) ) return 8 ; if ( (Col1) ) return 9 ; if ( (Col2) ) return 10 ; if ( (Col3) ) return 11; fila2_ON; fila3_OFF; if ( (Col0) ) return 12 ; if ( (Col1) ) return 13 ; if ( (Col2) ) return 14 ; If ( (Col3) ) return 15; fila0_OFF; fila1_ON; fila2_ON; fila3_ON; if ( (Col0) ) return 0 ; if ( (Col1) ) return 1 ; if ( (Col2) ) return 2 ; if ( (Col3) ) return 3 ; fila0_ON; fila1_OFF; if ( (Col0) ) return 4 ; if ( (Col1) ) return 5 ; if ( (Col2) ) return 6 ; if ( (Col3) ) return 7 ; // y si no return NO_KEY; }
Teclado Matricial – Tiempo de demora al barrido 1 output t0 t0: tiempo que demora en llegar el cero a puerto de entrada 1 Input Ing.Marcelo Trujillo
Teclado Matricial – Tiempo de ejecución del barrido t1: tiempo que demora en ejecutarse el barrido Ing.Marcelo Trujillo
El cero se recibe después de realizar la lectura. Que pasa si ….. para tener en cuenta … t0 > t1 fila0_OFF; fila1_ON; fila2_ON; fila3_ON; if ( (col0) ) return 1 ; if ( (col1) ) return 2 ; if ( (col2) ) return 3 ; if ( (col3) ) return A ; El cero se recibe después de realizar la lectura. Tenemos entonces un problema de tiempos y habrá que modificar el algoritmo…
t0 > t1 Teclado Matricial – Driver de lectura del código Que pasa si ….. Pierdo tiempo t0 > t1 No vamos a llegar a tiempo para leer el => Problemas Tenemos que perder un poco de tiempo !!!!!! Ing.Marcelo Trujillo
Rebote - Bounce contactos Ing.Marcelo Trujillo
Ing. Marcelo Ángel Trujillo Rebote - Bounce Presiono Suelto Lo tenemos que eliminar!! 30/05/2011 Ing. Marcelo Ángel Trujillo
Recordando: Debounce en entradas digitales Ing.Marcelo Trujillo
Informática II - UTN-FRBA - Ing. Electrónica Técnicas Digitales II - R4052 - Práctica de Laboratorio - 2010 2323 8 de Mayo de 2010 Informática II - UTN-FRBA - Ing. Electrónica Informática II - UTN-FRBA - Ing. Electrónica Ing. Juan Manuel Cruz Diagrama de Estados y Transiciones Teclado codAct == NO_KEY / ___ RESET / codAct == NO_KEY codAct != codAnt / ___ REPOSO codAct != codAnt / codAnt = codAct !cont / buffKey = codAct codAnt = NO_KEY DETECCION codAct != codAnt / codAnt = codAct CHEQUEO codAct == codAnt && cont > 0) / cont-- codAct == codAnt / cont= CANT_REBOTES InfoII-UTN-FRBA Gracias Ing. Juan Cruz Curso R2001 - Ing. M. Giura Curso R2001 - Ing. M. Giura 23
Teclado Matricial Driver de Rebote Ing.Marcelo Trujillo
Teclado – parte Firmware void DriverTeclado(void) { uint8_t codAct ; codAct = TecladoHW( ); TecladoSW( codAct ); //DebounceTeclado(codAct) } buffer void SysTick_Handler (void) { ……………… DriverTeclado(); BarridoDisplay(); ……………….. } tecla ¿Quién lo lee? Hardware 30/05/2011 Ing. Marcelo Ángel Trujillo 25 @2009-Ings. Marcelo Trujillo & Marcelo Giura
Teclado – Primitiva de teclado y su uso en el main() Ing.Marcelo Trujillo
Teclado – Resumen Aplicación buffer tecla Primitiva Hardware Ing.Marcelo Trujillo
Teclado – Diagrama de capas Aplicación Primitiva tecla Buffer Driver Hardware Ing.Marcelo Trujillo
Agradecimientos Ing. Gabriel Mandrut Ing. Marcelo Giura Ing.Marcelo Trujillo