Hallo,
ich habe hier ein Schieberegsiter, konkret ein 74HC959. Ich wollte
erstmal nur zum testen ein LED-Lauflicht erzeugen. Dafür habe ich
folgenden Code geschrieben
1 | //Pin connected to ST_CP of 74HC595
|
2 | //Bei einer Flanke werden die Daten im Schieberegister ins Ausgangsregister übernommen
|
3 | int latchPin = 8;
|
4 |
|
5 | //Pin connected to SH_CP of 74HC595
|
6 | //Bei einer Flanke wird der Wert der am DataPin anliegt ins Schieberegister übernommen, zusätzlich, wird alles einmal weitergeshifted
|
7 | int clockPin = 18;
|
8 |
|
9 | //Pin connected to DS of 74HC595
|
10 | //Hier liegt der Wert an, der in das Schieberegister übernommen werden soll.
|
11 | int dataPin = 17;
|
12 |
|
13 | byte i = 9;
|
14 |
|
15 | void setup() {
|
16 | pinMode(latchPin, OUTPUT);
|
17 | pinMode(clockPin, OUTPUT);
|
18 | pinMode(dataPin, OUTPUT);
|
19 | }
|
20 |
|
21 | void loop() {
|
22 | if(i == 9)
|
23 | {
|
24 | //Ersten Impuls erzeugen
|
25 | digitalWrite(dataPin, HIGH);
|
26 | digitalWrite(clockPin, HIGH);
|
27 | digitalWrite(latchPin, HIGH);
|
28 | delay(100);
|
29 | digitalWrite(dataPin, LOW);
|
30 | digitalWrite(clockPin, LOW);
|
31 | digitalWrite(latchPin, LOW);
|
32 | delay(900);
|
33 | i = 1;
|
34 | }
|
35 | else
|
36 | {
|
37 | //Durchschieben
|
38 | digitalWrite(clockPin, HIGH);
|
39 | digitalWrite(latchPin, HIGH);
|
40 | delay(100);
|
41 | digitalWrite(clockPin, LOW);
|
42 | digitalWrite(latchPin, LOW);
|
43 | delay(900);
|
44 | i++;
|
45 | }
|
46 | }
|
Die ersten 4 LEDs leuchten so wie sie sollen, d.h. eine nach der
anderen. Sobald aber die 5. LED leuchten sollte, leuchten LED 5 UND 6.
Wenn die 6. leuchten sollte, leuchtet KEINE, und wenn dann die 7.
leuchten sollte, leuchtet die 6. mit.
Kann mir einer sagen, warum?
Gruß,
Freddy