TECLADO TACTIL CAPACITIVO SIGMA ELECTRONICA Imagen 1: Teclado Táctil Capacitivo.1 DESCRIPCION. Teclado táctil capacitivo de 16 teclas, basado en la tecnología QMatrix® de Atmel. Se comunica a través de SPI. El teclado posee un led indicador de color amarillo, el cual permite al usuario conocer cuando una tecla ha sido censada. CARACTERISTICAS. TECNOLOGÍA TACTIL CAPACITIVA. Este teclado permite al usuario la adquisición de datos (teclas) con solo un suave toque sobre cada uno de los caracteres impresos en la tarjeta (números 0-9, letras A-D, símbolos * y #). La ventaja de este teclado frente a los de membrana está en que las teclas no se “gastan” puesto que no hay acción mecánica, por esto tendrá siempre la misma sensibilidad con una vida útil bastante extensa, además que su consumo eléctrico es mínimo. 1 Sigma Electrónica Ltda. Está diseñado para adquirir datos de hasta 5 veces por segundo, si el usuario realiza toques a mayor velocidad es posible la pérdida de uno o más datos. El led de estado (amarillo) permite al usuario conocer cuando cada toque ha sido registrado. A diferencia de un teclado “membrana” operado a través de un codificador (74C922), este teclado solo censa un dato cuando el usuario sostiene presionada una tecla. Se recomienda no sostener presionada una tecla por más de 8 segundos. En caso de sostener una tecla y tocar otra, no se efectuara cambio alguno puesto que el teclado envía el dato solo una vez en el momento que es censada la primer tecla. Imagen 2: Terminales de conexión.2 INTERFAZ SPI. El teclado posee un conector 3x2 macho (Imagen 2). El espacio entre pines es de 2,54mm (0.1”). A través de SPI puede conectar 2 o más teclados a su aplicación. Es necesario 1 terminal de salida digital más por cada teclado adicional que quiera incluir (para la conexión de SS’). Cada uno de los pines esta marcado así: 2 MISO: “Master In – Slave Out”, terminal de salida de datos serial del teclado. Va conectado al MISO del Master. Pin #1. VCC: Conexión para el terminal positivo de la fuente DC de 3 a 5 voltios para que el teclado opere. Pin #2. SCK: Terminal de entrada de la señal de reloj generada por el Master cuando se realiza transmisión de datos. Se recomienda usarlo con un Master que trabaje entre 100 y 200 KHz. El teclado soporta hasta 400KHz. Pin #3. MOSI: “Master Out – Slave In”, terminal de entrada de datos serial del teclado. Va conectado al MOSI del Master. Pin #4. SS’: “Slave Selector”, también llamado CS’ (Chip Selector). Señal de selección de esclavo en comunicación SPI. Esta señal opera “negada”, por lo cual el Master (aplicación del usuario Sigma Electrónica Ltda. a donde va conectado el teclado) debe proporcionar nivel alto permanentemente, solo al momento de traficar información con este esclavo debe pasar a nivel bajo. Pin #5. GND: Conexión del terminal negativo o referencia de la fuente DC. Pin #6. AUTOCALIBRACION. El teclado posee la función de calibrarse automáticamente cada 10 segundos aproximadamente, esto es útil en aplicaciones portables cuando el teclado es afectado por diferentes interferencias presentes en el ambiente. La calibración del teclado consiste en tomar los valores de referencia para cada tecla. Al “encender” el teclado, este se calibra inmediatamente y continua haciéndolo cada 10 segundos. El tiempo para calibración es reiniciado si se censa alguna tecla (pero no si es sostenida), por lo cual el proceso de calibración no se presentara mientras se estén censando diferentes teclas continuamente. Imagen 3: Led de estado.3 LED DE ESTADO. Este led (Imagen 3) tiene dos funciones: indicación de re-calibración e indicación de toque de teclas. Cuando el teclado no está siendo operado, este led prende momentáneamente cada 10 segundos aproximadamente. Esto indica que el teclado realiza proceso de calibración en ese momento, además de dar a conocer que está operando normalmente. Cuando el teclado está siendo operado, la siguiente calibración será realizada 10 segundos después del último toque de tecla. Cuando el usuario realiza el toque de teclas, el led prende momentáneamente con mayor intensidad que cuando se calibra (la diferencia de intensidad se nota a simple vista, realmente el tiempo en “alto” del led es mayor que al recalibrarse). Esto indica al usuario que el teclado ha censado el toque y genera el dato a ser enviado. 3 Sigma Electrónica Ltda. MODO DE OPERACIÓN. El teclado va conectado al puerto SPI de su microcontrolador. Debe habilitar el puerto SPI de su dispositivo y configurarlo como master (esto en caso de no estar usando el puerto SPI para comunicarse con otros dispositivos). Las líneas MOSI, MISO y SCK van conectadas a los terminales con el mismo nombre del master. El terminal SS’ del teclado debe conectarse a una salida digital del master, y es esta la que indica al teclado cuando el master va a enviar/recibir información. Programación necesaria por el usuario para operar el teclado: Habilite y configure el puerto SPI de su microcontrolador. En el ejemplo descrito a continuación se usa un ATMega16 como master. Primero definimos los pines para el puerto SPI, en este microcontrolador el SPI va en el puerto B (cuando el dispositivo es master, puede usar cualquier pin digital para manipular el SS del esclavo o esclavos): #define SPI_SCK_PIN 7 #define SPI_MOSI_PIN 5 #define SPI_MISO_PIN 6 Para el ejemplo se configura el SPI del master con los siguientes datos: // SPI clock mode #define SPI_MODE_0 0x00 /* Sample (Rising) Setup (Falling) CPOL=0, CPHA=0 */ // direccion de datos #define SPI_MSB 0 /* envía primero el bit más significativo (bit 7) */ // no usar interrupcion al recibir datos (SPIF) #define SPI_NO_INTERRUPT 0 // esclavo o master con divisor de reloj #define SPI_MSTR_CLK32 0x06 /* chip clock/32 >> 8MHz/32 = 250KHz */ Estos datos se aplican en la función “setup_spi()”, esta se llama al iniciar el programa así: setup_spi(SPI_MODE_0,SPI_MSB,SPI_NO_INTERRUPT,SPI_MSTR_CLK32); La funcion “setup_spi()” está compuesta así: void setup_spi(uint8_t mode, int dord, int interrupt, uint8_t clock) { // especifica la direccion de pines para el SPI en el Puerto B if (clock == SPI_SLAVE) { // si es esclavo, SS y SCK son entradas DDRB &= ~(1<<SPI_MOSI_PIN); // entrada DDRB |= (1<<SPI_MISO_PIN); // salida DDRB &= ~(1<<SPI_SS_PIN); // entrada DDRB &= ~(1<<SPI_SCK_PIN);// entrada } else { DDRB |= (1<<SPI_MOSI_PIN); // salida DDRB &= ~(1<<SPI_MISO_PIN); // entrada DDRB |= (1<<SPI_SCK_PIN);// salida DDRB |= (1<<SPI_SS_PIN);// salida } SPCR = ((interrupt ? 1 : 0)<<SPIE) // interrupción deshabilitada | (1<<SPE) // habilita el SPI | (dord<<DORD) // LSB o MSB | (((clock != SPI_SLAVE) ? 1 : 0) <<MSTR) // Esclavo o Master | (((mode & 0x02) == 2) << CPOL) // configuración para CPOL | (((mode & 0x01)) << CPHA) // configuración para CPHA | (((clock & 0x02) == 2) << SPR1) // divisor de reloj SPR1 | ((clock & 0x01) << SPR0); // divisor de reloj SPR0 SPSR = (((clock & 0x04) == 4) << SPI2X); // divisor de reloj SPI2X } Con el puerto SPI inicializado, se puede proceder a leer los datos generados por el teclado. Tecla Valor Obtenido Tecla Valor Obtenido 1 0x31 9 0x39 2 0x32 * 0x2A 3 0x33 0 0x30 4 0x34 # 0x23 5 0x35 A 0x41 6 0x36 B 0x42 7 0x37 C 0x43 8 0x38 D 0x44 Tabla 1: valor numérico para cada tecla. Realice periódicamente la lectura de 1 Byte al teclado a través de SPI: En el programa del master (microcontrolador con la aplicación del usuario), pueden definirse macros para habilitar o deshabilitar de forma simple el pin digital conectado al SS’ del teclado así (en este ejemplo, el SS’ del teclado va conectado al pin C1, C1 debe ser configurado como salida digital): #define #define // CS = #define // CS = #define TECLADO_CONTROL_PORT PORTC TECLADO_CONTROL_CS 1//BIT 1 del puerto C 0 = teclado activo CSACTIVE TECLADO_CONTROL_PORT&=~(1<<TECLADO_CONTROL_CS) 1 = teclado inactivo CSPASSIVE TECLADO_CONTROL_PORT|=(1<<TECLADO_CONTROL_CS) El master, debe enviar un Byte con valor 0 al teclado cada vez que quiera “revisar” si se ha tocado alguna tecla. El teclado acepta ese valor y retorna el código de la tecla presionada si se ha registrado alguna (Tabla 1). Si el teclado no tiene tecla para mostrar, el 0 es retornado. De esta manera el master puede “saber” cuando el teclado ha registrado una tecla e igualmente sabe que tecla es. El 0 debe ser enviado periódicamente para revisar el teclado continuamente, el valor de ese periodo es definido por el usuario (se recomienda un periodo de 50ms). Para esto debe “activar” el SS’ (“CSACTIVE” en el ejemplo) del teclado, enviarle el “0” y luego “desactivar” el SS’ (“CSPASSIVE”) así: CSACTIVE; var=send_spi(0x00);//enviar un 0 CSPASSIVE; La función send_spi() está compuesta así: uint8_t send_spi(uint8_t out) { SPDR = out; while (!(SPSR & (1<<SPIF))); return SPDR; } En el ejemplo, el valor retornado por el teclado queda guardado en la variable “var” (1 Byte) cuando se llama la función “send_spi()”. Con el valor de tecla en “var”, el usuario puede hacer lo que quiera con el (mostrarlo en display, seleccionar una opción en programa, etc..). El valor de “var” debe ser escrito a “0” nuevamente después de usar el valor y antes de leer el teclado nuevamente. Para finalizar el ejemplo, se muestra el contenido de “var” a través de un LCD e inmediatamente es escrito con 0 para asegurar que el dato se muestra (o se usa) una sola vez. Igualmente solo cuando se tiene un valor distinto a 0 se sabe que el teclado ha registrado alguna tecla: if(var!=0){lcd_gotoxy(a,1);lcd_putc(var);var=0;a=a+1;} RESUMEN. Tecnología: QMatrix® de Atmel® sobre un ATmega88PA-AU. Voltaje de operación: Entre 3.0 y 5.2VDC. No posee protección contra sobre-voltaje. Corriente en pasivo: 4.8mA a 5v. 2.2mA a 3.3v (teclado conectado, sin censar teclas). Corriente en activo: 13mA a 5v. 6mA a 3.3v (máximo, al censar teclas). Cantidad de teclas: 16, capacitivo. Tipo de conector: Regleta 3x2, con espacio entre pines de 2.54mm (0.1”). Dimensiones de la tarjeta: 67mm x 53mm x 5mm, incluyendo el tope negro en el conector de 6 pines. Hoyos de montaje: 4, uno próximo a cada esquina (centro a 2.35mm de bordes), 2,2mm de diámetro. Útiles para fijar la tarjeta. DIMENSIONES FISICAS. Imagen 4 y 5: Dimensiones de la tarjeta.4 PRECAUCIONES. Se recomienda usar para el teclado el mismo nivel de voltaje con el que está polarizado su microcontrolador (Master). Esto para evitar diferencia de niveles en las señales SPI. 5 Imagen 5: Área sensible en la tarjeta. En la parte inferior del PCB, no tocar el circuito que se encuentra entre el microcontrolador y el led de estado (Imagen 5), esto puede causar que el teclado perciba y transmita datos no deseados. Esta área puede ser cubierta por materiales no metálicos para evitar toques no deseados. No toque las resistencias marcadas con “0” cuando el teclado esté operando. 4 5 Sigma Electrónica Ltda. Sigma Electrónica Ltda. En caso que el teclado resulte registrando teclas continuamente cuando realmente no se están tocando (puede pasar al tener contacto directo con el circuito, o al ubicar el teclado cerca de dispositivos o equipos que puedan generar campos eléctricos o magneticos), puede simplemente reiniciarlo. Para esto interrumpa momentáneamente una de las líneas de alimentación, sea VCC o GND. Mantenga el teclado lejos de dispositivos que puedan generar campos eléctricos o magnéticos. Use siempre un regulador de voltaje confiable a 3,3 o 5 voltios DC. Preferiblemente no conecte otros dispositivos a este regulador, ya que pueden ocasionar ruido y posible malfuncionamiento del teclado. Puede cubrir o adherir al teclado (por la parte superior donde se “teclea”) materiales plásticos, papel o cartón. Este percibirá los toques sin problema, aunque deben ser de poco espesor, preferiblemente igual o menor a 1.2mm. No presione el teclado. Basta con un suave toque (con la yema del dedo) sobre las teclas para que sean censadas. Dudas, inquietudes o sugerencias sobre este producto, contacte a ingenieria@sigmaelectronica.net.