Hallo liebe mikrocontroller.net-Gemeinde! Nach stundenlangem, vergeblichen Suchen werde ich nun doch einen Beitrag verfassen und hoffen, dass Ihr mir helfen könnt :) Ich habe vor, mit einem 74HC595 Schieberegister über einen ULN2803A acht Relais samt LEDs zu schalten - Relais und LEDs laufen über 24V. Nun habe ich gelesen, dass das Schieberegister bei Bespannung zufällige Schaltzustände schaltet, bis 0x00 ins Register geschrieben und auf die Ausgänge übertragen wird. Jetzt hätte ich vor, die 24V mittels eines Thyristors verzögert und ohne eines zusätzlichen µC-Pins auf die Relais zu schalten (GND hängt ja am ULN2803), nur bin ich nicht ganz schlüssig, wie das nun genau gehen soll. Ich hätte an ein RC-Glied gedacht, welches nach einer gewissen Zeit (abhängig von R) die Zündspannung des Thyristors überschreitet und diesen leitfähig macht. Nur auf einen konkreten Schaltplan komm' ich irgendwie nicht. Ehrlich gesagt sind Thyristoren auch ein bisher unbekanntes Gebiet für mich. Vielleicht könnt Ihr mir helfen!
die schieberegs haben ja eigtl. einen OE Pin der genau das macht: Er hält die Daten zurück. warum nimmst du nicht den anstatt igrendwas mit thyrist zu basteln ?
Hallo Max, ja, dass habe ich schon gelesen, nur habe ich keinen Pin am µC mehr frei. Darum hätte ich mir gedacht, das in die Richtung zu realisieren. Oder gibt's noch eine andere Möglichkeit ohne einen µC-Pin zu benötigen? Danke!
Daniel schrieb: > Oder gibt's noch eine andere Möglichkeit ohne einen µC-Pin zu benötigen? Du kannst den OE-Pin des ICs ja auch einfach mit entsprechend großem RC gegen Vcc beschalten und noch einen (invertierenden) Schmitt-Trigger dazwischenpacken...
Daniel schrieb: > Jetzt hätte ich vor, die 24V mittels eines Thyristors verzögert und ohne > eines zusätzlichen µC-Pins auf die Relais zu schalten Wozu soll da ein Thyristor gut sein? > Ich habe vor, mit einem 74HC595 Schieberegister über einen ULN2803A acht > Relais samt LEDs zu schalten - Relais und LEDs laufen über 24V. Was haben die Relais mit den LEDs zu tun? Gibts das auch als Schaltplan? > Nun habe ich gelesen, dass das Schieberegister bei Bespannung zufällige > Schaltzustände schaltet, bis 0x00 ins Register geschrieben und auf die > Ausgänge übertragen wird. Sieh dir mal den /OE Pin an. Mit dem könnte man da doch was machen, oder nicht? Wenn der ausreichend lang auf "1" gehalten wird, dann wäre der Ausgang hochohmig und dein ULN würde nicht schalten. Da würde als Startverzögerung evtl. sogar ein RC-Glied reichen... EDIT: Pech, Zweiter... ;-)
:
Bearbeitet durch Moderator
Thyristor hat Spannungsabfall und ist daher ungünstig. Besser wäre Logik über OutputEnable. Aber lies auch Beitrag "ULN 2803 Pegel" falls es Pegelprobleme gibt.
NE555-Griller schrieb im Beitrag #4389286: > Du kannst den OE-Pin des ICs ja auch einfach mit entsprechend großem RC > gegen Vcc beschalten und noch einen (invertierenden) Schmitt-Trigger > dazwischenpacken... @NE555-Griller: Ok, das klingt logisch, kann ich das so realisieren wie im Anhang? Und könnte ich den im Datenblattausschnitt angeführten Schmitt-Trigger benutzen? Da müsste ich dann, wenn ich dich richtig verstehe, das RC-Glied so berechnet werden, dass dir Threshold-Spannung nach z.B. 2sek überschritten wird, oder? @Lothar: Thyristor war Grundgedanke, weil mir sonst (noch) nichts eingefallen war :P Die LEDs zeigen den Schaltzustand der Relais :) Und danke für deine Hilfe :) @oszi40: Nein, Pegelprobleme gibt's keine :) Vielen Dank und LG!! Daniel
Du könntest auch das RC-Glied (kondensator gegen Vcc) aus dem Latch-Pin speißen und diesen mit einem Hardware-Pullup versehen. Hat den Vorteil, dass beim Programmieren ebenfalls OE abgewürgt wird (oder wenn der µC sonst irgendwie resettet). In der Praxis funktioniert das so: Der µC startet mit einem hochohmigen Pin (wüsste keinen der das nicht tut). Das RC-Glied ist "leer". OE wird auf 1 gezogen und schaltet den ausgang ab. Wenn der µC gebootet hat initialisiert er den Pin als Ausgang, aber lässt in auf high stehen. Dann schiebt der den ersten datensatz rein und pulst den pin mit low-high-low. Die steigende Flanke latcht die daten und das nachfolgende Low entlädt (langsam) das RC-Glied welches nach ein paar zig ms (vorteil: Kurze wartezeit heißt kleine caps) OE "durchschaltet" und so den Ausgang aktiviert. Wenn neue Daten kommen werden die einfach mit einem kurzen "high-spike" gelatched welcher von dem RC-Glied einfach ignoriert wird.
Ok, ich verstehe zwar, was Du mir vorschlägst, aber einen Schaltplan kann ich mir daraus nicht zusammendenken :( Kannst du mir vielleicht etwas auf die Sprünge helfen? Danke :)
Du brauchts zwei Widerstände und einen kondensator. Der kondensator kommt von /OE nach Vcc. Ein Widerstand kommt von /OE nach STCP. Ein Widerstand kommt von STCP nach Vcc. Für den Kondensator kannst du einfach noch einen 100 nF Cap nehmen mit denen du eh schon deinen µC abgeblockt hast (hoffentlich). Für die Widerstände nimmst du 10kΩ. Damit kannst du 1 ms Latchingpulse nehmen ohne, dass /OE betroffen ist.
Max D. schrieb: > Du brauchts zwei Widerstände und einen kondensator. > > Der kondensator kommt von /OE nach Vcc. > Ein Widerstand kommt von /OE nach STCP. > Ein Widerstand kommt von STCP nach Vcc. > > Für den Kondensator kannst du einfach noch einen 100 nF Cap nehmen mit > denen du eh schon deinen µC abgeblockt hast (hoffentlich). > Für die Widerstände nimmst du 10kΩ. Damit kannst du 1 ms Latchingpulse > nehmen ohne, dass /OE betroffen ist. Also so? Und was meinst du mit "mit denen du eh schon den µC abgeblockt hast"? Danke und LG
Schaltplan passt. Dein µC (und btw auch der 595er) braucht an seinen Versorgungspins Keramik-Kondensatoren die die Stromspitzen glätten während der µC arbeitet. Dafür nimmt man klassischerweise 100 nF Kerkos. Welchen µC hast du eigtl. genau ? neugierig
Ok, das mit den Kondensatoren an VCC beim uC hab ich gewusst, aber der 74HC595 auch? Mein uC ist ein Atmega32u4. Und ich habe 2 schieberegister hintereinander geschalten, kann ich da die obige schaltung dort anbauen, wo es am besten zugänglich ist bzw. vom ersten OE zum zweiten OE fahren? Und wie müsste ich die Bauteile dimensionieren bei zwei Schieberegistern? (R & C) Und danke für deine/eure Hilfe, echt ein super Forum hier!
Max D. schrieb: > die die Stromspitzen glätten während der µC arbeitet. Etwas frei formuliert: die Kondensatoren können keine Stromspitzen glätten, denn etwas Glattes hat keine Spitzen mehr... Die Entkopplungs- oder Blockkondensatoren sind Kondensatoren, die den Strom bereitstellen, der beim taktsynchronen Umschalten der vielen, vielen CMOS-Gatter im uC benötigt wird. Sind diese Kondensatoren nicht da oder schlecht angeschlossen, dann möchte der uC den selben Strom fließen lassen, weil der aber nicht bereitgestellt wird, bricht die Spannung kurzzeitig ein (wie wenn ein Netzzteil 5A liefern müsste, aber nur 1A liefern kann: die Spannung knickt ein). Und das bei jedem einzelnen Oszillatortakt mehr oder weniger, je nach dem, wieviele Gatter gerade umgeschaltet werden...
Max D. schrieb: > Schaltplan passt. > Dein µC (und btw auch der 595er) braucht an seinen Versorgungspins > Keramik-Kondensatoren die die Stromspitzen glätten während der µC > arbeitet. Lothar M. schrieb: > Die Entkopplungs- oder Blockkondensatoren sind Kondensatoren, die den > Strom bereitstellen, der beim taktsynchronen Umschalten der vielen, > vielen CMOS-Gatter im uC benötigt wird. Ok, warum man die Kon's braucht hab' ich nicht genau gewusst, jetzt weiß ich das auch :) Jetzt stellt sich mir nur noch die Frage, wie ich bei zwei aneinander gekoppelten 74HC595 bezüglich /OE vorgehen muss (siehe Beitrag ober Lothar's). Der Q7" von SR1 geht auf DS von SR2. Reicht es, einfach vom Pin /OE vom 1. Schieberegister zum /OE vom 2. Schieberegister zu fahren? Und wie muss ich die Bauteile (R & C) dimensionieren damit das mit beiden SR's funktioniert? Bin euch echt dankbar, habt mir schon gewaltig geholfen und sogar etwas gelernt :) schwer begeistert
Daniel schrieb: > Reicht es, einfach vom Pin /OE vom 1. Schieberegister zum /OE vom 2. > Schieberegister zu fahren? > Und wie muss ich die Bauteile (R & C) dimensionieren damit das mit > beiden SR's funktioniert? Dadurch, dass das CMOS Kisten sind ist das kein Problem auf dem Weg die zu kaskadieren (erst wenn man zweistellige Anzahlen hat muss man anfangen über die parasitären Kapas nachzudenken).
Daniel schrieb: > Reicht es, einfach vom Pin /OE vom 1. Schieberegister zum /OE vom 2. > Schieberegister zu fahren? Wie sagt Radio Eriwan: "Im Prinzip ja". > Und wie muss ich die Bauteile (R & C) dimensionieren damit das mit > beiden SR's funktioniert? Das kommt darauf an, wie lange du brauchst, bis definierte Werte im Schieberegister stehen...
Lothar M. schrieb: >> Und wie muss ich die Bauteile (R & C) dimensionieren damit das mit >> beiden SR's funktioniert? > Das kommt darauf an, wie lange du brauchst, bis definierte Werte im > Schieberegister stehen Maximal 500ms wären zu überbrücken, wie kann man das dann berechnen wie groß R&C sein müssen?
Daniel Ilsanker schrieb: > Maximal 500ms wären zu überbrücken, wie kann man das dann berechnen wie > groß R&C sein müssen? Dann mach einfach t=RC=1s Und nimm diese Schaltung dafür:
1 | | |
2 | Vcc R | |
3 | o---===----o-----| /OE |
4 | | | |
5 | |+ | |
6 | C === | |
7 | | |
8 | --- |
Also etwa R=10k und C=100uF...
Ähm, /OE ist doch Low-Active, oder? Wenn ich mich nicht irre, ist bei 5V an diesem Pin der Ausgang deaktivert, was diese Schaltung bewirkt, oder bin ich ganz falsch an? Danke und LG
Lothar M. schrieb: > Und nimm diese Schaltung dafür: > | > Vcc R | > o---===----o-----| /OE > | | > |+ | > C === | > | > --- > Also etwa R=10k und C=100uF... Das 74HC595-Schieberegister schaltet doch, die Ausgänge bei einem LOW-Pegel an /OE raus oder? Diese Schaltung startet jedoch bei 0V und lädt den Kondensator langsam auf VCC auf, was heißen würde, dass nach einer bestimmten Zeit die Ausgänge abgeschalten werden. Oder liege ich falsch? Ist die Schaltung von Max D. soweit richtig, um das Vorhaben umzusetzen? Bin mir jetzt nicht sicher, was ich nun machen soll :( LG
Die Schaltung von Lothar ist auf jeden Fall "falschrum" und tauscht den Aufwand den Latch-Pin speziell zu takten gegen einen duetlich größeren 100µF Kondensator ein. €dit: Und beim reset sperrt er auch nicht die Ausgänge
:
Bearbeitet durch User
Max D. schrieb: > Die Schaltung von Lothar ist auf jeden Fall "falschrum" und tauscht den > Aufwand den Latch-Pin speziell zu takten gegen einen duetlich größeren > 100µF Kondensator ein. > €dit: Und beim reset sperrt er auch nicht die Ausgänge Also kann ich deine Schaltung so verwenden wie ich sie gezeichnet hab'? Sorry für das viele Nachfragen, aber ich will nicht dann eine Platine haben, die falsch funktioniert :P Und natürlich: Danke für die Hilfe :)
Solange deine Platine ansonsten sauber gelöst ist... Die Schaltung an sich ist auf jeden Fall richtig (kannst du ja auch auf nem Breadboard testen wenn du dir Sorgen machst). Wichtig ist, dass du den Pin richtig ansteuerst: - Beim starten erst high und dann auf Ausgang schalten - Vor dem ersten Latch low schalten - Nach dem Latchen gleich wieder auf low schalten damit /OE nicht abgeschaltet wird
Max D. schrieb: > Solange deine Platine ansonsten sauber gelöst ist... Max D. schrieb: > - Beim starten erst high und dann auf Ausgang schalten Das ist natürlich die wichtigste Voraussetzung :) Aber ich denke, dass es passt :) Und aufstecken werd' ich das Ganze auch noch :) Also du meinst bevor der Pin im Programm als Ausgang definiert wird auf den Schaltzustand HIGH setzen?
Daniel schrieb: > Also du meinst bevor der Pin im Programm als Ausgang definiert wird auf > den Schaltzustand HIGH setzen? Denk einfach mal kurz nach was passieren würde wenn du den Pin erst auf Ausgang und dann high schaltest: Du hast einen ganz kurzen low-Puls der u.U. irgendwelchen BS mit deinem IC anstellt. Wenn du erst high und dann ausgang machst ist der Verlauf stabil. Würdet du den Ausgang low lassen bevor sinnvolle Daten drin sind, dann wird irgendein Rauschen auf den Ausgang geschaltet. Ich hab mal versucht das als Pseudocode darzustellen:
1 | //Init
|
2 | PORTx |= (1<<Pxn); |
3 | DDRx |= (1<<Pxn); |
4 | |
5 | spisend(byte_eins); |
6 | spisend(byte_zwei); |
7 | |
8 | PORTx &= ~(1<<Pxn); |
9 | delay(); //Zwischen 200 ns und 1 ms |
10 | PORTx |= (1<<Pxn); |
11 | delay(); //Zwischen 200 ns und 1 ms |
12 | PORTx &= ~(1<<Pxn); |
13 | |
14 | //Normaler Transfer
|
15 | |
16 | spisend(byte_eins); |
17 | spisend(byte_zwei); |
18 | |
19 | PORTx |= (1<<Pxn); |
20 | delay(); //Zwischen 200 ns und 1 ms |
21 | PORTx &= ~(1<<Pxn); |
Max D. schrieb: > Du hast einen ganz kurzen low-Puls der > u.U. irgendwelchen BS mit deinem IC anstellt. Wenn du erst high und dann > ausgang machst ist der Verlauf stabil. Alles klar, hab' verstanden :) Tausend Dank euch Allen!
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.