Bei Winstar-Kleinbuchstaben ist es sehr verlockend, die Anzahl der Steuerverbindungen zu reduzieren, die sich selbst bei einer Vierdrahtverbindung als nicht weniger als sechs herausstellen (R / W kann weggelassen werden, siehe
Veröffentlichung dieses
Autors ). Sie sagen (einschließlich der Winstars selbst, siehe offizielle
Website ), dass der WS0010-Controller von SPI (und einige
sogar von I2C !) Steuert werden kann, aber sie geben keine hartnäckigen Anweisungen in die Dokumentation zu diesem Thema und wie man damit umgeht - unverständlich. Darüber hinaus hilft SPI nicht viel - anstelle von sechs Verbindungen werden vier an das Display angeschlossen, da SPI für einige andere Zwecke in der Amateurpraxis selten verwendet wird. Daher ist die bequemste Lösung zur Reduzierung der Anzahl der Verbindungen für Standard-Arduino-Karten die Verwendung des sogenannten Port-Expanders (Expander) auf der Basis des I2C-Busses
PCF8574 . Auf diese Weise können Sie die Anzahl der erforderlichen Verbindungen auf zwei reduzieren (ohne die Stromversorgung), und dies basiert auf den Ergebnissen des Standard-TWI-Anschlusses, der den Anschluss verschiedener Sensoren, Uhren usw. nicht beeinträchtigt.
Tatsächlich kann der PCF8574-Chip an eine Vielzahl unterschiedlicher Anwendungen angepasst werden (Lesetasten, blinkende LEDs usw.). Im Aufzeichnungsmodus übersetzt die Mikroschaltung den Wert der über den I2C-Bus übertragenen Bits in dem Byte direkt in den Zustand von acht Ausgängen (beim Lesen wird im Gegensatz dazu der Zustand von acht Zeilen auf das übertragene Byte übertragen). Die I2C-Adresse in PCF8574 kann durch Einstellen des Pegels an den drei Eingängen der Adresseinstellung geändert werden, sodass Sie mit einem Bus auf zwei Drähten den Status von bis zu 64 Leitungen einstellen oder lesen können. In diesem Fall gibt es einige Merkmale aufgrund der Asymmetrie der Zustände „0“ und „1“ der parallelen Anschlussstifte des PCF8574, sowohl bei der Arbeit am Eingang als auch am Ausgang (siehe
hier ), aber bei unserer Aufgabe, LCD- oder OLED-Anzeigen zu steuern Sie stören den I2C-Bus nicht.
Es ist nicht einmal erforderlich, den Display-Riser selbst einzurichten. Speziell zur Steuerung von HD44780-kompatiblen Displays stehen zahlreiche verschiedene Adaptermodule zur Verfügung (siehe Foto). An einer Kante befindet sich ein einreihiger PLS-Nadelanschluss, mit dessen Verkabelung Sie ein solches Modul direkt an ein LCD- oder OLED-Display andocken können.

Wenn Sie das Modul so ausrichten, dass der Ausgang von Modul Nummer 1 (Zählung erfolgt über den Eingangsanschluss, siehe Foto oben) mit Ausgang 1 des Displays übereinstimmt, kann die Adapterplatine direkt auf der Anzeigetafel installiert werden, wie auf dem Foto unten gezeigt (Foto mit) Seite 9zip.ru). In diesem Fall müssen natürlich die Pin-Teilung und der Steckertyp selbst übereinstimmen. Daher können unter den gängigen OLED-Kleinbuchstaben von Winstar, wie in der Abbildung gezeigt, nur die Typen WEH1602A und 2004A angeschlossen werden. Für den Typ 1602B muss das Modul um 180 gedreht werden, und für die von Menschen geliebten Personen 2002A / B und 1202/1204 werden Adapterkabel hergestellt.

Die Pinbelegung für den Fall des OLED-Displays ist in der Tabelle aufgeführt. Wenn Sie anstelle eines vorgefertigten Moduls (wodurch die Größe verringert wird) einen Mikrokreis unabhängig anschließen möchten, aber die unten beschriebene Bibliothek verwenden möchten, können Sie anhand dieser Tabelle auch den korrekten Anschluss eines bloßen Mikrokreises ermitteln. Beachten Sie, dass hier tatsächlich ein Vierdraht-Anzeigeverbindungsschema verwendet wird und die DB0-DB3-Bits nirgendwo verbunden sind. Daher ist die Tabelle ausgegraut.
Pinbelegung beim Anschließen des PCF8574 und des darauf basierenden Moduls an das OLED-DisplayDer kleine blaue Abstimmwiderstand sowie der auf dem Foto sichtbare Jumper am Ende der Platine steuern die Hintergrundbeleuchtung der LCD-Displays (Pins 15 und 16) und werden in unserem Fall nicht verwendet. (Gleiches gilt übrigens für Bit P3 des PCF8574-Ausgangsports, das in unserem Fall nicht verwendet wird.) Wenn sie direkt an das 1602B-OLED-Display angeschlossen sind, dessen Pins 15 und 16 sich vor Pin 1 befinden, können sie einfach nicht angeschlossen werden (und Modul mit 15 und 16 Schlussfolgerungen muss entfernt werden, um nicht zu stören).
Unter diesem Widerstand befinden sich die Pins A0, A1 und A2 auf der Platine zum Setzen der niedrigstwertigen Bits der I2C-Adresse. Standardmäßig sind sie mit einer hohen Ebene verbunden, sodass die Adresse den höchstmöglichen Wert aus einem bestimmten Bereich hat. Die PCF8574-Chips sind in verschiedenen Versionen erhältlich, die sich in diesem Bereich unterscheiden. Für PCF8574 ohne alphanumerischen Index (oder für PCF8574T) lautet die Standardadresse 0x27 und kann bis auf 0x20 geändert werden. Für PCF8574A lautet die Standardadresse 0x3F und ändert sich in 0x38.
Für die Arbeit mit einem Display, das über PCF8574 über die I2C-Schnittstelle verbunden ist, gibt es eine empfohlene Bibliothek namens LiquidCrystal_I2C (siehe offizielle Website arduino.cc). Natürlich funktioniert es wie das Original LiquidCrystal nur mit Englisch. Es gibt keine russischsprachigen Versionen davon (zumindest solche, die in modernen Versionen der Arduino IDE sicher funktionieren würden), und es gibt auch keine Option für die Arbeit mit einem OLED-Display. Daher übernahm der Autor die Arbeit der Verfeinerung und nahm die einfachste der
LiquidCrystal_I2C- Varianten als Quelle.
Eine naheliegende Methode zur Russifizierung wäre die Kombination von LiquidCrystal_I2C und LiquidCrystalRus, um letztere im Hinblick auf die Initialisierung von OLED-Anzeigen abzuschließen. Die frontale Lösung funktioniert hier jedoch nicht - im I2C-Modus zeigt LiquidCrystalRus nur den ersten Buchstaben der Zeichenfolge an, die über die Funktion print () gesendet wurde. Ich habe nicht verstanden, womit es verbunden war, indem ich einfach die LiquidCrystal_I2C-Bibliothek durch meine outStr () - Ausgabefunktion ergänzt habe, die das höchste Byte der UTF-8-Codierung verwirft, und das niedrigere Byte in das Zeichen aus der internen Tabelle ENGLISH_RUSSIAN (0x02) des WS0010-Controllers.
Eine feste und aktualisierte Version namens LiquidCrystal_I2C_OLED kann hier heruntergeladen
werden . Wenn die Zeichenfolge keine russischen Buchstaben enthält, sollte sie mit der üblichen Funktion print () ausgegeben werden, die schneller funktioniert. Das Gradsymbol sowie die Buchstaben „“ und „“ können nur durch direkte Angabe von Oktalcodes angezeigt werden (z. B. „alles“ - „Sonne \ 265“, „22,5 °“ - „22,5 \ 337“, siehe Tabelle unten). Beispiele für die Ausgabe finden Sie im Beispielordner (vergessen Sie nicht, die Adresse des PCF8574-Chips zu ändern, wenn Sie eine andere Version als PCF8574A haben oder die Adresse durch Umschalten des Änderungsbits geändert wird). Ein Beispiel für die Ausgabe des russischen Alphabets auf dem 1602-Konfigurationsdisplay (PCF8574A-Chip, Standardadresse 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); }
Das korrekte Ergebnis der Ausgabe der ersten Hälfte des Alphabets ist auf dem Foto dargestellt:

Wir betonen, dass eine solche russifizierte Bibliothek (übrigens wie LiquidCrystalRus) für moderne Versionen der Arduino IDE (ab ca. 1.6.1) in der Windows 7/8/10-Umgebung ausgelegt ist. In der Arduino IDE 1.0-Umgebung sowie in anderen Editoren und Betriebssystemen, die mit der Einzelbyte-Codierung win1251 (ANSI, cp1251) ausgeführt werden, nehmen diese Bibliotheken keinen direkten russischen Text in einer Zeichenfolge wahr. In diesem Fall sollten Sie die Funktion print () mit Oktalcodes russischer Buchstaben verwenden. Gemäß der folgenden Tabelle muss nur die Bibliothek diese noch verwenden (oder LiquidCrystal_I2C ändern, um während der Initialisierung zur Tabelle ENGLISH_RUSSIAN zu wechseln, siehe
hier ). Der WS0010-Controller verwendet eine kostengünstige Codierungsmethode. Es werden nur russische Buchstaben eingegeben, die nicht mit den englischen Zeichen übereinstimmen. Zum Beispiel würde "Samstag" wie "cy \ 262 \ 262o \ 277a" aussehen.
Kyrillische Zeichen- und Gradsymbolcodes für den WS0010-Controller (Tabelle ENGLISH_RUSSIAN, Code 0x02)
Ein Zeichen, dass Ihre Umgebung / Ihr Editor anstelle von UTF-8 eine Einzelbyte-Codierung win1251 erzeugt, wird anstelle von "A" - "h" anstelle von "a" - "D" usw. ausgegeben (Foto von
Tomasina gesendet):

Wenn Sie nicht verstehen können, woher die Einzelbyte-Codierung in modernen Windows-Umgebungen stammt, müssen Sie nur die oben angegebene direkte Code-Ausgabe verwenden oder einfach meine outTr-
8- Low-Byte-Codes in meiner outStr () -Funktion nacheinander ändern aus der
win1251 Tabelle. Zum Beispiel ersetzen wir den Operator case 0x90 (Großbuchstabe "A") durch case 0xC0 usw., und die Zeilen, die das High-Byte filtern (case 0xd0: break; und case 0xd1: break;), müssen gelöscht werden.