Je travaille sur un projet qui active un écran LCD 20x4 en I2C à partir d’un Arduino Uno R3 et il fonctionne correctement.
J’ai souhaité connecter ce projet sur l’Arduino IoT cloud en remplaçant la carte Arduino Uno R3 par une carte Arduino Uno R4 Wifi.
Le projet est maintenant connecté mais malgré mes efforts, rien ne s’affiche sur l’écran LCD.
La compilation dans l’IDE Arduino signale une incompatibilité de la bibliothèque « LiquidCrystal_I2C » avec une architecture renesas utilisée dans l’Arduino R4, sans pour autant bloquer la compilation.
Bonjour le mieux est de commencer avec un programme mini du type hello word
Et déjà de le faire fonctionner.
10 lignes de code max
Les declarations l’initialisation et l affichage d un mot
Basta
Oui, pour y voir clair, c'est mieux. J'ai essayé avec le code ci-dessous et malheureusement c'est pareil.
Avec un scanner I2C, l'écran LCD est bien détecté avec sa bonne adresse, la commande lcd.backlight() fonctionne, mais c'est tout !
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
void setup()
{
lcd.init(); // initialisation de l'afficheur
}
void loop()
{
lcd.backlight();
// Envoi du message
lcd.setCursor(0, 0);
lcd.print(" Go Tronic");
lcd.setCursor(0,1);
lcd.print(" I2C Serial LCD");
}
Valeur un peu faible non ?
Le courant dans les collecteurs ouverts est borné, ce sont des petits transistors.
S'il y a plusieurs composants I2C sur le bus et si tous ont des résistances de tirage, toutes les résistances se retrouvent en parallèle.
Baisser la valeur des résistances se justifie s'il y a trop de capacité sur la ligne.
C'est à dire câble de plusieurs mètres ou une dizaine de composants I2C sur le bus.
Chaque composant I2C apporte une capacité autour de 10 pF.
Datasheet de l'atmega328p
Paragraphe 28.8 (Electrical characteristics ->I2C)
Value of pull-up résistor : Rp <= (Vcc-0,4) / 3 mA
Rp <= 1,533 kohms
Toujours selon la datasheet :
Valeur max :
Sans tenir compte de la capa apportée par les fils.
Fh<= 100k Rpull-up max = 500k si un maitre +1 esclave I2C (2x10pF)
Fh > 100k Rpull-up max = 150 k (toujours si un 1 maitre +1 esclave I2C (2x10pF)
J'utilise la même bibliothèque. En revanche, je suis passé complètement à côté des résistances de pull-up. Avec l'Arduino Uno R3 je n'en utilise pas et les périphériques connectés sur le bus I2C (écran LCD et horloge DS3231) fonctionnent correctement.
Avec l'Arduino Uno R4 Wifi, le DS3231 fonctionne correctement sans les résistances mais l'écran ne fonctionne pas, même avec les résistances de 5,1 Kohms.
Merci d'avoir attiré mon attention sur cette problématique de résistances de pull-up, je vais sortir l'oscilloscope pour y voir plus clair.
En fait sur l'Arduino R4, le microcontrôleur est un R7FA4M1 et non un atmegaa328P comme sur le R3.
Mais la vérification des niveaux du bus I2C permettra d'avancer, Merci
Ca c'est pour le UNO R3. sur le R4 il faut mettre les PULLUP sur les pin SCL et SDA.
En général, il est préférable de n'utiliser que ces pin SCL et SDA, on peut ainsi passer d'un UNO à un Mega ou un R4 sans problème.
Pour moi, sur l'Arduino R4, la broche A4 est reliée au SDA et la broche A5 est reliée au SCL.
Ci-joint les signaux capturés sur ces broches sans résistance de pull-up et avec le DS3231 en plus sur le bus, mais non adressé. SCL en bleu et SDA en jaune et rien sur l'écran
Oui, j'ai oublié de le préciser, sondes en position x10.
C'est un module Handetk 6022BL sur USB que j'utilise pour visualiser les signaux quand c'est nécessaire, donc c'est vraiment minimal comme analyse, mais si on est opiniâtre on peut éclairer certaines situations.
J'ai passé le sketch I2CexpDiag qui me dit que tout est OK
D'après cette page l'affichage LCD I2C ne pose pas de pb particulier sur Uno R4
-as tu un autre exemplaire d'afficheur LCD I2C ?
-l'adaptateur I2C est -il correctement inséré sur l'afficheur ?
-L'afficheur qui pose actuellement problème était il OK avec une autre carte ?
Merci pour le tutoriel, je vais lire ça à tête reposée.
J'ai deux afficheurs LCD 20x4, le premier est intégré dans le projet avec l'Arduino Uno R3 et l'autre (tout neuf, donc jamais testé) c'est celui que j'aimerai tester avec l'Arduino Uno R4 avant de remplacer le R3 par le R4 dans le boitier.
En fait, avant de transformer mon projet en IoT, ce qui ne me pose pas de problème bloquant, j'essaie tous les périphériques individuellement, les uns après les autres, histoire d'y aller pas à pas.
Les capteurs de température DS18B20 , le module horloge DS3231, le lecteur de carte SD fonctionnent de façon nominale, il n'y a que l'écran qui résiste.
L'adaptateur I2C est soudé sur l'afficheur et les soudures ont l'air correctes.