Pour les écrans Winstar en minuscules, il est très tentant de réduire le nombre de connexions de contrôle qui, même avec une connexion à quatre fils, ne sont pas moins de six (R / W peut être omis, voir
la publication de cet
auteur ) Ils disent (y compris les Winstars eux-mêmes, voir le site
officiel ) que le contrôleur WS0010 peut être contrôlé par SPI (et certains
même par I2C !), Mais ils ne mettent pas obstinément des instructions dans la documentation sur ce sujet, et comment le gérer - pas clair. De plus, SPI n'aide pas beaucoup - au lieu de six connexions, nous en avons quatre attachées à l'écran, car à d'autres fins SPI est rarement utilisé dans la pratique amateur. Par conséquent, la solution la plus pratique en termes de réduction du nombre de connexions pour les cartes Arduino standard consiste à utiliser l'expanseur de ports (expandeur) basé sur le bus I2C appelé
PCF8574 . Cela vous permet de réduire le nombre de connexions nécessaires à deux (sans compter l'alimentation), et sur la base des résultats du port TWI standard, qui n'interfère pas avec la connexion de divers capteurs, horloges, etc.
En fait, la puce PCF8574 peut être adaptée à une grande variété d'applications différentes (boutons de lecture, LED clignotantes, etc.). En mode enregistrement, le microcircuit traduit directement la valeur des bits de l'octet transmis via le bus I2C à l'état de huit sorties (lors de la lecture, au contraire, l'état de huit lignes est transféré à l'octet transmis). L'adresse I2C dans PCF8574 peut être modifiée en réglant le niveau sur les trois entrées du paramètre d'adresse, de sorte qu'en utilisant un bus sur deux fils, vous pouvez définir ou lire l'état de jusqu'à 64 lignes. Dans ce cas, certaines fonctionnalités sont dues à l'asymétrie des états "0" et "1" des broches du port parallèle PCF8574, à la fois lorsque vous travaillez sur l'entrée et la sortie (voir
ici ), mais sur notre tâche de contrôle des écrans LCD ou OLED ils n'interféreront pas avec le bus I2C.
Il n’est même pas nécessaire de configurer vous-même la carte de montage. Surtout pour contrôler les écrans compatibles HD44780, de nombreuses variétés de modules adaptateurs sont disponibles (voir photo). Sur un côté, ils ont un connecteur à aiguille de type PLS à une rangée, dont le câblage vous permet de connecter directement un tel module à un écran LCD ou OLED.

Si vous orientez le module de sorte que la sortie du module numéro 1 (le comptage se fait à partir du connecteur d'entrée, voir photo ci-dessus) coïncide avec la sortie 1 de l'écran, alors la carte adaptateur peut être installée directement sur la carte d'affichage comme indiqué sur la photo ci-dessous (photo avec site 9zip.ru). Dans ce cas, bien sûr, le pas des broches et le type de connecteur lui-même doivent correspondre. Par conséquent, parmi les écrans OLED minuscules courants de Winstar, comme sur la photo, seuls les types WEH1602A et 2004A peuvent être connectés, pour le type 1602B, le module devra être tourné de 180, et pour les bien-aimés des personnes 2002A / B et 1202/1204 pour fabriquer des câbles adaptateurs.

Le brochage du boîtier de l'écran OLED est indiqué dans le tableau. Si vous souhaitez connecter vous-même un microcircuit au lieu d'un module prêt à l'emploi (ce qui réduira la taille), mais que vous avez l'intention d'utiliser la bibliothèque décrite ci-dessous, vous pouvez également déterminer la connexion correcte d'un microcircuit nu à partir de ce tableau. Notez qu'en fait, un schéma de connexion d'affichage à quatre fils est utilisé ici et que les bits DB0-DB3 ne sont connectés nulle part, ils sont donc grisés dans le tableau.
Brochage lors de la connexion du PCF8574 et du module basé sur celui-ci à l'écran OLEDLa petite résistance d'accord bleue, ainsi que le cavalier à l'extrémité de la carte, visibles sur la photo, sont conçus pour contrôler le rétroéclairage des écrans LCD (broches 15 et 16) et ne sont pas utilisés dans notre cas. (Par ailleurs, il en va de même pour le bit P3 du port de sortie PCF8574, qui n'est pas utilisé dans notre cas.) Par conséquent, lorsqu'ils sont directement connectés à l'écran OLED 1602B, dont les broches 15 et 16 sont devant la broche 1, ils ne peuvent tout simplement pas être connectés (et module avec 15 et 16 conclusions devra être supprimé afin de ne pas interférer).
Sous cette résistance, il y a des broches A0, A1 et A2 sur la carte pour régler les bits les moins significatifs de l'adresse I2C. Par défaut, ils sont connectés à un niveau élevé, donc l'adresse a la valeur la plus élevée possible dans une plage donnée. Les puces PCF8574 sont disponibles en plusieurs versions qui diffèrent dans cette gamme. Pour PCF8574 sans index alphanumérique (ou pour PCF8574T), l'adresse par défaut sera 0x27, et peut passer à 0x20. Pour PCF8574A, l'adresse par défaut est 0x3F et passe à 0x38.
Pour travailler avec l'écran connecté via PCF8574 via l'interface I2C, il existe une bibliothèque recommandée appelée LiquidCrystal_I2C (voir le site officiel arduino.cc). Bien sûr, comme le LiquidCrystal original, il ne fonctionne qu'avec l'anglais. Il n'y a pas de versions en russe (au moins, celles qui fonctionneraient en toute confiance dans les versions modernes de l'IDE Arduino), et il n'y a pas non plus d'option pour travailler avec un écran OLED. Par conséquent, l'auteur a pris sur lui le travail de raffinement, en prenant la plus simple des variantes
LiquidCrystal_I2C comme les variantes initiales.
Une méthode évidente de russification serait de combiner LiquidCrystal_I2C et LiquidCrystalRus, finalisant ces derniers en termes d'initialisation des écrans OLED. Mais la solution frontale ne fonctionne pas ici - en mode I2C, LiquidCrystalRus n'affiche que la première lettre de la chaîne envoyée via la fonction print (). Je ne comprenais pas à quoi il était connecté, complétant simplement la bibliothèque LiquidCrystal_I2C avec ma fonction de sortie outStr (), qui rejette l'octet le plus élevé de l'encodage UTF-8, et celui du bas encode dans le caractère de la table interne ENGLISH_RUSSIAN (0x02) du contrôleur WS0010.
Une version fixe et mise à jour appelée LiquidCrystal_I2C_OLED peut être téléchargée à
partir d'ici . Si la chaîne ne contient pas de lettres russes, elle doit être sortie avec la fonction print () habituelle, qui fonctionne plus rapidement. L'icône de degré, ainsi que les lettres «» et «», ne peuvent être affichées qu'en indiquant directement les codes octaux (par exemple, «tout» - «soleil \ 265», «22,5 °» - «22,5 \ 337», voir tableau ci-dessous). Des exemples de sortie se trouvent dans le dossier des exemples (n'oubliez pas de changer l'adresse de la puce PCF8574 si vous avez une version autre que PCF8574A ou si l'adresse est modifiée en changeant le bit de modification). Un exemple de la sortie de l'alphabet russe vers l'écran de configuration 1602 (puce PCF8574A, adresse par défaut 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); }
Le résultat correct de la sortie de la première moitié de l'alphabet est montré sur la photo:

Nous soulignons qu'une telle bibliothèque russifiée (comme LiquidCrystalRus, soit dit en passant) est conçue pour fonctionner dans les versions modernes de l'IDE Arduino (à partir d'environ 1.6.1) dans l'environnement Windows 7/8/10. Dans l'environnement Arduino IDE 1.0, ainsi que dans d'autres éditeurs et systèmes d'exploitation fonctionnant en codage mono-octet win1251 (ANSI, cp1251), ces bibliothèques ne perçoivent pas le texte russe direct sur une ligne. Dans ce cas, vous devez utiliser la fonction print () avec des codes octaux de lettres russes, selon le tableau ci-dessous, seule la bibliothèque devra encore utiliser celle-ci (ou modifier LiquidCrystal_I2C pour basculer sur la table ENGLISH_RUSSIAN lors de l'initialisation, voir
ici ). Le contrôleur WS0010 utilise une méthode de codage économique - seules les lettres russes saisies ne correspondent pas aux caractères anglais. Par exemple, «samedi» ressemblerait à «cy \ 262 \ 262o \ 277a».
Codes d'icônes de caractères cyrilliques et de degrés pour le contrôleur WS0010 (table ENGLISH_RUSSIAN, code 0x02)
Un signe que votre environnement / éditeur produit au lieu de UTF-8, un codage à un octet win1251 sera émis au lieu de "A" - "h", au lieu de "a" - "D", etc. (photo envoyée par
Tomasina ):

Si vous ne parvenez pas à expliquer d'où provient l'encodage à un octet dans les environnements Windows modernes, il vous suffit d'utiliser la sortie de code directe, comme indiqué ci-dessus, ou tout simplement de modifier mes codes d'octet faible outTr
-8 dans ma fonction outStr () une par une. de la table
win1251 . Par exemple, nous remplaçons l'opérateur de casse 0x90 (majuscule «A») par le cas 0xC0 et ainsi de suite, et les lignes filtrant l'octet haut (cas 0xd0: break; et cas 0xd1: break;) doivent être supprimées.