Bonjour à tous,

J'ai multiplexé et développé un afficheur 7 segments à 6 chiffres que je contrôle à l'aide d'un Arduino et d'un 75HC595.

Le souci c'est que l'un des afficheurs m'ajoute 3 segments parasite au chiffre que j'affiche.

En clair, pour le chiffre "1" il me met "3" ou pour "2" il me met "6" (voir photo ci-jointe). Quand je connecte le fil qui alimente l'anode du chiffre sur un autre afficheur, ça déplace le problème... L'afficheur incriminé affiche un numéro "propre" et l'autre non quand j'intervertis les anodes...

Ce n'est donc pas mon montage physique qui pose problème... Du moins il n'y a aucun faux contacts ! D'après vous, est-ce que le problème pourrez venir de mon code ? Et si c'est physique, sans faux contacts, qu'est-ce qui peut générer un signal parasite ? Par avance merci...



Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
int dataPin = 2;
int latchPin = 3; 
int clockPin = 4;
 
int dig5 = 9;
int dig4 = 8;
int dig3 = 7;
int dig2 = 6;
int dig1 = 5;
int dig0 = 10; 
 
const byte table[]=
{0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
 
int var0;
int var1;
int var2;
int var3;
int var4;
int var5;
 
void setup() {
 
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
 
pinMode(dig0, OUTPUT);
pinMode(dig1, OUTPUT);
pinMode(dig2, OUTPUT);
pinMode(dig3, OUTPUT);
pinMode(dig4, OUTPUT);
pinMode(dig5, OUTPUT);
 
}
 
void loop() {
 
var0 = 6;
var1 = 5;
var2 = 4;
var3 = 3;
var4 = 2;
var5 = 1;
 
 
{
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, MSBFIRST, table[var5]); 
    digitalWrite(latchPin, HIGH);
 
      digitalWrite(dig1, 0);
      digitalWrite(dig2, 0);
      digitalWrite(dig3, 0);
      digitalWrite(dig4, 1);
      digitalWrite(dig5, 0);
      digitalWrite(dig0, 0);
      delay(1);
 
//Dizaine
    digitalWrite(latchPin, LOW);
 
    shiftOut(dataPin, clockPin, MSBFIRST, table[var4]); 
 
    digitalWrite(latchPin, HIGH);
 
 
      digitalWrite(dig1, 0);
      digitalWrite(dig2, 0);
      digitalWrite(dig3, 1);
      digitalWrite(dig4, 0);
      digitalWrite(dig5, 0);
      digitalWrite(dig0, 0);
      delay(1);
 
//Centaine
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, MSBFIRST, table[var3]); 
    digitalWrite(latchPin, HIGH);
 
 
      digitalWrite(dig1, 0);
      digitalWrite(dig2, 1);
      digitalWrite(dig3, 0);
      digitalWrite(dig4, 1);
      digitalWrite(dig5, 0);
      digitalWrite(dig0, 0);
      delay(1);
 
//Millier
 
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, MSBFIRST, table[var2]); 
    digitalWrite(latchPin, HIGH);
 
 
      digitalWrite(dig1, 1);
      digitalWrite(dig2, 0);
      digitalWrite(dig3, 0);
      digitalWrite(dig4, 0);
      digitalWrite(dig5, 0);
      digitalWrite(dig0, 0);
 
      delay(1);
 
 //Centaine de millier
 
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, MSBFIRST, table[var1]); 
    digitalWrite(latchPin, HIGH);
 
 
      digitalWrite(dig1, 0);
      digitalWrite(dig2, 0);
      digitalWrite(dig3, 0);
      digitalWrite(dig4, 0);
      digitalWrite(dig5, 1);
      digitalWrite(dig0, 0);
      delay(1);
 
//Dizaine de millier
 
 //Centaine de millier
 
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, MSBFIRST, table[var0]); 
    digitalWrite(latchPin, HIGH);
 
 
      digitalWrite(dig1, 0);
      digitalWrite(dig2, 0);
      digitalWrite(dig3, 0);
      digitalWrite(dig4, 0);
      digitalWrite(dig5, 0);
      digitalWrite(dig0, 1);
      delay(1);
 
}
}
Nom : DSC_0393.jpg
Affichages : 1379
Taille : 1,79 Mo