{"id":908,"date":"2012-01-24T21:04:06","date_gmt":"2012-01-24T20:04:06","guid":{"rendered":"http:\/\/electronicapractica.crearblog.com\/?p=908"},"modified":"2019-06-13T19:37:58","modified_gmt":"2019-06-13T17:37:58","slug":"modulo-serie-para-lcd-paralelo","status":"publish","type":"post","link":"https:\/\/www.diarioelectronicohoy.com\/blog\/modulo-serie-para-lcd-paralelo","title":{"rendered":"M\u00f3dulo serie para LCD paralelo"},"content":{"rendered":"<p><a name=\"inici\"><\/a><\/p>\n<h2><span style=\"color: #000080;\">Prologo.<\/span><\/h2>\n<p style=\"text-align: justify;\">Este documento es como una introducci\u00f3n a los LCD&#8217;s en este sitio, voy a intentar detallar en lo posible algunos ejemplos que sirvan de punto de partida y aprendizaje, que no innovador. Como se sabe, se puede encontrar gran variedad de temas en la red que, tratan de los LCD&#8217;s.<\/p>\n<p style=\"text-align: justify;\">En el apartado de pantallas de cristal l\u00edquido LCD, debemos distinguir dos grandes grupos, por un lado las pantallas alfanum\u00e9ricas y por otro, las pantallas gr\u00e1ficas. Dejare para otro momentos las gr\u00e1ficas, en este caso vamos a abordar las pantallas LCD alfanum\u00e9ricas. En este apartado existen las LCD dedicadas (en ingl\u00e9s llamadas &#8216;custom&#8217;) y las que se denominan alfanum\u00e9ricas, \u00e9stos son los m\u00e1s comunes que, se encuentran en los puntos de venta. Su tama\u00f1o se mide normalmente por el n\u00famero de columnas y filas de caracteres en la pantalla. Por ejemplo, los tres tipos de LCD en tama\u00f1o de 8 x 2, 16 \u00d7 2 o 20 \u00d7 4 caracteres.<\/p>\n<p style=\"text-align: justify;\">El lector debe saber que la mayor\u00eda de los LCD actuales, llevan el controlador HD44780 de Hitachi. Dicho controlador puede ser configurado para manejar un display de cristal l\u00edquido de matriz de puntos la ayuda de un microprocesador de 4 u 8 bits, en este caso me referir\u00e9 al Arduino. A\u00f1adir que, dispone de un generador de caracteres en RAM de 8 fuentes de caracteres (5&#215;8 puntos) y 4 fuentes de caracteres (5&#215;10 puntos).<!--more--><\/p>\n<p style=\"text-align: justify;\">Para manejar bien el display, en lugar de la librer\u00eda est\u00e1ndar del SDK de Arduino, utilizaremos la <a href=\"https:\/\/bitbucket.org\/fmalpartida\/new-liquidcrystal\/downloads\" target=\"_blank\" rel=\"noopener noreferrer\">\u00abNueva librer\u00eda LiquidCrystal\u00bb<\/a> que, tan amablemente ha actualizado <strong>Francisco Malpartida<\/strong>, al que agradecemos el tiempo dedicado. Tenemos que tener en cuenta que el controlador HD44780, nos muestra los caracteres, en una matriz de puntos. As\u00ed que, nada impedir\u00e1 que el usuario, pueda dibujar casi, cualquier cosa sobre ella, aunque no est\u00e1 pensado para eso, ya que no dispone de comandos para manejar pixeles simples, sino, caracteres alfanum\u00e9ricos.<\/p>\n<p><a name=\"inici\"><\/a><\/p>\n<h2><span style=\"color: #000080;\">Displays alfanum\u00e9ricos.<\/span><\/h2>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2012\/01\/key-pad-3x4b.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-medium wp-image-999\" title=\"key pad 3x4b\" src=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2012\/01\/key-pad-3x4b-238x300.jpg\" alt=\"\" width=\"238\" height=\"300\" srcset=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2012\/01\/key-pad-3x4b-238x300.jpg 238w, https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2012\/01\/key-pad-3x4b.jpg 340w\" sizes=\"auto, (max-width: 238px) 100vw, 238px\" \/><\/a>Son muchas las p\u00e1ginas que circulan por la red que hablan de los LCD y no es ya posible descubrir nada nuevo en este lugar, sin embargo dir\u00e9 que con la bajada de precios de estos dispositivos, tanto el profesional como el aficionado, ahora, pueden utilizar los LCD en sus proyectos y sus aficiones. Se abre un amplio campo de aplicaci\u00f3n, que ha puesto en sus manos un art\u00edculo que es vistoso, sencillo y a la vez llamativo. Este es mi reci\u00e9n adquirido LCD.<\/p>\n<p style=\"text-align: justify;\">Actualmente, la mayor\u00eda de las pantallas LCD tienen alg\u00fan tipo de luz de fondo, sin embargo, puede encontrarse con algunos modelos, en gran medida, por el bajo precio que, no la tienen. Los colores del car\u00e1cter, fondo y luz de fondo puede variar.<\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2012\/01\/pcf8574.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-medium wp-image-1000\" title=\"pcf8574\" src=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2012\/01\/pcf8574-300x199.jpg\" alt=\"\" width=\"300\" height=\"199\" srcset=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2012\/01\/pcf8574-300x199.jpg 300w, https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2012\/01\/pcf8574.jpg 450w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a>La interconexi\u00f3n de estas pantallas, con la placa Arduino, resulta muy f\u00e1cil y hay varias maneras de hacerlo. Este tipo de interfaz puede incluir un paralelo de cuatro u ocho bits, serie, tres hilos, I2C y las interfaces SPI.<\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2012\/01\/resistencia-de-10-k.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-full wp-image-1001\" title=\"resistencia de 10 k\" src=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2012\/01\/resistencia-de-10-k.jpg\" alt=\"\" width=\"220\" height=\"98\" \/><\/a>La pantalla LCD, se puede controlar con un de bus de datos de 4 u 8 bits (pin D4 &#8211; D7) y 3 l\u00edneas de estado (RS, E, R\/W). Seg\u00fan consta en la hoja de datos del fabricante, el ancho del bus de datos se puede seleccionar durante la inicializaci\u00f3n de la pantalla por el microcontrolador. Es posible, para ahorrar unos cuantos pines de E\/S, en el control de pantalla con s\u00f3lo 7 pines E\/S. En el modo de 4 bits, cada car\u00e1cter necesita dos ciclos de reloj, por lo que la pantalla, es un poco m\u00e1s lenta que en el modo de 8 bits. Pero en la mayor\u00eda de circunstancias esto, no es relevante.<\/p>\n<p style=\"text-align: center;\"><a href=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2012\/01\/LED-verde.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-thumbnail wp-image-1002\" title=\"LED verde\" src=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2012\/01\/LED-verde-150x150.jpg\" alt=\"\" width=\"150\" height=\"150\" \/><\/a><a href=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2012\/01\/LED-rojo.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-thumbnail wp-image-1003\" title=\"LED rojo\" src=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2012\/01\/LED-rojo-150x150.jpg\" alt=\"\" width=\"150\" height=\"150\" \/><\/a><\/p>\n<p style=\"text-align: justify;\">De modo que, con Arduino y la nueva librer\u00eda (<a href=\"https:\/\/bitbucket.org\/fmalpartida\/new-liquidcrystal\/downloads\">LiquidCrystal<\/a>) podremos controlar de forma muy f\u00e1cil, ese tipo de pantallas. Como siempre, se necesitan al menos 6 pines de Arduino, para controlar una sola pantalla y una vez m\u00e1s, r\u00e1pidamente nos quedamos sin pines.<\/p>\n<h2><span style=\"color: #000080;\"><a href=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2012\/01\/switch-6-mm.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-full wp-image-1005\" title=\"Use ~EVQ-PAC05R, EVQ-PAD05R, EVQ-PAE05R, EVQ-PAG05R~LEGS\" src=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2012\/01\/switch-6-mm.jpg\" alt=\"\" width=\"100\" height=\"100\" \/><\/a><a href=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2012\/01\/cables.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-thumbnail wp-image-1006\" title=\"cables\" src=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2012\/01\/cables-150x150.jpg\" alt=\"\" width=\"150\" height=\"150\" \/><\/a>Interface I2C para LCD.<\/span><\/h2>\n<p style=\"text-align: justify;\">En el art\u00edculo (<a href=\"http:\/\/www.hispavila.com\/3ds\/atmega\/clavenum.html\" target=\"_blank\" rel=\"noopener noreferrer\">Teclado con LCD<\/a>), ya hice referencia a la opci\u00f3n de utilizar el I2C bus. Este es el momento, de hacer una lectura a la descripci\u00f3n de c\u00f3mo funciona el I2C Bus. Para aplicar y controlar en una pantalla LCD paralelo, con el bus I2C. Si usted no est\u00e1 familiarizado con el concepto del I2C Bus, le recomiendo la lectura del art\u00edculo <a href=\"http:\/\/www.hispavila.com\/3ds\/atmega\/intro_i2c.html\" target=\"_blank\" rel=\"noopener noreferrer\">Introducci\u00f3n al I\u00b2C bus<\/a>.<\/p>\n<p style=\"text-align: justify;\">Para ahorrar pines digitales, la idea es, conectar el mayor n\u00famero de pines como sea necesario del PCF8574 en un bus I2C y su control, con la se\u00f1al anal\u00f3gica de los pines 4 y 5 de Arduino, mediante la biblioteca original <strong>Wire<\/strong>. Esta librer\u00eda, le permite comunicarse con dispositivos I2C \/ TWI. En la mayor\u00eda de las placas Arduino, la SDA (l\u00ednea de datos) est\u00e1 en el pin anal\u00f3gico 4 y la SCL (l\u00ednea de reloj) est\u00e1 en el pin anal\u00f3gico 5. En Arduino Mega, la SDA esta en el pin digital 20 y la SCL en el 21.<\/p>\n<p style=\"text-align: justify;\"><strong>Nota.<\/strong> <em>Para recordar con facilidad, asocie SD<strong>A<\/strong> con el <strong>4<\/strong>, es decir SDA = pin4, el otro pin (pin5) se corresponde con SCL.<\/em><\/p>\n<p style=\"text-align: justify;\">El chip (<a href=\"http:\/\/www.datasheetcatalog.net\/es\/datasheets_pdf\/P\/C\/F\/8\/PCF8574.shtml\">PCF8574<\/a>), como ya se ha dicho, implementa un I2C en modo esclavo y ofrece, ocho entradas\/salidas independientes. Por lo tanto, se puede f\u00e1cilmente utilizar para \u00abagregar\u00bb 8 pines digitales a la placa Arduino. Recordar que, el circuito integrado, dispone de 3 pines para elegir su direcci\u00f3n de esclavo. Por lo que, se pueden conectar 8 unidades PCF8574 en el mismo bus, logrando as\u00ed, obtener 64 pines extra. Y lo que es m\u00e1s, considerando la versi\u00f3n PCF8574A, con exactamente las mismas especificaciones, salvo que las direcciones se generan en un rango diferente. Lo que permite a\u00f1adir 64 pines digitales m\u00e1s. \u00bfSe imagina, un Arduino con 128 pines digitales?<\/p>\n<p style=\"margin-top: 6px; margin-right: 5px; text-align: right; margin-bottom: -5px;\" align=\"right\"><a href=\"#inici\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright\" src=\"http:\/\/s3.subirimagenes.com:81\/privadas\/previo\/thump_1251680uparrowsmall.gif\" alt=\"\" width=\"25\" height=\"19\" \/><\/a><\/p>\n<h2><span style=\"color: #000080;\">El PCF8574A.<\/span><\/h2>\n<p style=\"text-align: justify;\">Es muy importante obtener cierto conocimiento de c\u00f3mo se direcciona el llamado expansor de puertos, por lo que, vamos a repasar el contenido de las <a href=\"http:\/\/www.hispavila.com\/3ds\/atmega\/displaylcd_datos\/pcf8574_esp.pdf\" target=\"_blank\" rel=\"noopener noreferrer\">hojas de datos del PCF8574<\/a> en espa\u00f1ol. En la p\u00e1gina 5 dice, \u00abCada una de las ocho E\/S del PCF8574A, pueden ser utilizadas independientemente por separado, como entrada o salida\u00bb, este es un dato a tener muy en cuenta, ya que esto significa que con \u00e9l, disponemos de 8 nuevos pines en nuestro Arduino. A continuaci\u00f3n, vemos un cuadro resumido, de la funcionalidad de los pines del PCF8574.<\/p>\n<pre style=\"color: #3333cc; font-style: italic;\">D0-D7 Datos bidireccionales. RS Seleccionar datos o registro de instrucciones. \r\nLO Instrucci\u00f3n registro, si escribe, bandera de ocupado y cuando lee contador de direcciones. \r\nHI Registrar datos para leer y escribir contenido de la pantalla. \r\nR\/W Seleccionar la direcci\u00f3n de datos, es decir, leer o escribir. \r\nHI Lee en el registro seleccionado. LO Escribe en el registro seleccionado. \r\nE Este pin se utiliza por el reloj de transferencia de datos. \r\nLO\u2192HI Si la lectura del estado de RS y la l\u00ednea R\/W son altas, se asume la escritura del estado de las l\u00edneas de datos. \r\nLO\u2192HI Si la lectura de datos de las l\u00edneas de datos es correcta hasta que se produce esta transici\u00f3n VCC Suministro, a menudo 5V GND Tierra VEE Contraste. A menudo es controlada por un potenci\u00f3metro entre VCC y GND con su pin central conectado a VEE.\r\n<strong> Nota:<\/strong> Tambi\u00e9n hay pantallas que necesitan una tensi\u00f3n negativa de contraste en el pin3.<\/pre>\n<p style=\"text-align: justify; margin-top: 6px;\">En la tabla de abajo, se hace referencia a las direcciones que permiten los pines A0 a A2, para el PCF8574, podemos ver que, al poner los tres pines a BAJO, se direcciona a partir de b0100 0000 (0x20h). Una vez m\u00e1s, hay que tener en cuenta que, para el PCF8574A, esta primera direcci\u00f3n corresponde a partir de b0111 0000 (0x38h).<\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2012\/01\/tabla-de-direcciones.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1008\" title=\"tabla de direcciones\" src=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2012\/01\/tabla-de-direcciones.jpg\" alt=\"\" width=\"377\" height=\"194\" \/><\/a>En resumen, dependiendo de los valores asignados a los tres pines A0, A1 y A2, permite que utilicemos hasta 8 dispositivos PCF8574, para controlar un LCD, un teclado u otro dispositivo con E\/S. Con los tres a nivel 0, estaremos dialogando con el primero de los ocho. Ah!, que s\u00f3lo utilizamos uno, entonces, ese es, con el que nos comunicamos. Aclaradas las dudas?, sigamos con el esquem\u00e1tico.<\/p>\n<p style=\"text-align: justify;\"><strong>NOTA: <\/strong>Tener presente que, los fabricantes producen dos variantes de este IC: PCF8574 y PCF8574A. La \u00fanica diferencia es la direcci\u00f3n de llamada a I2C!. Debido a que dispongo de un PCF8574A (0x38h), a \u00e9ste es al que me referir\u00e9 en estas p\u00e1ginas, si no se dice lo contrario.<\/p>\n<pre><span style=\"color: #3333cc;\"> ID .... .....Addr. ....... PIN's \r\nPCF8574    b0100000<span style=\"color: #993300;\">0<\/span> 0x20h A2A1A0 \r\nPCF8574A   b0111000<span style=\"color: #993300;\">0<\/span> 0x38h A2A1A0 <\/span><\/pre>\n<p style=\"text-align: justify;\">En la tabla anterior, el 0 (cero) de color rojo, lo pone la propia orden (lectura\/escritura), por ese motivo, se dice que, la direcci\u00f3n real es 0x70h en el caso de PCF8574A. Es l\u00f3gico, al desplazar un puesto a la izquierda un n\u00famero binario, multiplicas por 2.<\/p>\n<p style=\"text-align: justify;\">Hay gente que, est\u00e1 teniendo conclusiones err\u00f3neas en su PCB (de compra), con las hoja de datos PCF8574 y la lista de direcciones. Confieso que, si no est\u00e1s familiarizado con los hexadecimales, no es nada sencillo entender el modo de direccionamiento de estos dispositivos que tanto nos pueden ayudar.<\/p>\n<p style=\"text-align: justify;\">Voy a tratar de aclarar un poco este punto. Quiz\u00e1s la disposici\u00f3n de las patillas, al\u00a0 hacer los c\u00e1lculos, provoque los habituales errores (t\u00e9ngase en cuenta este detalle). As\u00ed que, he creado una tabla de valores reales, con los que se puede realizar los direccionamientos adecuados. Para utilizar el PCF8574 en sus dos versiones, en la tabla siguiente:<\/p>\n<pre><span style=\"color: #3333cc;\"> Para el PCF8574A. ... Para el PCF8574. \r\npin3  pin2   pin1 PCF8574A | pin3  pin2  pin1 PCF8574 \r\n A2    A1     A0  Hex  Dec |  A2    A1    A0   Hex  Dec \r\n  L     L      L .0x38  56 |   L     L    L .  0x20  32 \r\n  L     L      H .0x39  57 |   L     L    H .  0x21  33 \r\n  L     H      L .0x40  64 |   L     H    L .  0x22  34 \r\n  L     H      H .0x4A  74 |   L     H    H .  0x23  35 \r\n  H     L      L .0x4B  75 |   H     L    L .  0x24  36 \r\n  H     L      H .0x4C  76 |   H     L    H .  0x25  37 \r\n  H     H      L .0x4D  77 |   H     H    L .  0x26  38 \r\n  H     H      H .0x4E  78 |   H     H    H .  0x27  39<\/span><\/pre>\n<p style=\"text-align: justify;\">Espero que el tema del direccionamiento, ahora, est\u00e1 m\u00e1s claro. Sin embargo, en las pr\u00e1cticas que se muestran aqu\u00ed, como ya se ha dicho, se han utilizado las direcciones correspondientes al PCF8574A.<\/p>\n<p style=\"margin-top: 6px; margin-right: 5px; text-align: right; margin-bottom: -5px;\" align=\"right\"><a href=\"#inici\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright\" src=\"http:\/\/s3.subirimagenes.com:81\/privadas\/previo\/thump_1251680uparrowsmall.gif\" alt=\"\" width=\"25\" height=\"19\" \/><\/a><\/p>\n<h2><span style=\"color: #000080;\">M\u00f3dulo para LCD paralelo.<\/span><\/h2>\n<p style=\"text-align: justify;\">En definitiva, ampliar la capacidad de puertos de Arduino con la ayuda de un circuito integrado PCF8574, puede reducir de 10 a 2 la cantidad de pines necesarios para manejar un dispositivo como el LCD, un teclado u otro dispositivo similar. Existe una versi\u00f3n de pantallas LCD que ya viene con las entradas serie, en ese caso, no hay m\u00e1s que conectarlas y aplicar un c\u00f3digo que suele traer como ejemplo en las especificaciones y sin m\u00e1s problemas se pone en servicio.<\/p>\n<p style=\"text-align: justify;\">Si se da el caso que, la pantalla que disponemos es paralelo, qu\u00e9 podemos hacer. Esto, no debe ser un problema para utilizar el bus I2C, claro, nos vemos en la necesidad de trazar un circuito para incorporar este dispositivo en nuestro proyecto. Por lo que, el esquema electr\u00f3nico que utilizaremos es muy sencillo y se muestra a continuaci\u00f3n.<\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/www.diarioelectronicohoy.com\/blog\/modulo-serie-para-lcd-paralelo\/esquema_lcdpcf8574\" rel=\"attachment wp-att-2726\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2726\" src=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2012\/01\/esquema_lcdpcf8574.gif\" alt=\"esquema_lcdpcf8574\" width=\"705\" height=\"415\" \/><\/a><\/p>\n<div><span style=\"text-align: justify;\">Se ha dotado de dos diodos, uno es un LED con su resistencia de carga, para que indique cualquier evento que nos interese (lo que demostrar\u00e1 que es totalmente independiente) y el otro diodo un 1N4007, con el cual reduciremos la tensi\u00f3n de alimentaci\u00f3n en 7mV, para la iluminaci\u00f3n de fondo del LCD, un potenci\u00f3metro para el contraste y eso es todo.<\/span><\/div>\n<h3><span style=\"color: #000080;\">Utilidad con el 74CHT174.<\/span><\/h3>\n<p style=\"text-align: justify;\">Por cierto, si no dispone del PCF8574P\/AP, puede utilizar de modo similar, aunque no se trate de un Bus I2C, el circuito de 16 patillas, <a href=\"http:\/\/pdf1.alldatasheet.com\/datasheet-pdf\/view\/15553\/PHILIPS\/74HCT174.html\" target=\"_blank\" rel=\"noopener noreferrer\">74HCT174<\/a> CMOS, es un circuito integrado con seis Flip-Flop tipo D, con entradas de reloj (CP) y reset (MR) com\u00fan, este es su s\u00edmbolo.<\/p>\n<div><span style=\"text-align: justify;\"><a href=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2012\/01\/74HCT174-CMOS.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1011\" title=\"74HCT174 CMOS\" src=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2012\/01\/74HCT174-CMOS.jpg\" alt=\"\" width=\"380\" height=\"184\" srcset=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2012\/01\/74HCT174-CMOS.jpg 380w, https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2012\/01\/74HCT174-CMOS-300x145.jpg 300w\" sizes=\"auto, (max-width: 380px) 100vw, 380px\" \/><\/a>Empleando el esquema que se muestra a continuaci\u00f3n. En el esquema, se observa que las patillas Q1-D2, Q2-D3, etc., esto tiene es necesario debido a que una es la salida Q1 (del flip-flop) y la D2 es la entrada del flip-flop siguiente, para una mejor comprensi\u00f3n de los descrito, se recomienda ver las hojas de datos del 74HCT174.<\/span><\/div>\n<div><span style=\"text-align: justify;\">El esquema es muy sencillo y utiliza muy pocos componentes, usted puede utilizar cualquiera de ellos, aunque, se recomienda el uso del circuito especializado PCF8574\/A.<\/span><\/div>\n<h2><span style=\"color: #000080;\">El PCB.<\/span><\/h2>\n<p style=\"text-align: justify;\">Cuando uno se queda sin puertos de E\/S, tiene que recurrir a estrategias de \u00ab<em>compensaci\u00f3n de faltas<\/em>\u00bb y como ya hemos dicho, se hace necesario el uso de circuitos integrados que cumplan con esos requisitos. Hemos visto que el PCF8574, cumple perfectamente, sin embargo, esta circunstancia puede hacerse necesaria en otras ocasiones y estar\u00eda bien disponer de un PCB, que de forma unitaria, nos pueda servir en distintos proyectos. Este es el caso del PCB de una sola cara, mostrado a continuaci\u00f3n.<\/p>\n<div>\n<p><span style=\"text-align: justify;\"><a href=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2012\/01\/PCB-de-una-sola-cara.jpg\" target=\"_blank\" rel=\"noopener noreferrer\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter  wp-image-1014\" title=\"PCB de una sola cara\" src=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2012\/01\/PCB-de-una-sola-cara.jpg\" alt=\"\" width=\"461\" height=\"263\" \/><\/a><a href=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2012\/01\/pcf8574_pcb_inv.jpg\" target=\"_blank\" rel=\"noopener noreferrer\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter  wp-image-1958\" title=\"pcf8574_pcb_inv\" src=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2012\/01\/pcf8574_pcb_inv-300x105.jpg\" alt=\"\" width=\"375\" height=\"141\" \/><\/a><\/span><\/p>\n<p>Empleando el esquema que se muestra a continuaci\u00f3n. En el esquema, se observa que las patillas Q1-D2, Q2-D3, etc., esto tiene es necesario debido a que una es la salida Q1 (del flip-flop) y la D2 es la entrada del flip-flop siguiente, para una mejor comprensi\u00f3n de los descrito, se recomienda ver las hojas de datos del 74HCT174.<\/p>\n<\/div>\n<div><span style=\"text-align: justify;\"><a href=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2012\/01\/esquema-74HCT174.jpg\" target=\"_blank\" rel=\"noopener noreferrer\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1017\" title=\"esquema 74HCT174\" src=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2012\/01\/esquema-74HCT174.jpg\" alt=\"\" width=\"480\" height=\"279\" srcset=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2012\/01\/esquema-74HCT174.jpg 480w, https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2012\/01\/esquema-74HCT174-300x174.jpg 300w\" sizes=\"auto, (max-width: 480px) 100vw, 480px\" \/><\/a>El esquema es muy sencillo y utiliza muy pocos componentes, usted puede utilizar cualquiera de ellos, aunque, se recomienda el uso del circuito especializado PCF8574\/A.<\/span><\/div>\n<p style=\"margin-top: 6px; margin-right: 5px; text-align: right; margin-bottom: -5px;\" align=\"right\"><a href=\"#inici\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright\" src=\"http:\/\/s3.subirimagenes.com:81\/privadas\/previo\/thump_1251680uparrowsmall.gif\" alt=\"\" width=\"25\" height=\"19\" \/><\/a><\/p>\n<h2><span style=\"color: #000080;\">El PCB.<\/span><\/h2>\n<p style=\"text-align: justify;\">Cuando uno se queda sin puertos de E\/S, tiene que recurrir a estrategias de \u00ab<em>compensaci\u00f3n de faltas<\/em>\u00bb y como ya hemos dicho, se hace necesario el uso de circuitos integrados que cumplan con esos requisitos. Hemos visto que el PCF8574, cumple perfectamente, sin embargo, esta circunstancia puede hacerse necesaria en otras ocasiones y estar\u00eda bien disponer de un PCB, que de forma unitaria, nos pueda servir en distintos proyectos. Este es el caso del PCB de una sola cara, mostrado a continuaci\u00f3n.<\/p>\n<pre><span style=\"color: #3333cc;\">\/\/ \r\n\/\/ display01.pde - keypad con LCD y expansor PCF8574A \r\n\/\/ basado en un programa de la red. \r\n\/* Usando el actual ejemplo de hardware, se puede controlar un LCD \r\nmediante el circuito PCF8574A.De este modo se utilizan s\u00f3lo dos \r\npines de Arduino para manejar el LCD. Nuestro objetivo con este \r\nejemplo es muy simple. \r\n\r\nEl sistema espera para obtener un PIN que se guarda previamente. \r\nSi el PIN es correcto, hacer algo. Si el PIN es incorrecto, hacer \r\notra cosa. \r\nEste ejemplo es para darle un concepto y un marco para construir \r\nideas propias. \r\n\r\n19.10.2011 funciona bien. \r\n*\/ \r\n\r\n#include &lt;Wire.h&gt; \r\n#include &lt;LiquidCrystal_I2C.h&gt; \r\n\r\nLiquidCrystal_I2C lcd(0x38); \/\/ Set the LCD I2C address \r\n\r\n#define BACKLIGHT_PIN 13 \r\n\r\nvoid setup() \r\n{ \r\n \/\/ Switch on the backlight \r\n pinMode (BACKLIGHT_PIN, OUTPUT); \r\n digitalWrite (BACKLIGHT_PIN, HIGH); \r\n lcd.begin(20,4); \/\/ inicializa el LCD \r\n lcd.clear (); \/\/ lo mismo que: home(); \r\n lcd.print(\" Mensaje\"); \r\n lcd.setCursor ( 1, 1 ); \/\/ va a la siguiente l\u00ednea \r\n lcd.print (\" Hola, ARDUINO \"); \r\n lcd.setCursor ( 2, 2 ); \r\n lcd.print (\"Programa con I2C\"); \r\n lcd.setCursor ( 3, 3 ); \r\n lcd.print (\" Que pasada... \"); \r\n delay ( 1000 ); \r\n} \r\nvoid loop() \r\n{ \r\n} <\/span><\/pre>\n<p style=\"text-align: justify;\">En esta ocasi\u00f3n, no pasar\u00e9 a describir lo que hace cada rutina, ya que se supone que estamos en una prueba y usamos un c\u00f3digo que ya se ha descrito en muchos sitios.<\/p>\n<p style=\"text-align: justify;\">Despu\u00e9s de probado el c\u00f3digo, se puede decir que funciona bien el primer ensayo del PCB, en principio, esta era la meta del proyecto, sondear la posibilidad de conseguir de forma sencilla un m\u00f3dulo que, nos permita utilizar una pantalla LCD paralelo, de las m\u00e1s t\u00edpicas y convertirla a serie, as\u00ed como un teclado matricial de hasta 4&#215;4 u ocho pulsadores independientes, dotando al m\u00f3dulo de un sistema que nos permitiera manejarlos mediante el bus I2C, reduciendo considerablemente los pines de Arduino a utilizar.<\/p>\n<p style=\"margin-top: 6px; margin-right: 5px; text-align: right; margin-bottom: -5px;\" align=\"right\"><a href=\"#inici\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright\" src=\"http:\/\/s3.subirimagenes.com:81\/privadas\/previo\/thump_1251680uparrowsmall.gif\" alt=\"\" width=\"25\" height=\"19\" \/><\/a><\/p>\n<h2><span style=\"color: #000080;\">Segunda prueba.<\/span><\/h2>\n<p style=\"text-align: justify;\">Esta ser\u00e1 la segunda prueba y esperemos que la definitiva. Es el momento de presentar el c\u00f3digo del programa. Para ello, propongo utilizar un c\u00f3digo que ya sabemos que funciona. Se trata del mismo c\u00f3digo que ya utilic\u00e9 en otra pr\u00e1ctica, en el mencionado art\u00edculo (<a href=\"http:\/\/www.hispavila.com\/3ds\/atmega\/clavenum.html\" target=\"_blank\" rel=\"noopener noreferrer\">teclado con LCD<\/a>). En esta ocasi\u00f3n, he utilizado la comentada librer\u00eda &#8216;<span style=\"color: #0033cc;\"><em>LiquidCrystal_I2C.h<\/em><\/span>&#8216; que permite el uso del PCF8574A.<\/p>\n<p style=\"text-align: justify;\">Naturalmente, si el lector lo prefiere, puede realizar dos m\u00f3dulos, uno para el LCD y el otro para el teclado, esto le dejar\u00e1 libre muchos pines del Arduino, ya que tan s\u00f3lo emplear\u00e1 2 pines, correspondientes a SDA y SCL. Sin embargo, en caso de decidirse por utilizar dos m\u00f3dulos, tenga en cuanta modificar en uno de ellos al menos la direcci\u00f3n de esclavo, para ello, ponga a positivo con una resistencia de 10k, una de las patillas, A0, A1 o A2. Ponga atenci\u00f3n a la <a href=\"#tabla_Referencia\" target=\"_self\" rel=\"noopener noreferrer\">tabla de direccionamiento<\/a> de m\u00e1s arriba.<\/p>\n<pre><span style=\"color: #3333cc;\">\/\/ \r\n\/* keypad Numerico y LCD I2C \r\n\r\nUtilizamos las librerias: [Password.h \u00f7 LiquidCrystal.h \u00f7 Keypad.h] \r\nque puede encontrar en: http:\/\/www.hispavila.com\/3ds\/atmega\/clavenum.html \r\n\r\nUsando el actual ejemplo de hardware se pueden activa algo o desactivar \r\nmediante el teclado - emulando lo que se puede encontrar en algunos \r\nsistemas de alarma y as\u00ed sucesivamente. Nuestro objetivo con este \r\nejemplo es muy simple. Un sistema de espera para obtener un PIN que se\r\nespecifique previamente. Si el PIN es correcto, hacer algo. Si el PIN es incorrecto, hacer otra cosa. Lo que las acciones pueden llegar a hacer. \r\n\r\nCon el proyecto vamos a activar o desactivar una salida digital. \r\nEste ejemplo es para darle un concepto y un marco para adaptar o \r\nconstruir ideas propias. \r\n\r\nUsa 6728 bytes con el IDE v. 00013 \r\n*\/ \r\n\r\n#include &lt;Password.h&gt; \r\n#include \"Keypad.h\" \r\n#include \"Wire.h\" \/\/ para I2C LCD \r\n#include \"LiquidCrystal_I2C.h\" \/\/ para I2C bus LCD modulo LiquidCrystal_I2C lcd(0x38); \/\/ establece direcci\u00f3n LCD seg\u00fan expansor \r\nPassword password = Password( \"1234056\" ); \/\/ puede poner su pasword \r\n\r\nconst byte ROWS = 4; \/\/ cuatro rows \r\nconst byte COLS = 3; \/\/ tres columns \r\nchar keys[ROWS][COLS] = \r\n{ {'1','2','3'}, \r\n{'4','5','6'}, \r\n{'7','8','9'}, \r\n{'*','0',' '} \r\n}; \/\/ Conectar keypad ROW0, ROW1, ROW2 y ROW3 a los pines de Arduino. \r\nbyte rowPins[ROWS] = { 5, 4, 3, 2}; \/\/conecta a los pines row del keypad \r\nbyte colPins[COLS] = { 16, 15, 14}; \/\/conecta a los pines col del keypad \r\nint count=0; \r\nconst int buttonPin = 0; \r\nint buttonState = 0; \r\nint i; \r\n#define ledPin 13 \r\n\r\nKeypad keypad=Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS); \r\n\r\nvoid setup() \u00a0 \r\n{ \r\n pinMode(buttonPin, INPUT); \r\n pinMode(ledPin, OUTPUT); \r\n lcd.begin(20, 4); \r\n digitalWrite(ledPin, LOW); \/\/ pone el LED off \r\n Serial.begin(9600); \r\n keypad.addEventListener(keypadEvent); \/\/a\u00f1ade detector eventos a teclado \r\n keypad.setDebounceTime(250); \r\n lcd.clear(); \/\/Borra el LCD \r\n lcd.setCursor(0,0); \r\n lcd.print(\"Entre secuencia PIN:\"); \r\n lcd.setCursor(2,2); \r\n lcd.print(\"Para terminar #\"); \r\n lcd.setCursor(0,3); \r\n lcd.print(\" Intentelo: \"); \r\n} \r\nvoid loop() \r\n{ \r\n keypad.getKey(); \r\n buttonState = digitalRead(buttonPin); \r\n if (buttonState == HIGH) { } \r\n} \r\n\/\/ atender algunos eventos especiales \r\nvoid keypadEvent(KeypadEvent eKey) { \r\n switch (keypad.getState()) { \r\n case PRESSED: \r\n \/\/ lcd.print(eKey); \/\/ descomentar para ver numeros pulsados o \r\n lcd.print(\"*\"); \/\/ descomentar para ver * x pulso \r\n switch (eKey) { \r\n  case ' ': guessPassword(); \r\n  break; \r\n  default: \r\n  password.append(eKey); \r\n  } \r\n } \r\n} \r\n\r\nvoid guessPassword() { \r\n if (password.evaluate()) { \r\n digitalWrite(ledPin,HIGH); \/\/activa rel de la puerta \r\n delay(500); \r\n digitalWrite(ledPin,LOW); \/\/desactiva rel de la puerta .5 sec \r\n \/\/ secuencia de sonido alto \r\n lcd.clear(); \r\n lcd.setCursor(0,0); \r\n lcd.print(\"PASSWORD VALIDO \"); \/\/ \r\n password.reset(); \/\/resetea password despues de entrada correcta \r\n delay(1000); \r\n lcd.setCursor(0,0); \r\n lcd.print(\"Bienvenido, Sr.\"); \r\n delay(500); \r\n for (int positionCounter = 0; positionCounter &lt; 22; positionCounter++) \r\n  { \/\/ scroll one position right: \r\n  lcd.scrollDisplayRight(); \r\n  delay(150); \/\/ wait a bit: \/\/espera un poco \r\n  } \r\n  delay(500); \/\/ espera 35 segundos antes de volver a inicio \r\n  setup(); \r\n } \r\n else { \r\n i = i++; \r\n digitalWrite(ledPin,LOW); \r\n lcd.clear(); \r\n lcd.print(\"PASSWORD INVALIDO \"); \r\n password.reset(); \/\/resets password after INCORRECT entry \r\n delay(2000); \/\/ tiempo de retardo \r\n lcd.clear(); \r\n lcd.setCursor(0,0); \r\n lcd.print(\"Entre secuencia PIN:\"); \r\n lcd.setCursor(0,3); \r\n lcd.print(\" Intentelo: \"); \r\n} \r\nif (i==3) \r\n{ \r\n \/\/ secuencia de sonido bajo \r\n lcd.setCursor(0,1); \r\n lcd.print(\"Lo siento... \"); \r\n lcd.setCursor(0,2); \r\n lcd.print(\"Intentelo mas tarde\"); \r\n lcd.setCursor(0,3); \r\n lcd.print(\" \"); \r\n delay(35000); \/\/ espera un tiempo antes de seguir \r\n lcd.clear(); \r\n lcd.setCursor(0,0); \r\n lcd.print(\"Entre secuencia PIN:\"); \r\n lcd.setCursor(0,2); \r\n lcd.print(\" Intentelo: \"); \u00a0 \r\n i=0; \r\n } \r\n}<\/span><\/pre>\n<p style=\"text-align: justify;\">Hemos logrado hacer un m\u00f3dulo PCB que nos facilita el uso de un expansor de puertos sencillo de usar como es el PCF8574\/A. Esto adem\u00e1s de una valisa pr\u00e1ctica, nos ha proporcionado un PCB al que podemos dar mucha utilidad en nuestros futuros proyectos con microcontrolador, si bien est\u00e1 pensado para el Arduino, aunque, no lo he probado con otros, cabe esperar que funcione, ya que se trata de usar el bus-I2C y esto no es privativo de un micro concreto.<\/p>\n<p style=\"text-align: justify;\">Las librer\u00edas utilizadas en este art\u00edculo o tutorial, se pueden descargar desde estos enlaces:<\/p>\n<pre>  <a href=\"https:\/\/bitbucket.org\/fmalpartida\/new-liquidcrystal\/downloads\" target=\"_blank\" rel=\"noopener noreferrer\">LiquidCrystal.<\/a>\r\n  <a href=\"http:\/\/arduino.cc\/playground\/uploads\/Code\/Keypad.zip\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Keypad.zip.<\/a>\r\n  <a href=\"http:\/\/www.arduino.cc\/playground\/Code\/Password&amp;anno=2\" target=\"_blank\" rel=\"noopener noreferrer\">Password.<\/a>\r\n\r\n  Si lo prefiere, tambi\u00e9n de <a href=\"http:\/\/www.hispavila.com\/3ds\/atmega\/displaylcd_datos\/keypad[V2].zip\" target=\"_self\" rel=\"noopener noreferrer\">aqu\u00ed<\/a>.<\/pre>\n<p style=\"margin-top: 6px; margin-right: 5px; text-align: right; margin-bottom: -5px;\" align=\"right\"><a href=\"#inici\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright\" src=\"http:\/\/s3.subirimagenes.com:81\/privadas\/previo\/thump_1251680uparrowsmall.gif\" alt=\"\" width=\"25\" height=\"19\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Prologo. Este documento es como una introducci\u00f3n a los LCD&#8217;s en este sitio, voy a intentar detallar en lo posible algunos ejemplos que sirvan de punto de partida y aprendizaje, que no innovador. Como se sabe, se puede encontrar gran variedad de temas en la red que, tratan de los LCD&#8217;s. En el apartado de [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":1001,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"footnotes":""},"categories":[22,15,35],"tags":[72,95,97,120,121,140],"class_list":["post-908","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arduino","category-microcontroladores","category-modulo-serie-para-lcd-paralelo","tag-alfanumerico","tag-keypad","tag-lcd","tag-pcf8574","tag-pcf8574a","tag-teclado-numerico"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.diarioelectronicohoy.com\/blog\/wp-json\/wp\/v2\/posts\/908","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.diarioelectronicohoy.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.diarioelectronicohoy.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.diarioelectronicohoy.com\/blog\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.diarioelectronicohoy.com\/blog\/wp-json\/wp\/v2\/comments?post=908"}],"version-history":[{"count":84,"href":"https:\/\/www.diarioelectronicohoy.com\/blog\/wp-json\/wp\/v2\/posts\/908\/revisions"}],"predecessor-version":[{"id":4832,"href":"https:\/\/www.diarioelectronicohoy.com\/blog\/wp-json\/wp\/v2\/posts\/908\/revisions\/4832"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.diarioelectronicohoy.com\/blog\/wp-json\/wp\/v2\/media\/1001"}],"wp:attachment":[{"href":"https:\/\/www.diarioelectronicohoy.com\/blog\/wp-json\/wp\/v2\/media?parent=908"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.diarioelectronicohoy.com\/blog\/wp-json\/wp\/v2\/categories?post=908"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.diarioelectronicohoy.com\/blog\/wp-json\/wp\/v2\/tags?post=908"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}