2 TM1637 avec la même pin CLK s'etaint

bonjour
je travail sur un projet avec malheureusement par manque de pins sur la carte arduino nano, j'ai opter pour metre deux module TM1637 avec le même pin CLK.
le projet ça marche mais après une période d'une journée à deux jours l'un des modules s'eteind :slight_smile: ??.
je vous sollicite si vous disposez de remède pour ce problème

// Initialize display 2

const byte PIN_CLK_D1 = 3; // define CLK pin (any digital pin)
const byte PIN_DIO_D1 = 4; // define DIO pin (any digital pin)
SevenSegmentTM1637 display2(PIN_CLK_D1, PIN_DIO_D1);

// Initialize display 1

const byte PIN_CLK_D2 = 3; // define CLK pin (any digital pin)
const byte PIN_DIO_D2 = 12; // define DIO pin (any digital pin)
SevenSegmentTM1637 display1(PIN_CLK_D2, PIN_DIO_D2);

merci d'avance

Bonjour,
Je m'étonne que ça fonctionne avec une pin clock commune.
J'aurai plutôt mis la pin data commune et une pin clock pour chaque afficheur.

bonjour
attention
les deux recoivent deux informations différentes donc:

display2.print("0120");
display1.print("0340");
merci

Oui, mais s'il n'y a pas de clock, il n'y a aucun transfert. Donc pas d'interférence.

rebonjour
je vous assure avec CLK commun ça marche avec ce petit soucis, avec DIN comun, je ne l'ai pas essayer.

Ca ne coute rien d'essayer.

bonjour
je suis très satisfait de votre proposition de boucler les DIO au lieux de CLK même si pour certain TM1637 ça marche aussi pour CLK comun.
je vous remercie encore pour participation utile dans mon projet.
je vous souhaite bonne chance dans votre vie pro et fam.
à la prochaine :slight_smile: :slight_smile: :slight_smile: :slight_smile:

Content que ça fonctionne.
J'ai regardé la datasheet pour voir pourquoi ça fonctionne avec une clock commune, c'est dû au fait qu'il faut un start sur DIO. Donc sans start pas de prise en compte des données, mais ça me parait quand même moins fiable qu'avec des clock séparées.

Re- bonjour,
dommage :slight_smile: :slight_smile: :slight_smile: , un affichage des deux s'eteind c'après midi, donc le problème pérciste encore avec les deux méthode DIO commun et CLK Commun.
j'attend de vous encore un effort collectif pour remédier à ce problème.
juste une information 'utilise des affichages model "Marque diymore " avec des coleurs vert jaunne,
type en image:

merci d'avance pour votre support

0,36 pouces pouce 7 segments écran DEL 4 chiffres TM1637 horloge module tube numérique 5 couleurs | eBay[/

Le problème ne vient peut être pas du fait que tu pilotes 2 afficheurs avec un signal commun, mais d'autre chose.
Mets ton programme en entier.

bonsoir

ci-joint le code de mon programme hebdomadaire

[#include "Wire.h"
#include "TM1637.h"
#include "SevenSegmentTM1637.h"
#include "SevenSegmentExtended.h"

#define CLK 5
#define DIO 6
#define brightness 7

TM1637 tm1637(CLK,DIO);
#define DS3231_I2C_ADDRESS 0x68

// Initialize display 1
const byte PIN_CLK_D1 = 3; // define CLK pin (any digital pin)
const byte PIN_DIO_D1 = 4; // define DIO pin (any digital pin)
SevenSegmentTM1637 display2(PIN_CLK_D1, PIN_DIO_D1);

// Initialize display 2
const byte PIN_CLK_D2 = 12; // define CLK pin (any digital pin)
const byte PIN_DIO_D2 = 4; // define DIO pin (any digital pin)
SevenSegmentTM1637 display1(PIN_CLK_D2, PIN_DIO_D2);

volatile boolean flag;

byte decToBcd(byte val){
return ( (val/10*16) + (val%10) );
}

byte bcdToDec(byte val){
return ( (val/16*10) + (val%16) );
}

void setDateDs3231(byte second,
byte minute, // 0-59
byte hour, // 1-23
byte dayOfWeek, // 1-7
byte dayOfMonth, // 1-28/29/30/31
byte month, // 1-12
byte year) // 0-99
{
Wire.beginTransmission(DS3231_I2C_ADDRESS);
Wire.write(0);
Wire.write(decToBcd(second));
Wire.write(decToBcd(minute));
Wire.write(decToBcd(hour));
Wire.write(decToBcd(dayOfWeek));
Wire.write(decToBcd(dayOfMonth));
Wire.write(decToBcd(month));
Wire.write(decToBcd(year));
//Wire.write(decToBcd(etat));
Wire.endTransmission();
}

void getDateDs3231(byte *second,
byte *minute,
byte *hour,
byte *dayOfWeek,
byte *dayOfMonth,
byte *month,
byte *year)
{

Wire.beginTransmission(DS3231_I2C_ADDRESS);
Wire.write(0);
Wire.endTransmission();

Wire.requestFrom(DS3231_I2C_ADDRESS, 7);

*second = bcdToDec(Wire.read() & 0x7f);
*minute = bcdToDec(Wire.read());

*hour = bcdToDec(Wire.read() & 0x3f);
*dayOfWeek = bcdToDec(Wire.read());
*dayOfMonth = bcdToDec(Wire.read());
*month = bcdToDec(Wire.read());
*year = bcdToDec(Wire.read());

}

void setup() {
Serial.begin(9600);
while (!Serial);
Wire.begin();

tm1637.init();
tm1637.set(brightness);

display2.begin(); // initializes the display
display2.setBacklight(100); // set the brightness to 100 %
delay(1000);// wait 1000 ms

display1.begin(); // initializes the display
display1.setBacklight(100); // set the brightness to 100 %
delay(1000);// wait 1000 ms

}

void loop(){

byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
getDateDs3231(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
int8_t TimeDisp[4];

TimeDisp[0] = hour / 10;
TimeDisp[1] = hour % 10;
TimeDisp[2] = minute / 10;
TimeDisp[3] = minute % 10;

tm1637.display(TimeDisp);

if(dayOfWeek ==1)
{
display2.print("0120");
display1.print("0340");

}
else if(dayOfWeek ==2)
{
display2.print("0220");
display1.print("0440");
}
else if(dayOfWeek ==3)
{
display2.print("0320");
display1.print("0540");
}
else if(dayOfWeek ==4)
{
display2.print("0420");
display1.print("0640");
}
else if(dayOfWeek ==5)
{
display2.print("0520");
display1.print("0740");
}
else if(dayOfWeek ==6)
{
display2.print("0620");
display1.print("0840");

} else if(dayOfWeek ==7)
{
display2.print("0720");
display1.print("0940");
}

}

]

Je ne vois pas de problème particulier.
Par contre tu affiches 'à fond la caisse' alors que rien ne change, tu devrais mettre au moins un delay(1000) dans la loop()

Question pour satisfaire ma curiosité: à quoi correspondent les codes affichés suivant les jours?

Mets ton code entre balises de code.

bonsoir
j'ai faite une simulation avec les deux option CLK commun & CIO commun en ajoutant des instruction display2.clear();
le résultat est la version DIO Commun s'eteind après 24h la version avec CLK Commun fonctionne toujours mais les chiffres clignotent légèrement.
pour revenir avetre question de l’utilité il s'agit d'un programme hebdomadaire po deux entités distinct

les N° correspondent au N° des OF à exécuter
merci

#include "Wire.h"
#include "TM1637.h"
#include "SevenSegmentTM1637.h"
#include "SevenSegmentExtended.h"


#define CLK 5         
#define DIO 6 
#define brightness 7 

TM1637 tm1637(CLK,DIO);  
#define DS3231_I2C_ADDRESS 0x68

// Initialize display 1
const byte PIN_CLK_D1 = 3;   // define CLK pin (any digital pin)
const byte PIN_DIO_D1 = 4;   // define DIO pin (any digital pin)
SevenSegmentTM1637 display2(PIN_CLK_D1, PIN_DIO_D1);

// Initialize display 2
const byte PIN_CLK_D2 = 3;   // define CLK pin (any digital pin)
const byte PIN_DIO_D2 = 12;   // define DIO pin (any digital pin)
SevenSegmentTM1637 display1(PIN_CLK_D2, PIN_DIO_D2);





volatile boolean flag;

byte decToBcd(byte val){
  return ( (val/10*16) + (val%10) );
}

byte bcdToDec(byte val){
  return ( (val/16*10) + (val%16) );
}

void setDateDs3231(byte second,  
                   byte minute,        // 0-59
                   byte hour,          // 1-23
                   byte dayOfWeek,     // 1-7
                   byte dayOfMonth,    // 1-28/29/30/31
                   byte month,         // 1-12
                   byte year)          // 0-99
{
   Wire.beginTransmission(DS3231_I2C_ADDRESS);
   Wire.write(0);
   Wire.write(decToBcd(second));    
   Wire.write(decToBcd(minute));
   Wire.write(decToBcd(hour));     
   Wire.write(decToBcd(dayOfWeek));
   Wire.write(decToBcd(dayOfMonth));
   Wire.write(decToBcd(month));
   Wire.write(decToBcd(year));
   //Wire.write(decToBcd(etat)); 
   Wire.endTransmission();
}

void getDateDs3231(byte *second,
          byte *minute,
          byte *hour,
          byte *dayOfWeek,
          byte *dayOfMonth,
          byte *month,
          byte *year)
{

  Wire.beginTransmission(DS3231_I2C_ADDRESS);
  Wire.write(0);
  Wire.endTransmission();

  Wire.requestFrom(DS3231_I2C_ADDRESS, 7);

  *second     = bcdToDec(Wire.read() & 0x7f);
  *minute     = bcdToDec(Wire.read());
  
  *hour       = bcdToDec(Wire.read() & 0x3f); 
  *dayOfWeek  = bcdToDec(Wire.read());
  *dayOfMonth = bcdToDec(Wire.read());
  *month      = bcdToDec(Wire.read());
  *year       = bcdToDec(Wire.read());
  
}

void setup() {
  Serial.begin(9600);
   while (!Serial);
  Wire.begin();
  
  tm1637.init();
  tm1637.set(brightness);  
  
  display2.begin();            // initializes the display
  display2.setBacklight(100);  // set the brightness to 100 %
  delay(1000);// wait 1000 ms
  
  display1.begin();            // initializes the display
  display1.setBacklight(100);  // set the brightness to 100 %
  delay(1000);// wait 1000 ms

}

void loop(){
  
  byte second, minute, hour, dayOfWeek, dayOfMonth, month, year; 
  getDateDs3231(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); 
  int8_t TimeDisp[4]; 
  
  TimeDisp[0] = hour / 10;
  TimeDisp[1] = hour % 10;
  TimeDisp[2] = minute / 10;
  TimeDisp[3] = minute % 10;



 tm1637.display(TimeDisp);
 
 
    if(dayOfWeek ==1)
{
  display2.clear();
  display2.print("0120");
  display1.clear();
  display1.print("0340");

}
         else if(dayOfWeek ==2)
{
  display2.clear();
  display2.print("0220");
  display1.clear();
  display1.print("0440");
}
         else if(dayOfWeek ==3)
{
  display2.clear();
  display2.print("0320");
  display1.clear();
  display1.print("0540");
} 
         else if(dayOfWeek ==4)
{
  display2.clear();
  display2.print("0420");
  display1.clear();
  display1.print("0640"); 
}
         else if(dayOfWeek ==5)
{
  display2.clear();
  display2.print("0520");
  display1.clear();
  display1.print("0740");
}   
         else if(dayOfWeek ==6)
{
  display2.clear();
  display2.print("0620");
  display1.clear();
  display1.print("0840");
  
}        else if(dayOfWeek ==7)
{
  display2.clear();
  display2.print("0720");
  display1.clear();
  display1.print("0940");
}
    
}