Go Down

Topic: [Resolu] Probleme de conflit I2C ou entre bibliotheques...? (Read 221 times) previous topic - next topic

pioux57

Bonjour à tous,
 
Je travaille sur un projet de contrôleur domotique depuis un moment. J'y apporte des petites améliorations de temps en temps.
 
En gros c'est un boitier avec un clavier et un écran LCD qui m'affiche la température de plusieurs capteurs, stocke un historique des mesures, et calcule minima/maxima ainsi que la tendance pour chacun de ces capteurs. En plus de cela, le boitier est connecté à un autre module (radio) qui envoi des ordres au boitier principal via des entrées numériques, ce dernier déclenchant les relais correspondants.
 
Situation 1.0 (fonctionne)
J'ai une carte Arduino Mega sur laquelle sont connectés les éléments suivants:
  • Un écran LCD 4x20 (I2C)
  • Un pavé numérique
  • 3 capteurs de température digitaux (OneWire)
  • 4 entrées numériques venant d'un boitier externe au montage
  • Une carte 8 relais de puissance 10A
  • Un buzzer piezzo
  • Une sortie série envoyant des données un autre Arduino (Uno), et recevant également des ordres de ce dernier

Le tout alimenté par une alim de PC, 12v pour la carte Mega et 5v pour l'alim des relais de puissance.
 
Situation 2.0 (problème)
J'ai testé un petit montage sur une autre carte (Uno), une simple horloge faite d'un shield DS3231 et d'un petit écran OLED qui affiche l'heure et la date. Les deux fonctionnant via le protocole I2C.
 
Seulement voila, si je teste ma petite horloge seule, tout fonctionne parfaitement. Mais quand j'intègre mon horloge à mon boitier domotique, ça ne fonctionne plus.
Symptômes:
  • Mon écran LCD ne s'allume plus
  • Le programme ne termine pas sa phase d'initialisation (je n'entend pas le BIP du buzzer que j'ai placé à la fin de la boucle d'init)
  • Mon écran OLED reste noir
  • La LED du DS3231 clignote

 
J'ai donc tenté ceci:
  • Si je débranche le fil d'alim du DS3231 et que je redémarre, le boitier fonctionne mais l'écran OLED reste noir
  • Si je débranche l'écran OLED, ça ne change rien au problème
  • Si je débranche l'alim du LCD, le programme démarre correctement et la LED du DS3231 reste allumée fixe

 
Tentative d'analyse
Vu les symptômes, j'ai bien sûr tout de suite pensé à un conflit d'adresse. Malheureusement chacun des composants I2C a bien une adresse différente. Je pensais donc peut-être à un conflit au niveau des registres de ces composants, ou bien des bibliothèques utilisées.
 
Quel est votre avis ?

PS1: Je precise que je n'utilise pas l'IDE Arduino, mais VSCode avec le plugin PlatformIO
PS2: Les bibliothèques que j'utilise sont:
Code: [Select]
#include <OneWire.h>
#include <DallasTemperature.h>
#include <math.h>
//#include <Wire.h> // Deja defini dans le LiquidCrystal_I2C.h
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
#include <DS3232RTC.h>
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

hbachetti

Linux is like a wigwam: no Windows, no Gates, and an Apache inside ...

68tjs

Perso je préfère la version modifiée par fdufnews.

pioux57

Merci mais j'avais deja passé les composants au scanner. Je n'ai pas le matos sous la main là mais si je me souviens bien:
LCD=0x3F
RTC=0x68
OLED=0x3C

hbachetti

Quote
La LED du DS3231 clignote
Très étonnant.
Normalement la LED est branchée sur l'alimentation du module.
Je suppose que tu l'as branché sur le 5V de la UNO ?
Tu pourrais mesurer ce 5V ?
Linux is like a wigwam: no Windows, no Gates, and an Apache inside ...

pioux57

Oui elle est bien branchée sur le 5V de l'Arduino Mega (il en va de meme pour l'alim du LCD). L'ecran OLED, quant à lui, est sur la sortie 3,3v du Mega.

La LED ne clignote pas de manière regulière.

Oui je peux mesurer ça. Je le fais dès que je rentre chez moi.

pioux57

Effectivement tu avais raison, un coup j'ai 5v, un coup j'ai 200mv... la tension n'est pas constante. Je pense que mon bornier en est la cause car si je change de borne je n'ai plus du tout de tension. Il doit etre defectueux.
Je vais essayer de le remplacer temporairement par une platine d'essai et refaire le test.

hbachetti

Linux is like a wigwam: no Windows, no Gates, and an Apache inside ...

pioux57

Je confirme, ca n'etait dû qu'à ce faux contact. Apres remontage sur la platine d'essai tout fonctionne parfaitement.

Parfois on cherche un peu trop la complication :)

Merci pour le coup de main.

Go Up