Guten Abend, ich bin ein blütiger Anfänger. Sitze schon seit langen an einer Idee, die ich leider nicht umsetzen kann, da anscheinend mein Wissen hier nicht ausreicht. Und zwar: Seit kurzem verfüge ich über ein Arduiono board 328. Damit komm ich so ziemlich gut klar. Mit den Ausgängen auch. Programmieren kann ich auch und klappt so, zumindestens das einfachste ganz gut... Jetzt zum eigentlichen Problem. Ich habe eine Reihe an LED's, etwa 50 Stück in Form eines Herzes gelötet. Ich will Zwei LED'S an jeweils ein Port anschließen (50/2=25 Ports sind nötig). Arduiono verfügt über 13 Ausgänge. Also fehlen mir noch 13. Nun habe ich gelesen. Mit Hilfe eines Schieberegisters, wie z.B. 74HCT595, ist es möglich sowas umzusetzten. Und genau an dieser Stelle, stoße ich an meine Verständnisgrenzen. 1) Da ich nicht verstehe, wie es dann gehen soll? Also ich Programmiere die 13 Ausgänge meines Arduino Mikrokontrollers (soweit klar). 2)Doch wie programmiere ich jetzt den 74HTC595? Brauche ich da eine andere Software? Oder soll ich ihn einfach an die Stelle des Arduino Mikrokontrollers setzen und dann so programmieren? 4) Und die letzte Frage wäre, wie ist es machbar, dass der Microkontroller und Schieberegister "zusammenarbeiten" benötigen ich da noch irgendwelche Bauteile? Diese Fragen quälen mich. Ich blicke hier einfach nicht durch. Vielen Dank für Euer Verständnis....
Was im Datenblatt des 74 hct595 verstehst du denn nicht?
danke. ich verstehe nicht, wie das mit dem programmieren genau geht...in dem oberen link gibt's ja schon paar Testprogramme/Ansteuerung durch software.... da komm ich nicht mehr mit...soll ich diese "Programme" in meinen MIkrokontroller "jagen"?
Eugen F. schrieb: > danke. ich verstehe nicht, wie das mit dem programmieren genau geht...in > dem oberen link gibt's ja schon paar Testprogramme/Ansteuerung durch > software.... da komm ich nicht mehr mit...soll ich diese "Programme" in > meinen MIkrokontroller "jagen"? Ähm. Du kannst ein C-Programm schreiben? Ein 595 von einem µC aus ansteuern ist doch nur * die 3 Pins des 595 mit 3 Pins vom µC verbinden * in der richtigen Reihenfolge mit den richtigen Pins des µC wackeln. Wie die Reihenfolge sein muss, steht im Link beschrieben. Dein Denkfehler dürfte sein, dass du dem 595 irgendeine Form von Intelligenz zubillgst. Die hat er nicht. Das Programm läuft auf dem Arduino. Und anstelle von 3 Led, die der Arduino ansteuert, steuert er eben mit 3 Leitungen den 595 an. Wenn die 3 Led, pardon, die 3 Leitungen in der richtigen Reihenfolge von 0 auf 1 und wieder zurück wackeln, macht der 595 etwas definiertes. Und wenn man diese Einzelteile zusammensetzt, dann kann man mit 3 Leitungen vom Arduino ausgehend den 595 so ansteuern, dass man jede einzelne der 8 Ausgangsleitungen des 595 auf genau den Pegel setzen kann, den man haben möchte. Und wenn 8 nicht reichen, dann hängt man einen weiteren 595 an den vorhandenen an und hat so 16 Ausgangsleitungen, die man mit nur 3 Leitungen vom 595 beeinflussen kann. Aber das Programm läuft auf dem Arudino. Der wackelt in der richtigen Reihenfolge mit 3 Leitungen.
Speziell für den Arduino kannst du dir auch dieses hier mal anschauen: http://arduino.cc/en/Tutorial/ShiftOut http://arduino.cc/en/Reference/ShiftOut Dort ist es so beschrieben, dass du es leicht übernehmen kannst.
ja wie ich ihn jetzt ansteure weiß ich, habe aus dem link das rauslesen können.....es geht jetzt mehr um das C-Programm... weil im andruino testprogrammen mehr solche funktionen vorkommen, wie delay(xx); If, esle unsw.... hier steht aber sowas wie .include "m8def.inc" .def temp1 = r16 ; Die Definitionen müssen an den jeweiligen AVR angepasst werden .equ SCHIEBE_DDR = DDRB .equ SCHIEBE_PORT = PORTB .equ RCK = PB2 ; SS .equ SCK = PB5 ; SCK .equ SIN = PB3 ; MOSI ldi temp1, LOW(RAMEND) ; Stackpointer initialisieren out SPL, temp1 ldi temp1, HIGH(RAMEND) out SPH, temp1 ; ... das ist es, wo ich nicht wirklich weiß.... was ich damit anfangen soll.....gibt es eventuell ein Tutorium für diese Begrifflichkeiten?
Eugen F. schrieb: > ja wie ich ihn jetzt ansteure weiß ich, habe aus dem link das rauslesen > können.....es geht jetzt mehr um das C-Programm... weil im andruino > testprogrammen mehr solche funktionen vorkommen, wie delay(xx); If, esle > unsw.... hier steht aber sowas wie Vergiss das im Link angegebene Programm. Du kannst C-Programmieren? Gut. Dann lies dir aus dem Link heraus in welcher Reihenfolge welcher von 3 Ausgangspins auf 1 und wieder zurück auf 0 gehen muss. Und dann schreibst du ein C Programm welxches genau das macht. Es ist wirklich sehr einfach. Nicht immer davon ausgehen, dass dir alles mundgerecht vorgekaut wird. Da musst du schon selber rann. Das bischen Portpin auf Ausgang stellen und Pin von 0 auf 1 und wieder zurück auf 0 wirst du ja wohl hinkriegen.
:
Wiederhergestellt durch User
aaaah jetzt blicke ich durch))) danke... ich mache es dann, wenn es soweit klappt, dann kann ich ja meine "idee" hier zeigen=)
Hm. Google gibt eine Treffer zu 74HTC595 und Arduino aus z.B diesen hier: http://hackaday.com/2009/12/31/twitter-based-christmas-ornaments-update/#more-2008
das ist Ideal! danke... noch ne Frage nebenbei..mit welchem Programm fertigt man diese Schaltungen?
Den Schaltplan? Also der wurde sicherlich mit Eagle angefertigt. PS. in meinem ersten Beitrag oben "eine" durch "einige" ersetzen.
Hallo Leute. Ich hätte auch noch eine Frage zum 74HCT595. Der Anhang ist nur eine Skizze. Natürlich fehlt da noch einiges. Ich will nur wissen, ob ich das Schaltprinzip des 74HTC595 verstanden habe. 74HTC595: http://www.nxp.com/documents/data_sheet/74HC_HCT595.pdf Ich gehe am Anfang wie auf Seite 5 Tabelle 3 vor. 1. Alles LOW bzw. unverändert. 2. STCP kurzer Impuls. 3. OE auf HIGH (Alle Ausgänge sind "gesperrt", "offen", Öffnerprinzip) 4. SHCP kurzer Impuls (dauerhaft, Taktfrequenz des µC) und OE wieder freigeben (LOW) und mit SDI(DS) (HIGH) einen Bit in das erste Register des IC1 "schieben" 5. Der nächste STCP Impuls schaltet und SDI(DS) LOW (damit wird mein erster Ausgang Q0 geschalten und die LED leuchtet) 6. OE wieder auf High (gesperrt) 7. SDI(DS) High 8. SDI(DS) auf LOW und STCP auf HIGH 9. Leuchten jetzt LED1 und LED2??? 10. OE auf HIGH 11. 2x STCP Impuls 12. OE auf LOW 13. Leuchten jetzt LED3 und LED4??? Ich hoffe es ist einigermaßen verständlich was ich damit meine. Danke im Vorraus Peter B.
Peter B. schrieb: > Ich will nur wissen, ob ich das Schaltprinzip des 74HTC595 verstanden > habe. Irgendwie überhaupt nicht. 595er sind Schieberegister. Wenn man da mehr als acht Bits reinschiebt, fällt das erste am anderen Ende wieder raus. D.h. das geht dann an den Eingang vom nächsten. Die Shift- und Latch- Leitungen gehen an alle 595er parallel. Nennt sich Kaskadieren. Der große Vorteil von Schieberegistern als Porterweiterung ist, daß man immer nur drei Portpins braucht, egal wieviele 595er da dranhängen. MSB wird zuerst ausgegeben. Am Port anlegen Einmal am Takt wackeln Nächstes Bit anlegen Einmal am Takt wackeln ... Wenn alle 16 Bit raus sind Einmal am Latch wackeln. Und jetzt erst wird das neue Bitmuster für alle Ausgänge gleichzeitig übernommen. Das MSB steht jetzt an Q7 vom zweiten, das LSB an Q0 vom ersten Register. Und so richtig flott geht das, wenn man den SPI dafür nimmt. mfg.
Also muss ich den Serial data out von IC1 mit dem SDI von IC2 verbinden? Vergibt der IC dann so eine Art Busaddresse Versteh ich das richtig? Ich setz den DataPin HIGH. Clock- Takt "wackeln. Jedesmal wenn ich am Clock Takt wackle wird ein BIT mit "1" wenn der DataPin HIGH ist bzw. ein BIT mit "0" hineingeschoben? Beispiel mit einem 8-Bit Schieberegister: Ich setze -DataPin HIGH. -Clock Takt -DataPIN LOW -Clock Takt -DataPin HIGH. -Clock Takt -DataPIN LOW -Clock Takt -DataPin HIGH. -Clock Takt -DataPIN LOW -Clock Takt -DataPin HIGH. -Clock Takt -DataPIN LOW -Clock Takt -LATCH auf HIGH Dann würden LED2,4,6,8 leuchten? Der SHCP läuft in der eingestellten Taktfrequenz im Dauerbetrieb, STCP ist mein CLOCK Pin und OE mein LATCH? Danke in Vorraus Peter B.
Peter B. schrieb: > Dann würden LED2,4,6,8 leuchten? Grrr. Gezählt wird von 0 bis 7. Niemals von 1 bis 8. Informatiker am Flughafen: "0, 1, 2. Wo ist mein vierter Koffer?" Das ist fundamental! Wer das nicht draufhat, kriegt einen Knoten im Kopf. Ausserdem redet man ständig aneinander vorbei. -DataPin HIGH. -Clock Takt -DataPIN LOW -Clock Takt -DataPin HIGH. -Clock Takt -DataPIN LOW -Clock Takt -DataPin HIGH. -Clock Takt -DataPIN LOW -Clock Takt -DataPin HIGH. -Clock Takt -DataPIN LOW -Clock Takt Das erste Bit, das reingeschoben wird, landet nach 8 Mal schieben auf Ausgang Q7, das zweite auf Q6..., das letzte auf Q0. Deswegen schiebt man das MSB, Bit7, zuerst raus. Dann landet es auf Q7 und man muß beim Zählen nicht noch umrechnen. Bei 8 Bit kann man ja noch die Finger nehmen. Aber bei 32 oder 96 Bit... -LATCH auf HIGH einaml toggeln: -LATCH auf HIGH -LATCH auf LOW Peter B. schrieb: > Der SHCP läuft in der eingestellten Taktfrequenz im Dauerbetrieb, STCP > ist mein CLOCK Pin und OE mein LATCH? Nee. SH_CP = Takt (Shift) ST_CP = Latch DS = Daten Q7' >> DS vom nächsten OE/ fest an GND MR/ fest an Vcc Am Takt wird bei jedem Bit gewackelt, am Latch einmal, wenn alle Bits raus sind. 8 Bit = 8 Takte + 1 Latch 16 Bit = 16 Takte + 1 Latch. usw. mfg.
LED 2,4,6,8 ist schon richtig. Die LED's sind so beschriftet im Plan und sie sind an Q1, Q3, Q5, Q7 angeschlossen. Hätte besser mit LED0 anfangen sollen bei der Beschriftung, das stimmt schon. -DataPin HIGH. -Clock Takt -DataPIN LOW -Clock Takt -DataPin HIGH. -Clock Takt -DataPIN LOW -Clock Takt -DataPin HIGH. -Clock Takt -DataPIN LOW -Clock Takt -DataPin HIGH. -Clock Takt -DataPIN LOW -Clock Takt -Latch Jetzt wären Q1,Q3,Q5 und Q7 auf HIGH? Wenn ich dann z.B. 4solche IC's hab und ich will LED31 (Q7 am letzten IC) HIGH und alle anderen LOW muss ich das eine Bit mit Clock 32mal schieben? Wenn ja, erspart man sich da nicht Takte wenn man die IC's bei Q7' und DS nicht verbindet und stattessen CLOCK verbindet und für jeden IC eine eigene DS Leitung zum µC habe? Ist der OE Pin nicht dazu gedacht, die Ausgänge auszuschalten um beim weitertakten kein Flackern zu haben??? mfg
Hallo, vielleicht hilft das hier deinem Verständnis: http://conductiveresistance.com/interactive-595-shift-register-simulator/ mfg
Peter B. schrieb: > Wenn ich dann z.B. 4solche IC's hab und ich will LED31 (Q7 am letzten > IC) HIGH und alle anderen LOW muss ich das eine Bit mit Clock 32mal > schieben? Für 32 Bit, musst du 32 mal schieben. Das musst du aber losgelöst von dem einen einzigen in diesem Fall betrachten. Denn die anderen 31 Pins müssen ja auch zu ihrem Recht kommen. Bit31 soll 1 sein, also schiebt man da eine 1 rein. Die anderen 31 Bit sollen 0 sein, also schiebt man da eine 0 rein. Man kann ja nicht davon ausgehen, daß sie vorher schon 0 waren. Peter B. schrieb: > Ist der OE Pin nicht dazu gedacht, die Ausgänge auszuschalten um beim > weitertakten kein Flackern zu haben??? Beim 595er werden die Bits intern geschoben. An den Ausgängen tut sich derweil gar nichts. Erst mit dem Latch wird das neue Bitmuster nach "aussen geklappt". mfg.
Ok jetzt hab ich es verstanden. Danke für den Link, war sehr hilfreich. Dann haben ja Codes die 8IC's (64bit) ansteuern enorme längen. Oder gibts da Tricks? Ich würde das alles gerne mit einem Arduino realisieren. mfg
Peter B. schrieb: > Dann haben ja Codes die 8IC's (64bit) ansteuern enorme längen. Nein > Oder gibts da Tricks? Ja programmieren lernen. Die Portstates werden dann durch eine 64 Bit Zahl repräsentiert und du hast nur eine Funktion welche diese Zahl raustacktert. Da hat nix Längen. > Ich würde das alles gerne mit einem Arduino realisieren. Was hindert dich?
>Dann haben ja Codes die 8IC's (64bit) ansteuern enorme längen.
Die Schieberegister schaltet man normalerweise hintereinander.
Sie lassen sich wie ein Großes (hier mit 64bit) ansteuern.
Das "Herausgetakte" erledigt man in einer Schleife.
Die Schleife läuft nicht von 0 bis 7 sondern von 0 bis 63.
Das ist alles!
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.