2017
Lab. de Microcontroladores y Microprocesadores
UNIVERSIDA UNIVERSIDAD D PARTICULAR PARTICULAR CATÓLICA DE SANTA MARÍA DE AREQUIPA AREQUIPA
ESCUELA PROFESIONAL PROFESIONAL DE INGENIERÍA MECANICA, MECANICA, MECANICA MECANICA ELECTRICA Y MECATRONICA CÓDIGO: ASIGNATURA:
GUÍA DE LABORATORIO LABORATORIO NRO MICROCONTROLADORES Y MICROPROCESADORES
SEGUNDA FASE: RECURSOS INTERNOS DE UN MICROCONTROL.
Docente(s): Ing. Sergio Mes Mestas tas Ramos.
COMUNICACIÓN CON TECLADO MATRICIAL Fecha:
I.
OBJETIVO
Aprender a manejar un teclado matricial 4x4 a través de los E/S digitales.
Emplear un teclado y una pantalla LCD con Arduino.
Conocer las ventajas del protocolo I2C.
Manejar correctamente correctamente un teclado matricial 4x4 con comunicación I2C.
II. MARCO TEORICO: 2.1 TECLADO MATRICIAL Un teclado es una colección de pulsadores, donde cada pulsador tiene asignado un símbolo o una función determinada. Ya conocemos como leer pulsadores, pero si conectáramos cada tecla a un pin digital de nuestro Arduino, pronto estaríamos en apuros por la cantidad de pines que se necesitarían. Por ejemplo el teclado del computador tiene un promedio de 106 teclas, imaginemos la cantidad de pines necesarios, por tanto es necesario otra solución para poder manejarlo. Esta solución pasa por disponer los pulsadores en arreglos de filas y columnas, con lo que reducimos el número de pines necesarios.
Lab. de Microcontroladores y Microprocesadores
2017
Para saber que tecla se ha pulsado, bastará con poner tensión en las filas de forma secuencial y luego leer las columnas para ver cuál de ellas t iene HIGH. Los teclados matriciales usan una combinación de filas y columnas para conocer el estado de los pulsadores. Cada tecla es un pulsador conectado a una fila y a una columna. Cuando se pulsa una de las teclas, se cierra una conexión única entre una fila y una columna. Por ejemplo, ponemos HIGH en la primera fila (hilo 8 en el diagrama mostrado) y después leemos sucesivamente los hilos correspondientes a las columnas (hilos 4, 3, 2,1). Si ninguno está en HIGH es que no se ha pulsado ninguna tecla de la primera fila. Pasamos a la segunda fila (hilo 7) y ponemos HIGH, si al leer los hilos 4, 3, 2,1 encontramos que el hilo 1 está en HIGH, es que se ha pulsado la tecla correspondiente a la “B”.
Por tanto, para leer un teclado matricial de 4×4 necesitamos 8 hilos en lugar de 16.
2.2 COMUNICACIÓN I2C En 1980 Philips (Fabricante de productos electrónicos) propuso una norma de comunicación entre los diferentes componentes de un sistema electrónico. Así nace I2C como una norma de comunicación digital entre circuitos integrados (Inter Integrated Circuits) que especifica la velocidad, niveles de tensión, y el protocolo a seguir para conseguir esa comunicación y la hizo abierta. Poco tiempo paso para que esta norma se tomara como un estándar. Las especificaciones han ido mejorando con los años, pero la idea básica sigue siendo la misma: Protocolo de dos hilos: uno para transmitir los datos, SDA y otro, el reloj asíncrono que indica cuando leer los datos SCL. Más GND y 5V (cuando se requiera). Cada dispositivo conectado al bus I2C tiene su dirección exclusiva, de 7 bits, (Por tanto podemos conectar 2 7 = 128, dispositivos). Uno de los componentes debe actuar como master, es decir controla el reloj. No se requiere una velocidad de reloj estricta, ya que el master es quien controla el Clock.
Lab. de Microcontroladores y Microprocesadores
2017
Es multi master, lo que significa que el master puede cambiar, pero solo uno puede estar activo a la vez, y proporciona un protocolo de arbitraje y detección de colisiones.
Este bus normalmente se llama I 2C, pero también se le conoce como IIC, I2C o TWI (Two Wire Interface, o interface de 2 hilos), pero siempre es lo mismo.
Todos los componentes se conecten en paralelo a las dos líneas del Bus, SDA y SCL. Deben notar que también que hay unas resistencias de Pullup conectadas a SDA y SCL, son necesarias, ya que el bus es activo bajo (Esto es, la señal activa es un 0, no un 1. Pero tranquilo, que esto no nos afecta) Al conectar algún componente al busI2C, es imprescindible que leas el manual para saber si los pullups los tienes que poner tú, o vienen puestos en el componente.
III.
MATERIAL Y EQUIPO:
Computador. Placa Arduino (Uno, Leonardo, Mega, Nano, etc). Teclado matricial de 4x4. Pantalla LCD. Multímetro. Componentes varios. Software Proteus.
Lab. de Microcontroladores y Microprocesadores
2017
IV. PROCEDIMIENTO Midiendo la temperatura 1. Conecte el teclado matricial al Arduino como se indica en el diagrama.
2. Verifique la existencia de la librería KeyPad, de lo contrario puede descargarla del mismo Arduino IDE. (También la puede encontrar en alguna otra dirección). 3. Escriba el siguiente código. #include const byte Filas = 4; const byte Cols = 4; byte Pins_Filas[] = { 9, 8, 7, 6}; byte Pins_Cols[] = { 5, 4, 3, 2}; char Teclas [ Filas ][ Cols ] = { {'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', '9', 'C'}, {'*', '0', '#', 'D'} }; Keypad Teclado = Keypad(makeKeymap(Teclas), Pins_Filas, Pins_Cols, Filas, Cols); void setup() { Serial.begin(9600) ; } void loop() { char tecla = Teclado.getKey() ; if (tecla != 0) Serial.println(tecla); }
Nota. Si utiliza los pines 0 y1 puede ser que no se lea la última columna, esto debido a que se emplean los pines 0 y 1 correspondiente a RXD y TXD, esto debido a que el programa emplea el monitor serial (comunicación serial). Puede cambiar estos pines a otros pines digitales disponibles. 4. Compile y suba el programa al Arduino.
Lab. de Microcontroladores y Microprocesadores
2017
5. Abre el monitor serial, presione cualquier tecla y observe la salida del monitor serial. 6. Comente cada línea de programa 7. Modifique el programa para que el sistema reciba un código de 1 tecla y si es la clave correcta deberá mostrarlo en el monitor serial. En caso contrario deberá también indicarlo con el mensaje correspondiente. 8. Modifique el programa anterior para que la clave ingresada sea de dos dígitos.
4.2 Teclado y LCD. 9. Escriba el siguiente código en el Arduino IDE. #include #include const byte filasKeypad = 4; const byte columnasKeypad = 4; char keys[filasKeypad][columnasKeypad] = { {'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', '9', 'C'}, {'*', '0', '#', 'D'} }; char Data[16]; byte data_count = 0; byte filasPinsKeypad[filasKeypad] = {8, 9, 10, 11}; byte columnasPinsKeypad[columnasKeypad] = {12, 13, 14, 15}; Keypad keypad = Keypad( makeKeymap(keys), filasPinsKeypad, columnasPinsKeypad, filasKeypad, columnasKeypad ); LiquidCrystal lcd(7, 6, 5, 4, 3, 2); void setup() { lcd.begin(16, 2); lcd.print("Teclea algo..."); } void loop() { char key = keypad.getKey(); if(data_count>16){ data_count = 0; } if(key){ Data[data_count] = key; lcd.setCursor(data_count, 1); lcd.print(Data[data_count]); data_count++; } }
10. Conecte el LCD y el Teclado según lo indicado por el programa. 11. Dibuje el circuito esquemático. 12. Compile, sube el programa e indique que es lo que realiza. 13. Modifique el programa para que el teclado solo se habilite cuando un interruptor lo permita, caso contrario el programa deberá ignorar la pulsación de tecla alguna.
Lab. de Microcontroladores y Microprocesadores
2017
V. CUESTIONARIO FINAL 1. Explique el contenido de la librería KeyPad. 2. Explique el contenido de la librería Wire. 3. Se pueden usar entradas analógicas como entradas digitales. De ser cierto indique cuales serían. 4. Como trabaja una pantalla LCD I2C. 5. Dibuje el esquemático de cómo podríamos comunicar dos Arduinos.