Forum: Mikrocontroller und Digitale Elektronik Arduino 74hc595 beeinflussen durch Schalter


von Peter R. (bettbahner)


Lesenswert?

Hallo,

Ich bin momentan am ausprobieren was man alles mit einem Arduino Board 
bewerkstelligen kann, ich beschäftige mich seid 2Wochen mit diesem 
Thema.

Mein Ziel für die (leider noch) ferne Zukunft ist es die 24 Weichen 
meiner Modellbahnanlage mit Tastern zu stellen und eine passive (Passiv 
weil der Anker stand der spulen antriebe nicht überprüft wird) 
Rückmeldung auf einem Stellpult zu visualisieren mithilfe von LEDs.

Das bedeutet ich brauche 2Ports für die LED Rückmeldung, 2 Ports für die 
Taster und 2 Ports für den Weichenantrieb. Macht in Summe 144 Ports. 
Leider hat dies kein Arduino  Daher muss ich mir die Ports beschaffen 
indem ich Schieberegister einsetze(74hc595).

Den Schaltvorgang der Weichen stelle ich mir momentan so vor:

Taster wird betätigt --> Arduino erkennt dies --> ändert das Bit des 
Schieberegisters welches für die LED Rückmeldung ist und gleichzeitig 
wird in einem anderen Schieberegister für einen kurzen Moment 
durchgeschaltet um den Weichenantrieb umzupolen damit die Weiche sich 
bewegt.
{https://onedrive.live.com/edit.aspx?cid=43be9689c3898d07&id=documents&resid=43BE9689C3898D07!68753&app=OneNote&&wd=target%28%2F%2FSpur_N_%C3%96ffentlich_Stummiforum.one%7Cfdc6fe1e-7506-4936-a6a9-642b0971a280%2FSchaltplan%7Cf04589a1-021b-4059-a4d0-b2ea3fcada51%2F%29
hier ist ein Link in mein Notizbuch der eine Skizze enthält wie ich mir 
den Prinzipiellen Ablauf vorstelle.}

So viel zur Einleitung.

 Mein Problem ist folgendes, ich weiß nicht wie ich Bitmanipulationen 
innerhalb eines Schieberegisters machen kann.

Bei dieser Frage würde ich mir Wünschen das jemand mit mehr Erfahrung 
mir da einige Tipps geben könnte wie ein solcher Code auszusehen hätte.

Falls noch Informationen benötigt werden, werde ich diese gerne 
Nachliefern. Eine letzte bitte zum Schluss, ich bin kein studierter was 
Programmierung angeht und beschäftige mich noch nicht lange(~1Woche, 
habe aber von FRANZIS 
http://www.conrad.de/ce/de/product/631829/Arduino-Das-Franzis-Arduino-Lernpaket-65148?ref=searchDetail 
durchgearbeitet) mit diesem Thema daher seid bitte nicht verärgert wenn 
ich einiges was für viele Selbstverständlich ist Nachfragen werde.

Danke für Antworten und Hilfe im Voraus

Gruß

Peter

von Hp M. (nachtmix)


Lesenswert?

Peter R. schrieb:
> Daher muss ich mir die Ports beschaffen
> indem ich Schieberegister einsetze(74hc595).

SIPO wie '595 aber nur für die Ausgänge, also Weichenansteuerung und 
Lämpchen.
Um die Taster abzufragen brauchst du PISO-Register wie '165, '166, '597.
Pull-Up- (seltener gebraucht: Pull-Down-) Widerstände nicht vergessen, 
denn die Eingänge der 74HC-Serie sind sehr hochohmig und ein offener 
Schalter liefert kein definiertes Potential.


Peter R. schrieb:
> ich weiß nicht wie ich Bitmanipulationen
> innerhalb eines Schieberegisters machen kann.

Gar nicht.
Du musst das ganze Schieberegister mit dem aktuellen Bitmuster neu 
laden.
Im Falle der Weichenmagneten bedeutet das, im Schattenregister des µC 
das/die betreffende(n) Bits zu setzen, das Schattenregister in die 
595-Kette zu kopieren, Latch enable und Output enable setzen, 200ms 
warten, und dann mindestens Output enable wegzunehmen *) um so die 
Leistungstreiber abzuschalten.

Enstprechend müsstest du bei den Tastern auch regelmäßig, z.B. 10 Mal 
pro Sekunde das ganze Schieberegister auslesen und mit dem im µC 
gespeicherten alten Stand vergleichen.

Hört sich schlimm an, ist programmtechnisch aber nur eine Fingerübung.

Sicherheitshalber wird man, um die Magneten vor dem Durchbrennen zu 
schützen, aber noch eine Routine einbauen, die nur vom Watchdog 
Interrupt aufgerufen wird und die Weichentreiber unbedingt abschaltet, 
falls der Programmteil, der das eigentlich erledigen sollte, für z.B. 2 
Sekunden nicht aufgerufen wird.



*) P.S.:
 Output Enable ist beim '595 aktiv Low.
D.h. der Arduino muss dort eine "1" hin liefern um die Ausgänge des '595 
abzuschalten.

: Bearbeitet durch User
von Peter (Gast)


Lesenswert?

Hallo,
Was ist den das Schattenregister?
Den Rest habe ich glaube ich verstanden und werde es Versuchen am 
wochenende umzusetzen.


Ich werde mich melden wenn etwas konkretes vorliegt zu dem man Fragen 
stellen kann.
Gruß
Peter

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Ich würde mal daüber nachdenken, direkt an jeder Weiche einen Nano zu 
stationieren und diese mittels übergeordnetem Arduino über einen Bus zu 
adressieren und anzusprechen ... bei Preisen um die 2 Euro ... statt dem 
Gefummel mit Schieberegistern verlagert sich der Aufwand in die 
Software.

von derElf (Gast)


Lesenswert?

Peter schrieb:
> Was ist den das Schattenregister?

Ein von meinem Vorposter ungünstig gewählter Begriff für eine Variable 
in deinem Programm. Dort speicherst du die Bits der Schieberegister wie 
du sie gerne hättest und überträgst sie anschließend.

Folgende Seite wird dir wahrscheinlich ein Stück weiter helfen:
https://www.mikrocontroller.net/articles/AVR-Tutorial:_Schieberegister

von Hp M. (nachtmix)


Lesenswert?

Peter schrieb:
> Was ist den das Schattenregister?

Ein oder mehrere Speicherstellen im µC, deren Inhalt mit dem des 
externen Schiebereisters übereinstimmt.
Wie der Elf schon schrieb, kann man dort das auszugebende Bitmuster vor 
der Ausgabe zwischenspeichern, aber die Software kann es auch benutzen 
um schnell den aktuellen Inhalt des Schieberegisters abzufragen.

Bei der Eingabe kann man zwei davon benutzen, um festzustellen an 
welchen Positionen sich etwas geändert hat, also ob eine Taste gedrückt 
oder losgelassen wurde.
Es ist programmtechnisch meist günstiger, das gesamte SR einzulesen, 
auch wenn das 40 Bit sind, und dann erst auszuwerten, als nach jedem 
eingelesenen Byte oder gar Bit zu entscheiden was zu tun ist.

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
Noch kein Account? Hier anmelden.