3x 74HC595

Hallo,
Wie kann man 3 74HC595 ansteuern?

Ich habe http://www.arduino.cc/en/Tutorial/ShiftOut gelesen.. und das meiste verstanden..
und ich glaube, dass man damit nur 2 ansteuern kann.. stimmt das?

Irgendwo habe ich auch gelesen, dass man es mit SPI - Arduino Reference machen kann.. hat jemand dafür ein Beispiel?

mfg dani95

Also soweit ich das Tutorial verstanden habe kann man beliebig viele davon in Reihe schalten.

Hi

Jup^^ Theoretisch gesehen könndest du beliebig viele Schieberegister seriell ansteuern.
Ich würde SPI empfehlen, das ist viel schneller als shiftOut.
Hatte das selbe Problem, hier wurde mir geholfen :slight_smile:

http://arduino.cc/forum/index.php/topic,69964.0.html

MFG, Robdeflop®

Danke für die anworten..

Ich habe mich jetzt ein wenig reingelesen.. und ich glaube, dass kann mir auch helfen :slight_smile:

Man kann (theoretisch) unbegrenzt viele 595 hintereinander schalten. Einfach ST_CP und SH_CP an alle und jeweils Q7" an das nächste DS, genauso wie es mit 2 gemacht wird. Dann natürlich jedesmal die Daten für alle übertragen (3 595 brauchen 3Byte, 4 595 brauchen 4Byte ecc) .
Praktisch ist das Problem, daß es einen gewissen Strom braucht um die Eingänge ST_CP und SH_CP anzusteuern. Dieser Strom muß vom Ausgangs-Pin von Arduino aufgebracht werden.
Als Lösung dieses Problems können Treiber verwendet werden.
Ich weiß jetzt nicht eine genaue Zahl anzugeben, aber 5-6 können sicher angesteuert werden.
Viele Grüße Uwe

Hi

Jup, mein ich ja mit beliebig vielen^^

9 stück gehen auch noch problemlos :wink:
Man könnte ja mal messen wie viel strom ein 595 zieht, so hat man ein Bild darüber.
Vielleicht werd ich das gleich mal machen.
Würde doch gehen wenn ich einfach den Strom von z.B. SH_CP zwichen Ardu un 595 messe, also dass der Pin dauerhaft ein is.

MFG, Robdeflop®

Geht nicht so einfach weil der Strom nur beim Umschalten da ist und nicht statisch. Es müssen die Kapazitäten der FET geladen werden.
Außerdem wenn Du ein Digitales Multimeter im mA -Bereich dazwischenschaltest hast Du einen zu großen Spannngsabfall. Du brauchst ein Drehspulen-Zeigergerät.

Grüße Uwe

nochmal Danke an alle :slight_smile:
ich brauche es eh nur für 4..

aber eine frage noch:

wie kann ich mehrerne Bytes senden? einfach vier mal hintereinander "spi_transfer" aufrufen?

ich arbeite mit diesem "standart"-Code: 9 Schieberegister Seriell oder Parallel beschreiben, was ist schneller? - #13 by system - Deutsch - Arduino Forum

Ja einfach 4 mal ein Byte senden.
Grüße Uwe

ok.. danke.. endlich habe ich es jetzt verstanden :slight_smile:

mfg dani95

EDIT:

leider doch nicht ;(

welcher anschluss beim ic ist "DATA_OUT"?

DATA_IN ist 14
LATCH 12
und
CLOCK 11
oder?

Q7" pin 9 ist serial out.
http://www.arduino.cc/en/Tutorial/ShiftOut Kapitel "2. Connect the 2 registers."
grüße Uwe

Check bildr.org, they have excellent info on the 595 and the way to cascade it.
As a bonus they have a library for download that makes working with the 595 much easier.

Cheers

danke :slight_smile:
und wenn ich mehrerne hintereinsnder schalte, welchen Q7" muss ich mit arduino verbinden? den vom ersten IC oder vom letzten?

oder ist es eh nicht nötig, dass ich es mit arduino verbinde?
bzw kann ich es in diesem Beispiel weglassen: 9 Schieberegister Seriell oder Parallel beschreiben, was ist schneller? - #13 by system - Deutsch - Arduino Forum

mfg dani95

dani95:
danke :slight_smile:
und wenn ich mehrerne hintereinsnder schalte, welchen Q7" muss ich mit arduino verbinden? den vom ersten IC oder vom letzten?

oder ist es eh nicht nötig, dass ich es mit arduino verbinde?
bzw kann ich es in diesem Beispiel weglassen: 9 Schieberegister Seriell oder Parallel beschreiben, was ist schneller? - #13 by system - Deutsch - Arduino Forum

mfg dani95

Gar keinen Q7" mit den Arduino verbinden.
Du hängst den DS des ersten 595 an den Arduino und dann den DS des nächsten an den Q7" des vorhergehenden 595. Genau wie es das Beispiel mit 2 Stück 595 hier macht http://www.arduino.cc/en/Tutorial/ShiftOut

Grüße Uwe

und warum wird hier DATA_OUT definiert?

mfg dani95

Hi

Das ist der Pin vom Arduino, mit dem die Daten an die Schieberegister gesendet werden^^ Sozusagen die daten ausm arduino^^

Das mit dem Q" kann man so erklären.
Du schiebst z.B. 8 Bits durch das erste Schieberegister. Mehr kann das 595 ja nich "aufnehmen". Schickst du jetzt aber noch mehr durch, kommen die vorherigen Bits bei Q" wieder raus, werden also durchgeschoben. Das geht halt immer so weiter. Deswegen kannst du halt mehrere schieberegister mit dem Q" ausgang an DS "füttern".

Kannst du dir halt wie ne Perlenkette mit 2 farben vorstellen. Du machst ne Faust (das stellt das Schieberegister dar). Diese Kette schiebst du dann durch die hand. Was auf der anderen seite wieder rauskommt stellen die Bits dar, die kannst du dann halt ins nächste schieberegister schieben xD
Nen besseres beispiel is mir nich eingefallen^^ Solltest es nu verstanden haben, hoffentlich :slight_smile:

MFG, Robdeflop®

Das mit dem Q" verstehe ich jetzt schon.. aber ich verstehe jetzt immer noch nicht womit man den pin 11 vom Arduino in diesem Beispiel verbinden muss:

Hi

Den verbindest du mit dem pin DS vom 595 :wink:
Das define "DATA_IN" kannst du streichen, brauchst net :smiley:

MFG, Robdeflop®

ahhh ok.. das hat mich verwirrt.. danke :slight_smile:

Ich habe den Arduino Uno gestern bekommen.. dann gleich mit 3x74HC595 getestet.. das hat genau das gemacht, was das Programm sagte.. heute habe ich 4x 74HC595 auf eine Platine gelötet.. und angeschlossen, aber irgendwie hört es nicht auf das Programm ;(

wenn ich

spi_transfer(255);
spi_transfer(0);
spi_transfer(255);

mache, dann leuchten nur die vom 3. IC

bei

spi_transfer(255);
spi_transfer(0);
spi_transfer(255);
spi_transfer(0);
garkeine

bzw in den meisten fällen leuten garkeine..

wie kann ich am besten den Fehler finden? oder wie kann man testen, ob die IC's kaputt sind?

zwischen den pins ist kein kurzschluss..
und V, GND sind auch dort, wo sie sein müssen..

EDIT:
Hatte bei pin 13 am IC, GND vergessen^^

ich habs jetzt umgelötet..

ist es normal, dass es hinten zum zählen anfängt?

bei:

spi_transfer(1);
spi_transfer(2);
spi_transfer(4);
spi_transfer(8);

kommt beim
ersten IC bei Q3 5V
beim 2. bei Q2 5V
beim 3. bei Q1 5V
und beim 4. bei Q0 5V
..