2 x Shift Reiter arbeitet nicht

Hallo Zusammen,

ich bin gerade dabei, mir eine Zwangsjacke zu kaufen, weil ich langsam wahnsinnig werde. Ich finde einfach den Fehler nicht. :kissing:
Das zweite Schieberegister verhält sich immer synchron zum ersten. Ich hätte aber gerne ein Lauflicht :grinning:

Ich habe die Schaltung nachgebaut, wie in

https://www.arduino.cc/en/Tutorial/ShiftOut

Allerdings habe ich den Kondensator nicht eingebaut; kann es daran liegen?

Meine Schaltung findet Ihr unter

(Achtung die Seite auf 123d.circuits.io braucht ein wenig, bis sie geladen ist)

Unter dem Button Code-Editor sieht man den Code
Mit dem Button Simulation kann man simulieren.

Es wäre super, wenn mir jemand helfen könnte.

Danke, Viele Gr√ľ√üe
Mario

Poste bitte einen richtigen Schaltplan.

Des weiteren sehe ich Code gerade nicht, wo die Bytes jeweils einzeln gesendet werden.

Poste bitte einen richtigen Schaltplan.

Richtig, denn dass er falsch nachgebaut sein kann wissen wir ja schon, was hilft uns da die Vorlage....
Wir brauchen deinen!

Und irgendwelchen Codes hinterherrennen möchte ich auch nicht.
Zeige bitte hier, was du verwendest, oder keine Hilfe von mir.

Hallo zusammen,

danke schon mal f√ľr die R√ľckmeldungen. Ich suche gerade noch den Upload Button f√ľr Attachments :slight_smile:

....

sorry, könnte mir bitte jmd. kurz erklären, wie ich uploaden kann?

...
BTW: Es existiert keine echte Schaltung. Ich habe das zunächst als Prototyp auf

abgebildet.
Ich denke, 123dcircuits.io ist doch bekannt?

Danke, Gr√ľ√üe
Mario

Danke, Viele Gr√ľ√üe
Mario

Hallo ,

das Coding stammt unverändert aus

(Ausnahme: Die PINs-Belegung habe ich passend zu meiner Schaltung geändert)

/*
  Shift Register Example
  Turning on the outputs of a 74HC595 using an array

 Hardware:
 * 74HC595 shift register 
 * LEDs attached to each of the outputs of the shift register

 */
//Pin connected to ST_CP of 74HC595
int latchPin = 12;
//Pin connected to SH_CP of 74HC595
int clockPin = 13;
////Pin connected to DS of 74HC595
int dataPin = 11;

//holders for infromation you're going to pass to shifting function
byte data;
byte dataArray[10];

void setup() {
  //set pins to output because they are addressed in the main loop
  pinMode(latchPin, OUTPUT);
  Serial.begin(9600);

  //Binary notation as comment
  dataArray[0] = 0xFF; //0b11111111
  dataArray[1] = 0xFE; //0b11111110
  dataArray[2] = 0xFC; //0b11111100
  dataArray[3] = 0xF8; //0b11111000
  dataArray[4] = 0xF0; //0b11110000
  dataArray[5] = 0xE0; //0b11100000
  dataArray[6] = 0xC0; //0b11000000
  dataArray[7] = 0x80; //0b10000000
  dataArray[8] = 0x00; //0b00000000
  dataArray[9] = 0xE0; //0b11100000

  //function that blinks all the LEDs
  //gets passed the number of blinks and the pause time
  blinkAll_2Bytes(2,500); 
}

void loop() {

  for (int j = 0; j < 10; j++) {
    //load the light sequence you want from array
    data = dataArray[j];
    //ground latchPin and hold low for as long as you are transmitting
    digitalWrite(latchPin, 0);
    //move 'em out
    shiftOut(dataPin, clockPin, data);
    //return the latch pin high to signal chip that it 
    //no longer needs to listen for information
    digitalWrite(latchPin, 1);
    delay(300);
  }
}



// the heart of the program
void shiftOut(int myDataPin, int myClockPin, byte myDataOut) {
  // This shifts 8 bits out MSB first, 
  //on the rising edge of the clock,
  //clock idles low

  //internal function setup
  int i=0;
  int pinState;
  pinMode(myClockPin, OUTPUT);
  pinMode(myDataPin, OUTPUT);

  //clear everything out just in case to
  //prepare shift register for bit shifting
  digitalWrite(myDataPin, 0);
  digitalWrite(myClockPin, 0);

 ¬†//for each bit in the byte myDataOut√Į¬Ņ¬Ĺ
  //NOTICE THAT WE ARE COUNTING DOWN in our for loop
  //This means that %00000001 or "1" will go through such
  //that it will be pin Q0 that lights. 
  for (i=7; i>=0; i--)  {
    digitalWrite(myClockPin, 0);

    //if the value passed to myDataOut and a bitmask result 
    // true then... so if we are at i=6 and our value is
    // %11010100 it would the code compares it to %01000000 
    // and proceeds to set pinState to 1.
    if ( myDataOut & (1<<i) ) {
      pinState= 1;
    }
    else { 
      pinState= 0;
    }

    //Sets the pin to HIGH or LOW depending on pinState
    digitalWrite(myDataPin, pinState);
    //register shifts bits on upstroke of clock pin  
    digitalWrite(myClockPin, 1);
    //zero the data pin after shift to prevent bleed through
    digitalWrite(myDataPin, 0);
  }

  //stop shifting
  digitalWrite(myClockPin, 0);
}


//blinks the whole register based on the number of times you want to 
//blink "n" and the pause between them "d"
//starts with a moment of darkness to make sure the first blink
//has its full visual effect.
void blinkAll_2Bytes(int n, int d) {
  digitalWrite(latchPin, 0);
  shiftOut(dataPin, clockPin, 0);
  shiftOut(dataPin, clockPin, 0);
  digitalWrite(latchPin, 1);
  delay(200);
  for (int x = 0; x < n; x++) {
    digitalWrite(latchPin, 0);
    shiftOut(dataPin, clockPin, 255);
    shiftOut(dataPin, clockPin, 255);
    digitalWrite(latchPin, 1);
    delay(d);
    digitalWrite(latchPin, 0);
    shiftOut(dataPin, clockPin, 0);
    shiftOut(dataPin, clockPin, 0);
    digitalWrite(latchPin, 1);
    delay(d);
  }
}

hi,

ob dieser simulator funktioniert, kann ich Dir nicht sagen. versuch doch mal den code, der bei dem shiftOut-tutorial dabei ist, bei dem wissen wir, daß er funktioniert. der fehlende kondi ist egal, den baut in echt auch kaum einer rein...

√ľbrigens sind die beiden led-bl√∂cke nicht simultan, aber jedenfalls tun sie nicht, was man erwartet.

gruß stefan

hi stefan,

danke vorab!

Welches Shift-Out-Tutorial meinst Du?
Kannst Du Deinen Satz
√ľbrigens sind die beiden led-bl√∂cke nicht simultan, aber jedenfalls tun sie nicht, was man erwartet.

bitte näher erläutern. Ich stecke noch in den Kinderschuhen :confused:

Oder mal anders gefragt: Gibt es ein simples coding Beispiel, das auf alle Fälle funktionieren sollte?
Somit könnte ich den Fehler schon mal so weit eingrenzen, dass ich nicht im Coding den Fehler suchen muss, sondern in meiner Schaltung.

gruß stefan

Du hast doch die Arduino ShiftOut Seite selbst verlinkt! Da gibt es am Ende Code.

Die shiftOut() Funktion brauchst du √ľbrigens nicht selbst zu implementieren. Die ist in der Arduino IDE schon drin. Das ruft man zweimal hintereinander auf und gut ist. Das sollte man auch ohne extra Code Beispiele hinbekommen. Muss ja nicht gleich ein Lauflicht sein. Da statisch zwei Byte ausgeben reicht auch erst mal.

Ohne so einen Baustein kann ich dir ein Lauflicht bauen!
Nur mit Hilfe der Doku…

//  74HC595
const byte dataPin  = 10;
const byte clockPin = 11;
const byte latchPin = 12;

uint16_t muster;

void setup() 
{
  muster = 1;
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);  
  digitalWrite(latchPin, 1);
  // Serial.begin(9600);
}

void loop() 
{
  // Serial.println(muster,BIN);
  digitalWrite(latchPin, 0);
  shiftOut(dataPin, clockPin, MSBFIRST, (muster >> 8));
  shiftOut(dataPin, clockPin, MSBFIRST, muster);
  digitalWrite(latchPin, 1);
  muster <<= 1;
  if(!muster) muster = 1;
  delay(200);
}

Und, warum verwendest du nicht SPI daf√ľr?

Hi combie,

w.t.f ist SPI?

Danke, Mario

Also mit 44 Posts m√ľsste man wissen, wie Google funktioniert

@ElEspanol

Du weißt gar nicht, wie unsympathisch Klugscheißer sind
Wenn ich mit "arduino spe" in Google suche bekomme ich ca. 851.000 Treffer.
Du w√ľrdest besser ne anst√§ndige Antwort geben als Dich hier aufzuspielen. Wahrscheinlich hast Du woanders wenig zu sagen.
Sorry, aber es gibt Spielregeln.

SPI ist eine schnelle Hardware Schnittstelle. Da macht man einfach in setup() SPI.begin() und zum Senden (und Empfangen) SPI.transfer() und gut ist. Den Latch-Pin (Chip Select) musst du aber per Hand ansteuern.

Hier wird es mit Schieberegistern breit erklärt:

@Serenifly: Danke f√ľr die schnelle und klare Antwort. Ich werde mir das bei Gelegenheit reinziehen. Viele Gr√ľ√üe
Mario

√úbrigens, selbst wenn man nach "Arduino SPI shift register" sucht, sind die ersten Links nicht so gut. Da wird auf einigen Seiten die SPI Schnittstelle per Hand √ľber die ¬ĶC Register angesteuert. Das kann man nat√ľrlich machen, aber als Anf√§nger sieht das wahrscheinlich unn√∂tig kompliziert aus.

Auf der Nick Gammon Seite wird es aber mit der SPI Library gemacht.

Bei meinem Google kommt bei Eingabe Arduino SPI genau der empfohlene Link.

Siehe Anhang. Und anmachen, dass ich das Bild nicht korrekt einbinde, brauchst mich auch nicht, weil dabei st√ľrzt beim Ipad der Browser ab.

image.jpg

Manuell gehts doch

@Serenifly: Danke!!!
Bin jetzt erst mal zwei Wochen in Urlaub :wink:

hi,

Sorry, aber es gibt Spielregeln.

gibt es, mario, gibt es. und es gibt keine hilfe mehr von mir f√ľr Dich‚Ķ

letzter gruß, stefan

Ich reg mich √ľber sowas gar nicht mehr auf.

Gib ihnen einen Fisch und sie sind heute satt. Lehre sie fischen und sie haben immer zu essen.

Das ist das, was es hauptsächlich in solchen Fällen von mir gibt. Außer ich bin mal besonders gut drauf und hab Langeweile.

naja, mein lieber wahlspanier, ein "wenig" patzig warst Du schon. aber nicht mehr. mit sowas kann man in einem forum rechnen. ist nix schlimmes.

dia antwort darauf war allerdings unter aller sau.
so etwas:

Du weißt gar nicht, wie unsympathisch Klugscheißer sind
Wenn ich mit "arduino spe" in Google suche bekomme ich ca. 851.000 Treffer.
Du w√ľrdest besser ne anst√§ndige Antwort geben als Dich hier aufzuspielen. Wahrscheinlich hast Du woanders wenig zu sagen.

geht einfach nicht. er greift Dich persönlich an.

gruß nach spanien,

stefan