Para las pantallas Winstar en minúsculas, es muy tentador reducir el número de conexiones de control, que incluso con una conexión de cuatro hilos resultan al menos seis (se puede omitir R / W, consulte
la publicación de este
autor ). Dicen (incluidos los propios Winstars, consulte el sitio
web oficial) que el controlador WS0010 puede ser controlado por SPI (¡y algunos
incluso por I2C !), Pero no ponen obstinadamente instrucciones en la documentación sobre este tema y cómo manejarlo. no está claro Además, SPI no ayuda mucho: en lugar de seis conexiones, conectamos cuatro a la pantalla, porque para algunos otros propósitos SPI rara vez se usa en la práctica de aficionados. Por lo tanto, la solución más conveniente en términos de reducir el número de conexiones para placas Arduino estándar es usar el llamado expansor de puerto (expansor) basado en el bus I2C llamado
PCF8574 . Esto le permite reducir el número de conexiones necesarias a dos (sin contar la fuente de alimentación), y según los resultados del puerto TWI estándar, que no interfiere con la conexión de varios sensores, relojes, etc.
De hecho, el chip PCF8574 se puede adaptar a una amplia variedad de aplicaciones diferentes (botones de lectura, LED parpadeantes, etc.). En el modo de grabación, el microcircuito traduce directamente el valor de los bits en el byte transmitido a través del bus I2C al estado de ocho salidas (al leer, por el contrario, el estado de ocho líneas se transfiere al byte transmitido). La dirección I2C en PCF8574 se puede cambiar configurando el nivel en las tres entradas de la configuración de dirección, de modo que usando un bus en dos cables puede configurar o leer el estado de hasta 64 líneas. En este caso, hay algunas características debido a la asimetría de los estados "0" y "1" de los pines del puerto paralelo PCF8574, tanto al trabajar en la entrada como en la salida (ver
aquí ), pero en nuestra tarea de controlar pantallas LCD o OLED no interferirán con el bus I2C.
Ni siquiera es necesario configurar el elevador de pantalla por su cuenta. Especialmente para controlar pantallas compatibles con HD44780, existen numerosas variedades de módulos adaptadores (ver foto). En un borde tienen un conector de aguja tipo PLS de una sola fila, cuyo cableado le permite acoplar directamente dicho módulo con una pantalla LCD o OLED.

Si orienta el módulo de tal manera que la salida del módulo número 1 (el recuento proviene del conector de entrada, vea la foto de arriba) coincide con la salida 1 de la pantalla, entonces la placa adaptadora puede instalarse directamente en la placa de la pantalla como se muestra en la foto a continuación (foto con sitio 9zip.ru). En este caso, por supuesto, el paso del pin y el tipo de conector en sí deben coincidir. Por lo tanto, entre las pantallas OLED en minúsculas comunes de Winstar, como en la imagen, solo se pueden conectar los tipos WEH1602A y 2004A, para el tipo 1602B el módulo tendrá que girar 180, y para las personas queridas 2002A / B y 1202/1204, hacer cables adaptadores.

El pinout para el caso de la pantalla OLED se muestra en la tabla. Si desea conectar de forma independiente un microcircuito en lugar de un módulo listo (que reducirá el tamaño), pero tiene la intención de utilizar la biblioteca que se describe a continuación, también puede determinar la conexión correcta de un microcircuito desnudo a partir de esta tabla. Tenga en cuenta que, de hecho, aquí se utiliza un esquema de conexión de pantalla de cuatro hilos y los bits DB0-DB3 no están conectados en ningún lugar, por lo tanto, están atenuados en la tabla.
Pinout al conectar el PCF8574 y el módulo basado en él a la pantalla OLEDLa pequeña resistencia de sintonización azul, así como el puente en el extremo del tablero, que son visibles en la foto, están diseñados para controlar la luz de fondo en las pantallas LCD (pines 15 y 16) y no se utilizan en nuestro caso. (Por cierto, lo mismo se aplica al bit P3 del puerto de salida PCF8574, que no se utiliza en nuestro caso). Por lo tanto, cuando se conecta directamente a la pantalla OLED 1602B, cuyos pines 15 y 16 están delante del pin 1, simplemente no se pueden conectar (y el módulo con 15 y 16 conclusiones deberá eliminarse para no interferir).
Debajo de esta resistencia, hay pines A0, A1 y A2 en la placa para configurar los bits menos significativos de la dirección I2C. Por defecto, están conectados a un nivel alto, por lo que la dirección tiene el valor más alto posible de un rango determinado. Los chips PCF8574 están disponibles en varias versiones que difieren en este rango. Para PCF8574 sin un índice alfanumérico (o para PCF8574T), la dirección predeterminada será 0x27 y puede cambiar a 0x20. Para PCF8574A, la dirección predeterminada es 0x3F y cambia a 0x38.
Para trabajar con una pantalla conectada a través de PCF8574 a través de la interfaz I2C, hay una biblioteca recomendada llamada LiquidCrystal_I2C (consulte el sitio web oficial arduino.cc). Por supuesto, al igual que el LiquidCrystal original, solo funciona con inglés. No hay versiones en ruso (al menos, las que funcionarían con confianza en las versiones modernas del Arduino IDE), y tampoco hay una opción para trabajar con una pantalla OLED. Por lo tanto, el autor asumió el trabajo de refinamiento, tomando la más simple de las variantes
LiquidCrystal_I2C como las iniciales.
Un método obvio de rusificación sería combinar LiquidCrystal_I2C y LiquidCrystalRus, finalizando el último en términos de inicialización de pantallas OLED. Pero la solución frontal no funciona aquí: en modo I2C, LiquidCrystalRus muestra solo la primera letra de la cadena enviada a través de la función print (). No entendí con qué estaba conectado, simplemente complementando la biblioteca LiquidCrystal_I2C con mi función de salida outStr (), que descarta el byte más alto de la codificación UTF-8, y el inferior codifica en el carácter de la tabla interna ENGLISH_RUSSIAN (0x02) del controlador WS0010.
Una versión fija y actualizada llamada LiquidCrystal_I2C_OLED se puede descargar
desde aquí . Si la cadena no contiene letras rusas, se debe generar con la función usual print (), que funciona más rápido. El icono de grado, así como las letras “” y “” solo se pueden mostrar mediante indicación directa de los códigos octales (por ejemplo, “todo” - “sol \ 265”, “22.5 °” - “22.5 \ 337”, consulte tabla a continuación). Hay ejemplos de salida en la carpeta de ejemplos (no olvide cambiar la dirección del chip PCF8574 si tiene una versión diferente a PCF8574A o la dirección se cambia cambiando el bit de modificación). Un ejemplo de la salida del alfabeto ruso a la pantalla de configuración 1602 (chip PCF8574A, dirección predeterminada 0x3F):
#include <Wire.h> #include <LiquidCrystal_I2C_OLED.h> LiquidCrystal_I2C OLED1(0x3F,16,2); // void setup() { OLED1.init(); OLED1.clear(); OLED1.print("Proba"); // OLED1.setCursor(7, 0); // OLED1.outStr(""); // OLED1.setCursor(7, 1);// OLED1.print("-22,3\337C"); //"-22,3°C" delay(1000); } void loop() {// 162 202!!!! OLED1.setCursor(0, 0); // OLED1.outStr(""); OLED1.setCursor(0, 1);// OLED1.outStr(""); delay(2000); OLED1.setCursor(0, 0); // OLED1.outStr(""); OLED1.setCursor(0, 1);// OLED1.outStr(""); delay(3000); }
El resultado correcto de la salida de la primera mitad del alfabeto se muestra en la foto:

Hacemos hincapié en que dicha biblioteca rusificada (como LiquidCrystalRus, por cierto) está diseñada para funcionar en versiones modernas del Arduino IDE (a partir de 1.6.1 en adelante) en el entorno Windows 7/8/10. En el entorno Arduino IDE 1.0, así como en otros editores y sistemas operativos que se ejecutan en codificación de un solo byte win1251 (ANSI, cp1251), estas bibliotecas no perciben el texto ruso directo en una cadena. En este caso, debe usar la función print () con códigos octales de letras rusas, de acuerdo con la tabla a continuación, solo la biblioteca aún tendrá que usar esta (o modificar LiquidCrystal_I2C para cambiar a la tabla ENGLISH_RUSSIAN durante la inicialización, consulte
aquí ). El controlador WS0010 utiliza un método de codificación económico: solo se ingresan letras rusas que no coinciden con los caracteres en inglés. Por ejemplo, "Sábado" se vería como "cy \ 262 \ 262o \ 277a".
Caracteres cirílicos y códigos de icono de grado para el controlador WS0010 (tabla ENGLISH_RUSSIAN, código 0x02)
Una señal de que su entorno / editor produce en lugar de UTF-8 se generará una codificación de un solo byte win1251 en lugar de "A" - "h", en lugar de "a" - "D", etc. (foto enviada por
Tomasina ):

Si no puede hacer frente a la explicación de dónde se toma la codificación de un solo byte en los entornos modernos de Windows, solo puede usar la salida de código directo, como se indicó anteriormente, o simplemente cambiar mis códigos de byte bajo outTr
-8 a mi código en la función outStr () uno por uno de la tabla
win1251 . Por ejemplo, reemplazamos el operador de caso 0x90 (mayúscula "A") con el caso 0xC0 y así sucesivamente, y las líneas que filtran el byte alto (caso 0xd0: break; y caso 0xd1: break;) deben eliminarse.