Arduino mit Schieberegister 74HC595 + LEDs , warum funktioiert dieses Programm nicht?

Gast #4959059
Lesenswert?
• ▲
▼
Hallo,
ich habe mit meinem Freund eine Schaltung aufgebaut, die aus zwei 
Schieberegister 74HC595, 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 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, 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);

}

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.