Contactos

LCD 1602 I2C no funciona. Conecte la pantalla LCD LCM1602 con I2C a Arduino. Conecte el dispositivo I2C a Arduino

Llegué aquí de buena Tienda Resistor de chip Otro dispositivo para estudiar y usar en los dispositivos útiles. Este dispositivo resultó afilarse para administrar la pantalla LCD que ejecute el controlador HD44780, en modo de 4 bits. Para este propósito, se instala un microcircuito en la placa, que es el convertidor de bus I2C a un puerto paralelo de 8 bits.

La tarifa se divorcia de tal manera que se puede triturar de inmediato con la pantalla LCD. La entrada sirve poder y líneas I2C. La placa inmediatamente instaló las resistencias de pull-up en las líneas SCL y SDA, el potenciómetro para ajustar el contraste y la potencia de la pantalla en sí.

El puente a la derecha enciende / desconecta la luz de fondo. A continuación, armado con un probador se elaboró \u200b\u200bla siguiente placa. Después de estudiar el módulo, fue revelado. P3 Gestiona la luz de fondo. Si se establece el puente, 1 se enciende en la luz de fondo y 0 se apaga. Cuando se retira el puente, la luz de fondo siempre se apaga. A continuación, se decidió complementar la biblioteca AXLIB para trabajar con la I2C Bus (implementación del software) y las funciones para administrar el microcircuito PCF8574. En pocas palabras, cómo funciona el módulo. Para mostrar un byte paralelo, para esto, debe enviar una dirección de microcircuito al bus I2C (es igual a 0x4e. También puede cambiar la dirección al cambiar de saltadores en la placa y cambiar el valor de tres descargas de direcciones más jóvenes), Luego, después de recibir ACK, se envía el byte de datos. Después de que el chip responda con ACK, el byte aparece en el puerto paralelo del chip. Para controlar la pantalla LCD, tomé las funciones de la biblioteca AXLIB y los redídala un poco para trabajar con el bus I2C. #Incluir. #Incluir. #Incluir. #Incluir. #Define agregar 0x4e // Dirección de microcircuito / * LCD Microcircuit RS P0 RW P1 EN P2 D4 P4 D5 P5 D6 P6 D7 P7 en el pie de P3 Conecte la luz de fondo. 1 incluido, 0 de descuento. * / // Salida de datos com | \u003d 0x04; // e una unidad PCF8574_BYTE_OUT (COM, ADD); // Salida de datos Com & \u003d 0xfb; // e en cero PCF8574_BYTE_OUT (COM, ADD); // Salida de datos ) Init nulo (void) (_delay_ms (30); Com (0x30); _delay_us (40); Com (0x30); // Transición al modo de 4 bits _delay_us (40); // demora para ejecutar el comando Com (0x30); // Transición al modo de 4 bits _delay_us (40); // demora para ejecutar el comando Com (0x20); // Transición al modo de 4 bits _delay_us (40); // demora para ejecutar el comando Com (0x20); // Establecer parámetros Com (0x80); // Establecer parámetros Com (0x00); // Apagar la pantalla Com (0x80); // Apagar la pantalla Com (0x00); // limpiar la pantalla Com (0x10); // limpiar la pantalla Com (0x00); Com (0x60); // Instalar el modo de entrada de datos Com (0x00); Com (0xc0); // Encienda la pantalla con el cursor seleccionado ) Void char_out (datos de byte) (Byte Data_H \u003d ((Data y 0xF0) + 0x09); Byte Data_L \u003d ((Data // Transfiriendo más antiguos 4 bits Data_h | \u003d 0x04; PCF8574_byte_out (Data_H, ADD); // Transferencia de senior 4 bits // Transferencia de senior 4 bits // Transferencia de Junior 4 Bit // Transferencia de Junior 4 Bit // Transferencia de Junior 4 Bit ) Nulo str_out ((* str)! \u003d "\\ 0") (char_out (* str); str ++;)) int main (void) (init (); str_out ("epґbet mґp!"); Mientras (1 ) ()) En realidad, ¿qué pasa aquí? Primero conecte las bibliotecas para I2C y para PCF8574. Ya escribí sobre I2C, por lo que se cortará una vez más, pero te diré en PCF8574.H. La biblioteca incluye solo tres funciones.
Byte pcf8574_test (Addte Add) (Byte Preguntar \u003d ACK; ADD & \u003d 0xfe; i2c_start (); pregunte \u003d i2c_send_byte (agregue); i2c_stop (); Preguntar;) Se escribió la primera función para verificar la disponibilidad de un dispositivo en el bus. En principio, se puede utilizar para buscar cualquier dispositivo ubicado en el neumático. La función toma la dirección del dispositivo deseado y si responde, devuelve cero. Si no hay ningún dispositivo con esta dirección en el autobús, luego devolverá la unidad.
Byte pcf8574_byte_out (Byte Ask \u003d ACK; ADD & \u003d 0xfe; i2c_start (); pregunte \u003d i2c_send_byte (agregue); si (! Pregunte) pregunte \u003d i2c_send_byte (datos); i2c_stop (); Preguntar;) Esta característica ya está afilada limpia debajo de este chip. Como argumento, los bytes se transmiten para transferir al neumático y la dirección del microcircuito. La función primero solicitará un chip en la dirección y luego enviará bytes. Si el chip recibió un byte y respondió ACK, la función terminará de trabajar con el microcircuito y volverá a cero como un paquete exitoso de bytes. Un chip en este momento mostrará este byte en su puerto paralelo. De lo contrario, obtenemos unidades de reembolso y reembolso, la transferencia falló.
Byte PCF8574_str_out (byte * Datos, Byte Col, Byte Agregar) (Byte Ask \u003d ACK; ADD & \u003d 0xfe; i2c_start (); pregunte \u003d i2c_send_byte (agregar); para (byte i \u003d 0; i; i Esta característica se crea para el experimento. Acepta un puntero a una matriz de datos de un solo byte, el número de estos bytes y la dirección de microcircuito. En realidad, un intento de transferir todos los datos por una sesión, y no un byte para la sesión. La función funciona, pero por lo tanto para la pantalla LCD y no encajó. Y ahora volvamos al programa principal. Después de conectar las bibliotecas, le recetamos la dirección del chip. A continuación, cree tres funciones por analogía con LCD.H. La diferencia es solo en el principio de transferencia de datos.
Void com (byte com) (com | \u003d 0x08; // P3 por unidad, para no quemar iluminación PCF8574_BYTE_OUT (COM, ADD); // Salida de datos com | \u003d 0x04; // e una unidad PCF8574_BYTE_OUT (COM, ADD); // Salida de datos Com & \u003d 0xfb; // e en cero PCF8574_BYTE_OUT (COM, ADD); // Salida de datos } Esta función transmite solo los comandos de visualización. Desde aquí había una primera línea con un pliegue lógico del comando de 0x08. Este bjaka se necesita debido al hecho de que pasamos por encima de los bytes no directamente al puerto de la pantalla LCD, sino a través de nuestro repetidor. Es decir, si corrimos un byte, y luego debemos retirar solo un bit, luego le dará un designe al byte anterior y lo enviará al puerto nuevamente. Aquí hay tal confusión. La adición de 0x08 es necesaria para la retención permanente de la unidad en la tercera descarga. ¿Recuerdas sobre la luz de fondo? Esa es esta adición y se convierte en la luz de fondo. Después de llamar la función de transferencia de bus en el bus. Está escrito arriba. Luego pasamos por byte en autobús en el microcircuito. A continuación, debe colocarse en una unidad E que en realidad una adición lógica de bytes con 0x04 está activada. Después de cero, E. De esta manera, puede enviar cualquier comando a la pantalla solo pasando el comando en sí mismo como un argumento. Init void (void) (_delay_ms (30); // Pausa después de la fuente de alimentación Com (0x30); // Transición al modo de 4 bits _delay_us (40); // demora para ejecutar el comando Com (0x30); // Transición al modo de 4 bits _delay_us (40); // demora para ejecutar el comando Com (0x30); // Transición al modo de 4 bits _delay_us (40); // demora para ejecutar el comando Com (0x20); // Transición al modo de 4 bits _delay_us (40); // demora para ejecutar el comando Com (0x20); // Establecer parámetros Com (0x80); // Establecer parámetros Com (0x00); // Apagar la pantalla Com (0x80); // Apagar la pantalla Com (0x00); // limpiar la pantalla Com (0x10); // limpiar la pantalla Com (0x00); // Instalar el modo de entrada de datos Com (0x60); // Instalar el modo de entrada de datos Com (0x00); // Encienda la pantalla con el cursor seleccionado Com (0xc0); // Encienda la pantalla con el cursor seleccionado } Esta función solo se dedica a la inicialización de la pantalla. La secuencia de comandos se toma de un Datashet en la pantalla LCD. void char_out (datos de byte) (Byte Data_H \u003d ((Data y 0xF0) + 0x09); Byte Data_L \u003d ((Datos // Transfiriendo Senior 4 bits Data_h | \u003d 0x04; PCF8574_byte_out (Data_H, ADD); // Transferencia de senior 4 bits Data_h & \u003d 0xf9; PCF8574_byte_out (Data_H, ADD); // Transferencia de senior 4 bits PCF8574_BYTE_OUT (DATA_L, ADD); // Transferencia de Junior 4 Bit data_l | \u003d 0x04; PCF8574_BYTE_OUT (DATA_L, ADD); // Transferencia de Junior 4 Bit Data_l & \u003d 0xf9; PCF8574_BYTE_OUT (DATA_L, ADD); // Transferencia de Junior 4 Bit } Esta función transmite datos LCD de datos. Se realiza de la misma manera que los comandos, excepto que la transferencia del byte primero viene primero por el semi-núcleo superior, y luego el más joven. Y el resto es el mismo. Void str_out (byte * str) (mientras ((* str)! \u003d "\\ 0") (char_out (* str); str ++;)) Bueno, esta característica está limpia para transmitir la cadena de visualización. En realidad, no tiene nada que ver con nuestro tema.

Proyecto para atmelstudio 6.2

Alfabetizado 01.08.15 17:11

Se salta la coma. Derecha: "¡Hola, paz!" Y este dispositivo se afilan no solo para HD44780. Las resistencias de apriete se ponen en la parte del asistente. De acuerdo con la especificación, el registro de datos al controlador LCD continúa con la disminución de E. desde aquí, la primera función se simplifica: Void COM (BYTE COM) (COM | \u003d 0x08; / \u200b\u200b0x08; / \u200b\u200b0x08; / \u200b\u200billuminación PCF8574_byte_out (Com | 0x04, Agregar) // Salida de datos PCF8574_BYTE_OUT (COM, ADD); // E en cero) y el resto también son significativamente menos que menos. Por ejemplo, void char_out (datos de byte) será solo dos llamadas, y más aún sin variables adicionales. La inicialización LCD se realiza con violaciones de la especificación de tiempo.

Alexey 02.08.15 19:11

Debido a la falta de una coma, la pantalla no sufrirá. Este dispositivo se afilará precisamente en las pantallas con dicho controlador similar. Pero es el microcircuito que es un simple expansor de puertos. Sobre e estoy de acuerdo. Se necesitan variables adicionales. Si transmite el argumento de la función con algún tipo de acciones con la lógica, pueden producirse fallas. Ya se encontró con tal. La inicialización se realiza sin recortar violaciones. La documentación dice que se pone una pausa de 40 μs entre los equipos. Debido al hecho de que la transmisión va a lo largo del bus I2C, y que a su vez, el software y la velocidad lenta, los períodos se realizan con interés. Si todavía no haces demasiado perezoso, escribe tu propia opción y envíame. Lo publicaré. Al final, este sitio está destinado a una audiencia aficionada y a todos los que desean expresar su opinión y la visión de la vida de MK.

Alexey 06.08.15 09:14.

Tyamenga se ha agregado al inicializar la pantalla al observar el respetado "competente"

Dmitry 06/14/16 21:57

Hola Alexey. Puedes agregar una biblioteca para trabajar con PCF8574 en el generador de código.

Alexey 14.06.16 22:32

Lo pensare.))

rUSLAN 12/21/16 19:54
Alexey 21.12.16 21:53

Oh sí. Especialmente el código en la Asma. Arduries apreciarán la completa)))

PI.SY.
Incluso si no te lame en AFM, entonces el PROG está escrito en el controlador PIC. Para AVRS, esta es "¿Muy" información útil? Especialmente principiante))) No tengo nada en contra de la foto, pero incluso AFM en PIC y AVR es diferente. Y sobre los detalles del trabajo de la pantalla LCD, entonces puede buscar))) VERDADERO, todavía lo escribí bajo CVAVR, pero todos los equipos son desmantelados y descompuestos en los estantes. Pero en cualquier caso, decida dónde está más claro que dice))) El autor lo escribe, el lector elige.

Gek 04.01.17 12:52

"Dirección de microcircuito I2C (por defecto es 0x4e"

Las direcciones mayores de 4 bit son fijas,
El prefijo PCF8574 es 0100, y PCF8574A - 0111
Los 3 bits menores dependen del estado de las entradas del chip A2-A0. De forma predeterminada, los 3 puentes están abiertos, respectivamente, la dirección del microcircuito toma el valor 0111111.
// A2 A1 A0 PCF8574 PCF8574A
// 1 1 1 0x20 0x38
// 1 1 0 0x21 0x39
// 1 0 1 0x22 0x3a
// 1 0 0 0x23 0x3b
// 0 1 1 0x24 0x3c
// 0 1 0 0x25 0x3d
// 0 0 1 0x26 0x3e
// 0 0 0 0x27 0x3f

Alexey 04.01.17 14:27

Algo que confundiste.
Extracto de la documentación para el microcircuito.

0b01001110 Esto es 0x4e
Así que todo está aquí. Y si necesita cambiar la dirección, solo debe cambiarlo para definirlo.

Yuri 14.12.17 21:26

¡Buenos días! Y aún puede codificar la función LCDGotoxy y LCDClear para funcionar con el adaptador en PCF8574.

Alexander 20.05.18 18:14

¡Buenos días! ¿Cómo se retira el texto ruso?

Alexey 20.05.18 23:04

Esta es la pantalla doméstica de la derretida. Él está en memoria de Cirílico.

Alexander 21.05.18 04:55

¡Buenos días! ¡Escribo como tienes en el proyecto para ATMELSTUDIO 6.2 "YPґBET MґP!" Que muestra normal
Y si escribes "¡Hola el mundo!" Muestra tonterías todo. tengo dos
Opciones de pantallas de una cosida cirílica. Segundo chino.

Alexey 21.05.18 09:22

Hubiera escrito el programa de prueba para iniciar un programa de prueba. Cambie a través de toda memoria con visualización de caracteres y sus direcciones. Y luego para salir del problema. Lo más probable es que la tabla de caracteres no coincida con la tabla ASCII.

Andrey 03.09.18 08:32

¡Buenas tardes!

¿Y no puedes lanzar un esquema para Proteus?

Andrey 03.09.18 10:22

¿O nadie revisó en proteuse?

Andrei 03.09.18 10:56.

Usado main_init

PAUL 30.05.19 23:35

Cosa curiosa, la dirección de visualización 0x4e, y si la misma pantalla está conectada a Arduux, entonces la dirección 0x27

PAUL 31.05.19 11:04.

¡Muchas gracias por tu trabajo! Revolví todo el internet, ninguno de los ejemplos anteriores, excepto por los tuyos ganados. El único en el archivo del proyecto en la función de inicialización de pantalla no se detalla el retardo _delay_, y no funciona en consecuencia

Alexey 01.06.19 09:52

Bueno, este es más proyecto de demostración. Según una buena, la biblioteca Axlib es reescribir, pero teniendo en cuenta el hecho de que STM32 y STM8 mueven los pasos de siete millas, ya que no se encuentra ningún sentido en AVR.

Paul 05.06.19 12:57

STM no tiene recintos de inmersión, es más difícil hacer tableros de circuitos impresos. Para mis proyectos, AVR presenta suficiente con un margen, en un ATMEGA 8, puede encajar mucho

Alexey 05.06.19 15:20

Sí, pero cuánto es ATMEGA8 y STM8S003))))

Dmitry 07.06.19 00:41.

Hola, Alexey.
Dígame, por favor, ¿cómo leer del estado PCF8574 del puerto?
Quiero hacer un bloque externo, 8 GPIO a través del bus I2C, Sam.

Dmitry 07.06.19 17:56

Me estoy respondiendo
La función devuelve bytes: el estado de los puertos de microcircuito
Uint8_t pcf8574_byte_rcv (uint8_t addr)
{
Uint8_t pregunte \u003d ack;
Addr | \u003d 0b01; // Leer.
Uint8_t data \u003d 0;
i2c_start ();
Preguntar \u003d i2c_send_byte (ADDR);
Si (! Pregunte) DATOS \u003d I2C_READ_BYTE (NACK);
i2c_stop ();

Datos de devolución;
}

Paul 07.06.19 20:37

¿Cuántos costos, 150 rublos, al precio del Relyushka en general), y cómo divorcie las tarifas bajo STM? Lut no confiable, CNC Freser no está seguro de que tomará (no lo intentará)

  • El módulo FC-113 se realiza sobre la base del chip PCF8574T, que es un registro de cambio de 8 bits: el "Expansor" de las salidas para el neumático serial del I2C. En la figura del microcircuito se designa DD1.
  • R1 es una resistencia rápida para ajustar el contraste de la pantalla LCD.
  • Jumper J1 se utiliza para encender la luz de fondo de la pantalla.
  • Conclusiones 1 ... 16 se utilizan para conectar el módulo a las salidas de la pantalla LCD.
  • Las plataformas de contacto A1 ... A3 son necesarias para cambiar la dirección I2C del dispositivo. Asientos de los puentes correspondientes, puede cambiar la dirección del dispositivo. La tabla muestra la conformidad de las direcciones y los puentes: "0" corresponde a la rotura de la cadena, "1": el puente ajustable. De forma predeterminada, los 3 saltadores abiertos y la dirección del dispositivo 0x27..

2 Plan de conexión de pantalla LCD Arduinosegún I2C.

Conexión de un módulo a Arduino se realiza estándar para el bus I2C: la salida SDA del módulo está conectada al puerto analógico A4, la salida SCL al puerto analógico de A5 Arduino. El módulo está alimentado por voltaje +5 V de Arduino. El módulo en sí está conectado por las conclusiones 1 ... 16 con las conclusiones correspondientes de 1 ... 16 en la pantalla LCD.


3 Biblioteca para el trabajosegún I2C.

Ahora necesita una biblioteca para trabajar con la pantalla LCD a través de la interfaz I2C. Puede usar, por ejemplo, este (enlace en la fila "Descargar código de muestra y biblioteca").

Archivo descargado Liquidcrystal_i2cv1-1.rar. Descomprimir en la carpeta \\ Bibliotecas \\que se encuentra en el directorio de Arduino IDE.

La biblioteca admite un conjunto de funciones estándar para las pantallas LCD:

FunciónPropósito
Cristal liquido () crea una variable de tipo líquido de líquido y acepta la configuración de la pantalla (números PIN);
empezar () inicialización de la pantalla LCD, configuración de parámetros (número de filas y símbolos);
claro () limpiando la pantalla y devuelva el cursor a la posición inicial;
casa () devolver el cursor a la posición inicial;
setcursor () instalación del cursor a la posición especificada;
escribir () muestra un símbolo en la pantalla LCD;
impresión () muestra el texto en la pantalla LCD;
cursor () muestra el cursor, es decir,. Subraya en el siguiente asiento de símbolo;
nocursor () esconde el cursor;
parpadear () cursor intermitente;
noblink () cancelar parpadeando;
sin pantalla () apague la pantalla mientras guarda toda la información mostrada;
mONITOR () encienda la pantalla mientras guarda toda la información mostrada;
scrolldisplayleft () desplazando el contenido de la pantalla en la primera posición a la izquierda;
scrolldisplayright () desplazando el contenido de la pantalla en 1 posición a la derecha;
desplazamiento automático () inclusión de auto-contratación;
nOAUTOSCROLLO () apagando el abridor automático;
de izquierda a derecha () especifica la dirección del texto de izquierda a derecha;
de derecha a izquierda () la dirección del texto a la derecha a la izquierda;
createchar () crea un símbolo personalizado para la pantalla LCD.

4 Boceto para la salida de textoen la pantalla LCD a través de I2C Bus

Abramos la muestra: Muestras de archivo LiquidCrystal_I2C CUCHOSCHARS Y él lo modifica un poco. Retiraremos un mensaje al final del cual será el símbolo intermitente. En los comentarios al Código, se comentan todos los matices de boceto.

#Incluir. // Conectar la biblioteca de alambre #include // conectamos la biblioteca de la pantalla LCD #define PrintByte (Args) Escribir (Args); // uint8_t heart \u003d (0x0.0xa, 0x1f, 0x1f, 0xe, 0x4.0x0); // Símbolo de la máscara de bits "Heart" LiquidCrystal_I2C LCD (0x27, 16, 2); // Establezca la dirección 0x27 para la pantalla LCD 16x2 configuración de vacío () ( lcd.init (); // Inicialización de la pantalla LCD LCD.BACHLIGHT (); // Encienda la pantalla de retroiluminación LCD.CREATECHAR (3, corazón); // crear el símbolo del corazón en 3 lcd.home () celda de memoria; // Coloque el cursor en la esquina superior izquierda, a la posición (0.0) LCD. "); // Imprima la cadena de texto LCD.SETCURSOR (0, 1); // Transfiera un cursor a una cadena 2, un símbolo 1 LCD.Print ("I"); // Imprima un mensaje en una línea 2 LCD.PRINTBYTE (3); // Imprime el símbolo "corazón", ubicado en la tercera celda LCD.Print ("Arduino"); } bucle vacío () ( // parpadeando el último símbolo LCD.SETCURSOR (13, 1); // transferir el cursor a la cadena 2, símbolo 1 lcd.print ("\\ t"); Demora (500); Lcd.setcursor (13, 1); // transferir el cursor a la cadena 2, símbolo 1 lcd.print (""); Demora (500); }

Por cierto, los personajes grabados por el equipo. lcd.createchar ();, permanecer en la pantalla de la pantalla incluso después de apagar, porque Grabado en la MFU de 1602.

5 Creando tus propios personajespara pantalla LCD

Poco más detalles, considere el problema de crear sus propios personajes para las pantallas LCD. Cada símbolo en la pantalla consta de 35 puntos: 5 de ancho y 7 de altura (+1 cadena de copia de seguridad para subrayar). En la Línea 6 del boceto dado, establecemos una matriz de 7 números: (0x0, 0xa, 0x1f, 0x1f, 0xe, 0x4, 0x0). Transformamos los números de 16 riquezas en binario: {00000, 01010, 11111, 11111, 01110, 00100, 00000} . Estos números no son más que una máscara de bits para cada una de las 7 líneas del símbolo, donde "0" denota un punto de luz, y "1" - oscuro. Por ejemplo, un símbolo de corazón especificado en forma de una máscara de bit se verá en la pantalla como se muestra en la figura.

6 Pantalla LCD de oficinaen el bus i2c

Drive Boceto en Arduino. En la pantalla aparecerá la inscripción con el cursor parpadeante al final.


7 Que es por"neumático I2C.

Como bonificación, considere un diagrama temporal de la producción de los caracteres latinos "A", "B" y "C" en la pantalla LCD. Estos caracteres están disponibles en la ROM de pantalla y se muestran simplemente por la transmisión de su dirección. El diagrama se elimina de las conclusiones RS, RW, E, D4, D5, D6 y D7 Pantalla, es decir, Ya, después del convertidor FC-113 "I2C paralelo Bus". Podemos decir que nos sumergimos un poco "más profundo" en el "hierro".


Diagrama temporal de la producción de caracteres latinos "A", "B" y "C" en la pantalla LCD 1602

El diagrama muestra que los caracteres que están en la ROM DVLD (consulte la hoja de datos de la página 9.11, la referencia a continuación) se transmite por dos GHEE, la primera de la cual define la tabla de la columna de la tabla, y el segundo es el número de línea. Al mismo tiempo, los datos "arrebatadores" en la parte delantera. MI. (Habilitar), y linea Rs. (Registrarse Select, Registrar Selection) está en un estado de unidad lógica, lo que significa transferencia de datos. El estado de estado bajo de la línea RS significa la transmisión de instrucciones que vemos antes de la transferencia de cada símbolo. En este caso, el código de la instrucción de retorno del carro se transmite a la pantalla POSICIÓN (0, 0) LCD, ya que también puede averiguarlo estudiando la descripción técnica de la pantalla.

Y un ejemplo mas. En este momento, el diagrama muestra la salida del símbolo "corazón" en la pantalla LCD.


De nuevo, los dos primeros impulsos. Permitir Instrucciones compatibles Casa () (0000 0010 2) - retorno del carro a la posición (0; 0), y los dos dos: la salida en la pantalla LCD almacenada en la celda de memoria 3 10 (0000 0011 2) el símbolo "corazón" (instrucción lcd.createchar (3, corazón); Bosquejo).

En este artículo, le diré cómo usar el módulo de interfaz I2C para controlar la pantalla LCD (2 × 16 / 20x4) utilizando Arduino. Este módulo le permite reducir la cantidad de salidas de controlador utilizadas, en lugar de conexiones de 8 o 4 bits, solo se requieren 2 salidas (SDA y SCL).

Especificaciones técnicas

Muestra Soporte: LCD 16 × 02/20 × 04
Opcional: Ajuste de contraste
Voltaje de suministro. 5v.
Interfaz: I2C.
Dimensiones: 54 mm x 19 mm x 15 mm

Descripción general del módulo de interfaz I2C

Dado que el número de contactos en los controladores Arduino es limitado y, con frecuencia, cuando se usa varios sensores y módulos, terminan, es necesario guardarlos, este módulo se ha desarrollado para este caso, se puede implementar utilizando dos contactos (SDA y SCL) .

Ahora un poco sobre el módulo en sí, se basa en el chip PCF8574T. Se requieren resistores R8 (4.7kom) y R9 (4.7kom) para suspender las líneas SDA y SCL, idealmente, al conectar dos o más dispositivos a través del bus I2C, debe usar un suspenso en un dispositivo, luego escribiré por qué. La placa proporciona tres saltadores (según el esquema, se ve que las líneas A0, A1, A2 se aprienden para poder a través de las resistencias R4, R5, R6), son necesarias para cambiar la dirección del dispositivo, de las 8 opciones. Cambiar el direccionamiento nos da la capacidad de conectar hasta ocho dispositivos a través del bus IC2 con el microcircuito PCF8574T, las direcciones se muestran en la figura (Dirección de dispositivo predeterminada 0x27). Además, el módulo está equipado con el potenciómetro R11 con su ayuda, puede cambiar el contraste de la pantalla LCD.

Para conectar, se ubican tres grupos de contactos en el módulo:

Primer grupo:
Scl: tactline (reloj serie)
SDA: Línea de datos (serie serie DFTA)
VCC: "+" comida
GND: "-" Nutrición

Segundo grupo:
Vss: "-" comida
VDD: "+" comida
VO: Salida de gestión de contraste
RS: Selección de registro
RW: Lectura / escritura (Modo de grabación cuando está conectado a la Tierra)
E: Habilitar (puerta abajo)
DB0-DB3: Bits de interfaz junior
DB4-DB7: Bits de interfaz senior
A: "+" de la luz de fondo
K: "-" Falta de retroiluminación de energía

Tercer grupo: (se instala el puente predeterminado)
VCC:
A de LCD:

Conectar a Arduino.

Detalles requeridos:
Arduino Uno R3 X 1 PC.
Pantalla LCD 1602A (2 × 16, 5V, azul) x 1 pieza
Módulo de interfaz I2C, IIC, TWI para LCD X 1 PC.
Dupont de alambre, 2.54 mm, 20 cm, F-M (hembra - macho) x 1 PC.
Cable USB 2.0 A-B X 1 pieza

Conexión:
En primer lugar, soldamos el módulo I2C a la pantalla LCD, debe conectar la pantalla a Arduino Uno. Para hacer esto, use el cableado DUPONT, conectando la tabla a continuación.

Para mayor claridad, daré otro esquema.

Para este experimento, debe descargar e instalar la biblioteca "LiquidCrystal_I2C". Luego, copie y pegue este ejemplo de código en la ventana del programa IDE Arduino y descargue al controlador.

/ * Probado en Arduino IDE 1.6.11 Fecha de prueba 09/15/2016. * / #Include. #Incluir. Liquidcrystal_i2c LCD (0x27,16,2); // Establezca la dirección y el tamaño de la configuración del vacío (LCD.init (); // lcd lcd.backlight () inicialización; // Gire la luz de fondo LCD.SETCURSOR (0,0); // Establezca el cursor al principio 1 línea LCD .Print ("Hola, mundo"); // Mostrar texto LCD.SETCURSOR (0,1); // Establezca el cursor al principio de 2 líneas LCD.PRINT ("www.set"); // dile Texto) Void Loop () ()

Probado en Arduino IDE 1.6.11

Fecha de prueba 09/15/2016

#Incluir.

#Incluir.

Liquidcrystal_i2c LCD (0x27, 16, 2); // Establezca la dirección y el tamaño de la pantalla

configuración de vacío ()

lCD. en eso (); // Inicialización LCD.

lCD. retroiluminación (); // enciende la luz de fondo

lCD. Imprimir ("Hola, mundo"); // decirle texto

lCD. Imprimir ("www.syt"); // decirle texto

bucle vacío ()

Si lo hiciste correctamente, pero no hay caracteres en la pantalla, intente aumentar el contraste por el potenciómetro.


Enlaces
Descargar la biblioteca
Documentación en el microcircuito.

En este artículo, le diré cómo usar el módulo de interfaz I2C para controlar la pantalla LCD (2 × 16 / 20x4) utilizando Arduino. Este módulo le permite reducir la cantidad de salidas de controlador utilizadas, en lugar de conexiones de 8 o 4 bits, solo se requieren 2 salidas (SDA y SCL).

Especificaciones técnicas

Muestra Soporte: LCD 16 × 02/20 × 04
Opcional: Ajuste de contraste
Voltaje de suministro. 5v.
Interfaz: I2C.
Dimensiones: 54 mm x 19 mm x 15 mm

Descripción general del módulo de interfaz I2C

Dado que el número de contactos en los controladores Arduino es limitado y, con frecuencia, cuando se usa varios sensores y módulos, terminan, es necesario guardarlos, este módulo se ha desarrollado para este caso, se puede implementar utilizando dos contactos (SDA y SCL) .

Ahora un poco sobre el módulo en sí, se basa en el chip PCF8574T. Se requieren resistores R8 (4.7kom) y R9 (4.7kom) para suspender las líneas SDA y SCL, idealmente, al conectar dos o más dispositivos a través del bus I2C, debe usar un suspenso en un dispositivo, luego escribiré por qué. La placa proporciona tres saltadores (según el esquema, se ve que las líneas A0, A1, A2 se aprienden para poder a través de las resistencias R4, R5, R6), son necesarias para cambiar la dirección del dispositivo, de las 8 opciones. Cambiar el direccionamiento nos da la capacidad de conectar hasta ocho dispositivos a través del bus IC2 con el microcircuito PCF8574T, las direcciones se muestran en la figura (Dirección de dispositivo predeterminada 0x27). Además, el módulo está equipado con el potenciómetro R11 con su ayuda, puede cambiar el contraste de la pantalla LCD.

Para conectar, se ubican tres grupos de contactos en el módulo:

Primer grupo:
Scl: tactline (reloj serie)
SDA: Línea de datos (serie serie DFTA)
VCC: "+" comida
GND: "-" Nutrición

Segundo grupo:
Vss: "-" comida
VDD: "+" comida
VO: Salida de gestión de contraste
RS: Selección de registro
RW: Lectura / escritura (Modo de grabación cuando está conectado a la Tierra)
E: Habilitar (puerta abajo)
DB0-DB3: Bits de interfaz junior
DB4-DB7: Bits de interfaz senior
A: "+" de la luz de fondo
K: "-" Falta de retroiluminación de energía

Tercer grupo: (se instala el puente predeterminado)
VCC:
A de LCD:

Conectar a Arduino.

Detalles requeridos:
Arduino Uno R3 X 1 PC.
Pantalla LCD 1602A (2 × 16, 5V, azul) x 1 pieza
Módulo de interfaz I2C, IIC, TWI para LCD X 1 PC.
Dupont de alambre, 2.54 mm, 20 cm, F-M (hembra - macho) x 1 PC.
Cable USB 2.0 A-B X 1 pieza

Conexión:
En primer lugar, soldamos el módulo I2C a la pantalla LCD, debe conectar la pantalla a Arduino Uno. Para hacer esto, use el cableado DUPONT, conectando la tabla a continuación.

Para mayor claridad, daré otro esquema.

Para este experimento, debe descargar e instalar la biblioteca "LiquidCrystal_I2C". Luego, copie y pegue este ejemplo de código en la ventana del programa IDE Arduino y descargue al controlador.

/ * Probado en Arduino IDE 1.6.11 Fecha de prueba 09/15/2016. * / #Include. #Incluir. Liquidcrystal_i2c LCD (0x27,16,2); // Establezca la dirección y el tamaño de la configuración del vacío (LCD.init (); // lcd lcd.backlight () inicialización; // Gire la luz de fondo LCD.SETCURSOR (0,0); // Establezca el cursor al principio 1 LINE LCD .Print ("Hola, mundo"); // Mostrar texto LCD.SETCURSOR (0.1); // Establezca el cursor en las 2 líneas LCD.Print ("www.robotchip.ru"); // indique el texto) Loid Loop () ()

Probado en Arduino IDE 1.6.11

Fecha de prueba 09/15/2016

#Incluir.

#Incluir.

Liquidcrystal_i2c LCD (0x27, 16, 2); // Establezca la dirección y el tamaño de la pantalla

configuración de vacío ()

lCD. en eso (); // Inicialización LCD.

lCD. retroiluminación (); // enciende la luz de fondo

lCD. Imprimir ("Hola, mundo"); // decirle texto

lCD. Imprimir ("www.robotchip.ru"); // decirle texto

bucle vacío ()

Programa de descarga

Si lo hiciste correctamente, pero no hay caracteres en la pantalla, intente aumentar el contraste por el potenciómetro.


Enlaces
Descargar Library LiquidCrystal_I2C.
Documentación en el microcircuito.

El módulo LCD I2C le permite conectar la pantalla de caracteres a la placa arduino de todos los dos cables de señal.

Componentes utilizados (Compre en China):

. Cargo de gestión

. Conexión de cables

Especificaciones básicas:

Pantalla: Símbolo 16x02 o 20x04
. Illuminación: azul con símbolos blancos.
. Contraste: Potenciómetro configurado
. Voltaje de suministro: 5V
. Interfaz: I2C.
. Dirección I2C: 0x27
. Tamaños: 82mm x 35mm x 18mm

Conectar a Arduino.

El módulo está equipado con un conector estándar de cuatro pines de 2.54 mm.

SCL.: Reloj serie Serial Reloj

Sda: Línea de datos secuencial (datos en serie)

VCC.: "+" potencia

GND.: "-" Energía

Las conclusiones son responsables de la interfaz I2C en las juntas arduino basadas en diferentes controladores diferentes.

Para trabajar con este módulo, debe instalar la biblioteca liquidcrystal_i2c1602v1

Descargue, desempaquete y tire la carpeta de las bibliotecas en la carpeta Arduino. En el caso, en el momento de agregar la biblioteca, Arduino IDE ha estado abierto, reiniciando el entorno.

Ve directamente al boceto. En este ejemplo, retire el estándar "¡Hola, mundo!" Y para la dirección de nuestra comunidad.

código del programa de muestra:

#Incluir. #Incluir. Liquidcrystal_i2c LCD (0x27,16,2); / * Establezca la dirección y la dimensión de la pantalla. Cuando se utiliza el módulo LCD I2C con una pantalla de 20x04, no se puede cambiar nada en el código, solo debe establecer la dimensión correcta * / Vacío. configuración. () (LCD.init (); // Inicialización LCD. LCD luz de fondo (); // enciende la luz de fondo // El cursor está al comienzo de la 1ª línea LCD.Print ("¡Hola, mundo!"); // mostrar texto lcd.setcursor (0, 1); // instalar el cursor al comienzo de 2 líneas lcd.print ("sitio"); // decirle texto) vacío círculo. () { }

Creando tus propios personajes

Con la conclusión del texto descubierto, las letras del alfabeto inglés se cosen en la memoria del controlador dentro de la pantalla y no hay problemas con ellos. Pero, ¿qué pasa si el símbolo deseado en el controlador de memoria no es?

No hay problemas, el símbolo deseado se puede hacer manualmente. Este método es parcial, una restricción de 7 caracteres ayudará a resolver el problema de salida.

La celda, en las pantallas en consideración, tiene una resolución de 5x8 puntos. Todo lo que la tarea de crear un símbolo se reduce para escribir una máscara de bits y organizar una sola en él en lugares donde debería haber un punto y noliki donde no hay.

En el ejemplo anterior, dibuja un smiley.

código del programa de muestra:

// probado en Arduino IDE 1.0.5 // añadir las bibliotecas necesarias #Incluir. #Incluir. // Símbolo de la máscara de bits sonrisa Byte Smile \u003d (B00010, B00001, B11001, B00001, B11001, B00001, B00010,); Liquidcrystal_i2c LCD (0x27,20,4); // Establezca la dirección y la dimensión de la pantalla. Vacío. configuración. () (LCD.init (); // Inicialización LCD. LCD luz de fondo (); // enciende la luz de fondo // crear un personaje en el número 0 Lcd.createchar (1, sonrisa); lcd.setcursor (0, 0); // Establecer el cursor en la primera línea lcd.print ("\\ 1"); // Mostrar emoticonos (símbolo en el número 1) - "\\ 1" ) Vacío círculo. () { }

Programa para una fácil creación de personajes.

En los comentarios, el participante de la comunidad arrojó el enlace al generador de símbolos.



¿Te gustó el artículo? Compártelo