Afficheur 7 segments I2C ne fonctionne pas

Bonjour à toutes et à tous,

Je n'arrive pas à faire fonctionner mes afficheurs 7 segments... Il s'agit de petits afficheurs 4 digits avec un driver TM1637, qui fonctionnent en I2C donc. Ça ressemble à ça :


Je l'ai correctement raccordé (+5V, GND, A4, A5) et là les ennuis commencent : même alimenté rien ne s'allume. J'ai téléchargé et inclus la bibliothèque du driver TM1637, même avec le programme de test fourni ça ne fonctionne pas. J'ai essayé 2 afficheurs différents, sur 2 cartes différentes (une nano et une mega, à terme il ne servira qu'avec la nano), rien à faire. Lorsque je lance un scanner I2C l'afficheur n'est même pas détecté.

Je n'y comprends plus rien, à côté de quoi aurais-je pu passer ?
Merci par avance pour vos idées et conseils,
Aurélien

Salut.

Tu te trompes. Le TM1637 n'est pas I2C.

Pour le reste il manque plein d'infos.

  • bibliothèque utilisée
  • ton code

@+

neiler0:
Bonjour à toutes et à tous,

Je n'arrive pas à faire fonctionner mes afficheurs 7 segments... Il s'agit de petits afficheurs 4 digits avec un driver TM1637, qui fonctionnent en I2C donc. Ça ressemble à ça :


Je l'ai correctement raccordé (+5V, GND, A4, A5) et là les ennuis commencent : même alimenté rien ne s'allume. J'ai téléchargé et inclus la bibliothèque du driver TM1637, même avec le programme de test fourni ça ne fonctionne pas. J'ai essayé 2 afficheurs différents, sur 2 cartes différentes (une nano et une mega, à terme il ne servira qu'avec la nano), rien à faire. Lorsque je lance un scanner I2C l'afficheur n'est même pas détecté.

Je n'y comprends plus rien, à côté de quoi aurais-je pu passer ?
Merci par avance pour vos idées et conseils,
Aurélien

Bonjour
comm indiqué par hbachetti
ce n'est pas un compo I²C
voir cette lib

Bonjour hbachetti et Artouste, merci pour vos réponses !
Ah bon ? J'ai trouvé ce tuto qui parle du TM1637 et d'I2C... A quoi correspondent les pins CLK et DIO ?

J'utilise cette bibliothèque, qui s'appelle "TM1637" tout simplement (c'est la même que celle proposée par Artouste), et comme programme c'est l'exemple fourni avec la bibliothèque que voici :

#include <Arduino.h>
#include <TM1637Display.h>

// Module connection pins (Digital Pins)
#define CLK 5
#define DIO 4

// The amount of time (in milliseconds) between tests
#define TEST_DELAY   2000

const uint8_t SEG_DONE[] = {
	SEG_B | SEG_C | SEG_D | SEG_E | SEG_G,           // d
	SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F,   // O
	SEG_C | SEG_E | SEG_G,                           // n
	SEG_A | SEG_D | SEG_E | SEG_F | SEG_G            // E
	};

TM1637Display display(CLK, DIO);

void setup()
{
}

void loop()
{
  int k;
  uint8_t data[] = { 0xff, 0xff, 0xff, 0xff };
  display.setBrightness(0x0f);

  // All segments on
  display.setSegments(data);
  delay(TEST_DELAY);

  // Selectively set different digits
  data[0] = 0b01001001;
  data[1] = display.encodeDigit(1);
  data[2] = display.encodeDigit(2);
  data[3] = display.encodeDigit(3);

  for(k = 3; k >= 0; k--) {
	display.setSegments(data, 1, k);
	delay(TEST_DELAY);
	}

  display.setSegments(data+2, 2, 2);
  delay(TEST_DELAY);

  display.setSegments(data+2, 2, 1);
  delay(TEST_DELAY);

  display.setSegments(data+1, 3, 1);
  delay(TEST_DELAY);


  // Show decimal numbers with/without leading zeros
  bool lz = false;
  for (uint8_t z = 0; z < 2; z++) {
	for(k = 0; k < 10000; k += k*4 + 7) {
		display.showNumberDec(k, lz);
		delay(TEST_DELAY);
	}
	lz = true;
  }

  // Show decimal number whose length is smaller than 4
  for(k = 0; k < 4; k++)
	data[k] = 0;
  display.setSegments(data);

	// Run through all the dots
	for(k=0; k <= 4; k++) {
		display.showNumberDecEx(0, (0x80 >> k), true);
		delay(TEST_DELAY);
	}

  display.showNumberDec(153, false, 3, 1);
  delay(TEST_DELAY);
  display.showNumberDec(22, false, 2, 2);
  delay(TEST_DELAY);
  display.showNumberDec(0, true, 1, 3);
  delay(TEST_DELAY);
  display.showNumberDec(0, true, 1, 2);
  delay(TEST_DELAY);
  display.showNumberDec(0, true, 1, 1);
  delay(TEST_DELAY);
  display.showNumberDec(0, true, 1, 0);
  delay(TEST_DELAY);

  // Brightness Test
  for(k = 0; k < 4; k++)
	data[k] = 0xff;
  for(k = 0; k < 7; k++) {
    display.setBrightness(k);
    display.setSegments(data);
    delay(TEST_DELAY);
  }
  
  // On/Off test
  for(k = 0; k < 4; k++) {
    display.setBrightness(7, false);  // Turn off
    display.setSegments(data);
    delay(TEST_DELAY);
    display.setBrightness(7, true); // Turn on
    display.setSegments(data);
    delay(TEST_DELAY);  
  }

  // Done!
  display.setSegments(SEG_DONE);

  while(1);
}

Tu définis :

#define CLK 5
#define DIO 4

Et ensuite tu dis :

Je l'ai correctement raccordé (+5V, GND, A4, A5)

A4 et A5 sont deux pins analogiques également utilisées par l'I2C.
D4 et D5 sont deux pins digitales.

Sans modifier ton code, branche sur 4 et 5 et non pas sur A4 A5.

@+

Tout simplement...

Merci beaucoup hbachetti ! Ça fonctionne, je me suis fait piéger par le tuto cité dans mon précédent message, qui parle d'I2C et de raccorder l'afficheur sur les pins analos (c'est exactement les mêmes afficheurs que moi pourtant !) En tout cas ça fonctionne parfaitement avec les sorties digitales, merci encore !

Aurélien

qui parle d'I2C et de raccorder l'afficheur sur les pins analos

Mais tu peux aussi. Les pins analogiques peuvent être utilisées en tant qu'entrées / sorties numériques à l'exception des pins A6 et A7.

Mais dans ce cas, il faut écrire :

#define CLK A5
#define DIO A4

La seule erreur est de parler d'I2C.

Content de t'avoir aidé. :slight_smile:

@+