Ich bastel gerade mit Schieberegister rum und wollte ein Programm ausprobieren, da bekomme ich immer folgende Fehler meldung : **schieberegister:103: error: expected primary-expression before '=' token ** soweit so gut, ich suche mir die Augen aus dem Kopf und kann nichts finden, ch stelle mal den Sketsch ein , vieleicht sieht ja einer einen Fehler in Zeile 103 ich sehe nichts mehr 8)
80 // Das Herz des Programms
81 void SHIFTOUT (int myDataPin, int myClockPin, Byte myDataOut) {
82 // Dies verschiebt 8 Bits aus MSB first,
83 // An der ansteigenden Flanke des Taktsignals,
84 // Clock Leerlauf niedrig
85
86 // Interne Funktion Setup
87 int i = 0;
88 int x = 0;
89
90 int pinState;
91 pinMode (myClockPin, OUTPUT);
92 pinMode (myDataPin, OUTPUT);
93
94 // Alles klar nur if den Fall zu
95 // Vorbereitung Verschiebung if Bitverschiebung registrieren
96 digitalWrite (myDataPin, 0);
97 digitalWrite (myClockPin, 0);
98
99 // if jedes Bit in den Byte myDataOut
100 // Beachte, dass wir den Countdown in unserem for-Schleife
100 // Das bedeutet, dass% 00000001 oder "1" wird durch solche 101 gehen
102 // Dass es pin Q0 sein, dass Lichter.
103 for (int i = 7; i > = 0; i=i-1) {
104 digitalWrite (myClockPin, 0);
105
106 // Wenn der Wert, der an myDataOut und einer Bitmaske 107 Ergebnis
108 // True then ... so, wenn wir bei i = 6 und unser Wert ist
109 //% 11010100 wäre der Code vergleicht es mit% 01000000
110 // Und geht um pinState 1.
111 if (myDataOut & (1 << i)) {
112 pinState = 1;
113 }
114 else {
115 pinState = 0;
116 }
117
118 // Setzt den Stift auf HIGH oder LOW je pinState
119 digitalWrite (myDataPin, pinState);
120 // Register verschiebt Bits auf Aufwärtshubs Taktpin
121 digitalWrite (myClockPin, 1);
122 // Null der Datenanschluss nach Umstellung auf Durchschlagen 123 zu verhindern
124 digitalWrite (myDataPin, 0);
125 }
126
127 // Stop Verschiebung
128 digitalWrite (myClockPin, 0);
129 }
Programm läuft mit dem Schieberegister. Da ich bisher immer nur meine 3 Schieberegister verwendet habe , hätte ich da mal eine Frage, wieviel Schieberegister kann ich mit dem UNO ansteuern und ich habe mal hier gelesen das es Treiber dafür gibt wenn man mehrere Schieberegister betreiben möchte, wie funktioniert das mit den Treibern und muss ich dann eine Externe Stromversorgung haben ? Da es sich um lauflichter handelt sind nicht alle LED`s auf einmal an es handelt sich um 38 LED. die als Lauflicht eingesetzt werden.
Ja Uwe , ich habe es so gemacht wie Du geschrieben hast und schon ging es , aber begriffen habe ich es noch nicht *lach... es ist immer so eine sache wenn man ein kleines Programm einbinden will was einem gefällt. Aber ich muss auch sagen ich habe noch nicht so viel mit dem ansteuern von Schiftregistern gemacht und muss mich erst einmal ein wenig darin einarbeiten. . Aber Danke für den Tip mit dem löschen.
malerlein:
Ja Uwe , ich habe es so gemacht wie Du geschrieben hast und schon ging es , aber begriffen habe ich es noch nicht *lach...
Du meinst wieso ein ">=" verschieden von einem "> Leerzeichen =" ist? ein "i f" ist doch auch anders als ein "if".
Ein HC595 (SIPO serial in paralell out) Schieberegister sind einfach gesagt 8 1Bit Speicherzellen die seriell geladen werden ( mittels Takt und Datenleitung) und jede Speicherstelle steuert je eine einen Ausgang an. Zusätzlich hat man beim 595 einen zweiten Satz Speicherzellen damit während des Ladens die Ausgänge nicht wechseln. Die Daten werden in den ersten Satz geladen und dann alle 8 auf einmal mittels des STCP (storage register clock input) oder latch pin überträgt den Inhalt des ersen Schieberegisters ins zweite (Storage Register) das die Ausgänge ansteuert.
Das /OE Pin = H (Output Enable) schaltet die Ausgänge auf hochohmig weil das 595 Tristate Ausgänge hat.
Der /MR Pin = L (master reset) löscht den innhalt des ersten Registers (nicht des Storage Registers).
Zum Löschen des 595 (Ausgänge auf L setzen) kann ein L auf /MR gegeben werden und dann ein LH Impuls auf STCP.
Es können nicht unendlich viele Schieberegister in Serie geschaltet werden da die Ansteuerung der Eingänge SHCP, STCP und eventuell falls benutzt /MR und /OE Strom braucht und ein Arduinoausgang nicht unendlich viel Strom liefern kann.
Bei vielen LED sind Schieberegister nicht die beste Wahl. zB ein MAX7219 kann eine 8x8 LED-Matrix in multiplex ansteuern und begrenzt selbst den Strom der LED. So kannst Du 64 LED ansteuern. Wenn wenige LED ( sagen wir ca 10) von vielen leuchten sollen dann empfiehlt sich Charlieplexing.