Hallo, ich habe mit meinem Freund eine Schaltung aufgebaut, die aus zwei Schieberegistern, 74HC595, besteht und an diesen sind LEDs angeschlossen, um die Signalausgabe zu kontrollieren. Die Schieberegister und die LEDs funktionieren mit anderen Codes Bsp. 0B0101010101010101 perfekt. Doch jetzt lassen wir den Code automatisch hochzählen. Dabei sind die letzten 8 Ziffern gleich. Nachdem die 8 Ziffern gemeinsam den Wert 11111111 erreicht haben Schaltet der vorhergehende Code eins hoch. Die ersten vier Ziffern bleiben dabei immer konstant. Somit lautet die Zusammensetzung folgendermaßen: 0B 1001 0000 0001 0001 konstant Mothercode zwei gleiche Codes dazu die Tabelle des Arduinos zur Veranschaulichung: ===================================== MotherCode: 0 ===================================== 1001000000000000 1001000000010001 1001000000100010 1001000000110011 1001000001000100 1001000001010101 1001000001100110 1001000001110111 1001000010001000 1001000010011001 1001000010101010 1001000010111011 1001000011001100 1001000011011101 1001000011101110 1001000011111111 ===================================== MotherCode: 1 ===================================== 1001000100000000 1001000100010001 1001000100100010 1001000100110011 1001000101000100 1001000101010101 1001000101100110 1001000101110111 1001000110001000 1001000110011001 1001000110101010 1001000110111011 1001000111001100 1001000111011101 1001000111101110 1001000111111111 ===================================== MotherCode: 10 ===================================== 1001001000000000 1001001000010001 1001001000100010 1001001000110011 1001001001000100 1001001001010101 1001001001100110 1001001001110111 1001001010001000 1001001010011001 1001001010101010 1001001010111011 1001001011001100 1001001011011101 1001001011101110 1001001011111111 ===================================== MotherCode: 11 ===================================== 1001001100000000 1001001100010001 1001001100100010 1001001100110011 1001001101000100 1001001101010101 1001001101100110 1001001101110111 1001001110001000 1001001110011001 1001001110101010 1001001110111011 1001001111001100 1001001111011101 1001001111101110 1001001111111111 Doch wenn ich diesen Code zum Schieberegister schicke, werden alle LEDs auf HIGH gesetzt, sobald der Mothercode um eins aufgewertet wird, woran liegt das? Das ist das Programm: --------------------------------------------------------- int speicherPin = 10; int taktPin = 11; int datenPin = 9; long motherCode = 0; void setup() { Serial.begin(9600); } void loop() { Serial.println("====================================="); Serial.print("MotherCode: "); Serial.println(motherCode, BIN); Serial.println("====================================="); sendBytes(65499); delay(1000); for(int regalCodeCounter = 0; regalCodeCounter < 16; regalCodeCounter++) { long fullCode = (0B1001 << 4) + motherCode; // 1001 + motherCode fullCode = fullCode << 8; // 1001 + motherCode + 0000 0000 fullCode += getRegalCode(regalCodeCounter); // 1001 + motherCode + regalCode sendBytes(fullCode); Serial.println(fullCode,BIN); delay(1000); } delay(1000); // Eine Sekunde Verzögerung für jeden neuen MotherCode motherCode++; // MotherCode hochzählen if(motherCode == 16) // MotherCode zurücksetzen motherCode = 0; } // Generiere den RegalCode, welcher aus zwei identischen Zahlen besteht int getRegalCode(long regalCodeCounter) { long sendRegalCode = 0B11111111; sendRegalCode = regalCodeCounter << 4; sendRegalCode += regalCodeCounter; return sendRegalCode; } void sendBytes(long data) { digitalWrite(speicherPin, LOW); shiftOut(datenPin, taktPin, MSBFIRST, data >> 8); shiftOut(datenPin, taktPin, MSBFIRST, data & 255); digitalWrite(speicherPin, HIGH); }
t800w schrieb: > auf HIGH gesetzt, sobald der Mothercode um eins aufgewertet wird, woran > liegt das? Das du ein Moron bist ? Beitrag "Re: Arduino mit Schieberegister 74HC595 + LEDs , warum funktioiert dieses Programm nicht?"
t800w schrieb: > Doch wenn ich diesen Code zum Schieberegister schicke, werden alle LEDs > auf HIGH gesetzt, sobald der Mothercode um eins aufgewertet wird, woran > liegt das? Naja, 2 LED dürften aus bleiben, wenn sendBytes(65499); ausgeführt wurde.
Hi @Marc Könnte auch einfach nur Unkenntnis sein - statt die Seite erneut anzufordern, einfach nur F5 gedrückt und ein neues/weiteres Thema erstellt. So was KÖNNTE man sich überlegen, statt Jedem zuerst Schwachsinn vorzuwerfen. Anbei hat der Post auch unten drunter einen 'Meldeknopf' ... aber wem sage ich Das ... MfG
:
Bearbeitet durch User
Dein Code lässt sich übrigens ohne Probleme auf das hier eindampfen, und wird damit meiner Meinung nach um einiges verständlicher.
1 | int speicherPin = 10; |
2 | int taktPin = 11; |
3 | int datenPin = 9; |
4 | |
5 | void setup() |
6 | {
|
7 | Serial.begin(9600); |
8 | }
|
9 | |
10 | void loop() |
11 | {
|
12 | unsigned char code[2]; |
13 | |
14 | for (int mother = 0; mother < 16; mother++) |
15 | {
|
16 | Serial.println("====================================="); |
17 | Serial.print("MotherCode: "); |
18 | Serial.println(mother, BIN); |
19 | Serial.println("====================================="); |
20 | |
21 | for(int regal = 0; regal < 16; regal++) |
22 | {
|
23 | code[1] = 0B10010000 | mother; |
24 | code[0] = regal << 4 | regal; |
25 | |
26 | digitalWrite(speicherPin, LOW); |
27 | shiftOut(datenPin, taktPin, MSBFIRST, code[1]); |
28 | shiftOut(datenPin, taktPin, MSBFIRST, code[0]); |
29 | digitalWrite(speicherPin, HIGH); |
30 | |
31 | delay(1000); |
32 | }
|
33 | }
|
34 | }
|
:
Bearbeitet durch User
Joe F. schrieb: > Dein Code lässt sich übrigens ohne Probleme auf das hier eindampfen, und > wird damit meiner Meinung nach um einiges verständlicher. Und wird weiterhin nicht funktionieren. Kein Pin wird als Ausgang deklariert.
Wie sieht eigentlich die Verkabelung aus? Mit 30 cm Jumperleitungen auf dem Breadboard und ohne Abblockkondensatoren, vermute ich mal... Faustregel: am IC KÜRZESTMÖGLICH einen 100n KerKo und für 3 bis 5 IC's nochmal einen Elko von ca. 47µ. Verkabelung so kurz wie möglich. Die 3 Datenleitungen gehen parallel an alle Schieberegister, die Leitungslängen von Seiten des Arduinos addieren sich also. 2x 30 cm ergeben 60 cm Länge und das kann für digitale Signale schon zu viel sein. Da geht es um Nanosekunden. Bei derartigen Leitungslängen kann ein Signal am Ende reflektiert werden und als Echo zurückkommen. Dazu Leitungsübersprechen und Spannungseinbrüche, weil die Betriebsspannung nich vernünftig am IC abgeblockt wurde. Gib den IC's doch wenigstens eine Chance, zu funktionieren ;-)
Marc V. schrieb: > Und wird weiterhin nicht funktionieren. > > Kein Pin wird als Ausgang deklariert. Ja OK, muss man dann noch machen. Mir ging es dabei auch mehr um die unnötige Verwendung von Funktionen und die komplizierte Art die äussere Schleife zu bauen und die unübersichtliche Art und Weise, wie der Ausgabecode zusammengebastelt wird.
:
Bearbeitet durch User
Joe F. schrieb: > Mir ging es dabei auch mehr um die unnötige Verwendung von Funktionen > und die komplizierte Art die äussere Schleife zu bauen und die > unübersichtliche Art und Weise, wie der Ausgabecode zusammengebastelt > wird. Nichts gegen deinen Vorschlag einzuwenden...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.