Hallo zusammen! Ich möchte aus einem Clock Signal (CLK) ein Chip select Signal (CS) generieren, wenn das Clock Signal für eine bestimmte Periode Tp high geblieben ist. Das Ganze ist gedacht für einen Sensor mit einem seriellen Interface, aus dem ich nur dann ein neues Datum „rausclocken“ kann, wenn CS für eine gewisse Zeit high war. Weil der Sensor über ein längeres Kabel mit dem Controller verbunden sein soll, möchte ich CS nicht extra mitführen sondern (so einfach wie möglich) direkt am Sensor erzeugen. Ich habe zwar eine Idee wie man das machen könnte, bin mir aber unsicher was die konkrete Umsetzung angeht. Mein Gedanke war, CLK einerseits direkt auf ein UND-Gatter zu geben und andererseits über ein Tiefpass (einfaches RC-Glied) auf das UND. Das UND-Glied würde dazu führen, dass der Ausgang vom UND (mein CS) immer low ist, wenn Clock low ist. Andererseits führt der Teifpass dazu, dass der zweite Eingang des UNDs nach einer gewissen Zeit (je nach Zeitkonstante) high wird und dann, wenn auch Clock high ist, das CS erzeugt, bis CLK wieder auf low geht. Anbei eine kleine Skizze die (hoffentlich) verdeutlicht was ich meine. Meine Fragen dazu: 1.) Ist das ein "vernünftiger" Weg das Problem zu lösen oder gibt es einen besseren im Sinne von Einfachheit und Funktionssicherheit? 2.) Brauche ich Schmitt-Trigger vor den UND Eingängen oder kann ich die Hysterese verwenden, die sich aus den untersch. low- und high Schwellen des Gatters ergibt? 3.) Falls Schmitt-Trg: gibt es UND Glieder mit integr. Schmitt-Triggern in den Eingängen in SMD (das Ganze soll so klein wie möglich werden, weil es direkt mit auf die Platine mit dem Sensor soll)? Vielen Dank für alle Tipps! Gruß John
@John (Gast) >Ich möchte aus einem Clock Signal (CLK) ein Chip select Signal (CS) >generieren, wenn das Clock Signal für eine bestimmte Periode Tp high >geblieben ist. Siehe Monoflop. >1.) Ist das ein "vernünftiger" Weg das Problem zu lösen Nein. >2.) Brauche ich Schmitt-Trigger vor den UND Eingängen Wenn man nicht-digitale Signale wie vom Tiefpass an digitale ICs anlegt, braucht man die immer. Also ja. >3.) Falls Schmitt-Trg: gibt es UND Glieder mit integr. Schmitt-Triggern >in den Eingängen in SMD Ja, 74HC132.
Hallo Falk, danke für den Hinweis! Könntest du mir noch etwas konkreter auf die Sprünge helfen? Ich möchte ja nicht aus einem "kurzen" Puls einen "langen" machen, sondern abhängig von der Pulsdauer am Eingang einen Ausgangspuls erzeugen, der dann wieder auf Low geht wenn es der Eingang tut. Das wird sicher auch möglich sein, ich habe nur gerade keinen Ansatz Danke! John
@ John (Gast) >Sprünge helfen? Ich möchte ja nicht aus einem "kurzen" Puls einen >"langen" machen, sondern abhängig von der Pulsdauer am Eingang einen >Ausgangspuls erzeugen, der dann wieder auf Low geht wenn es der Eingang >tut. Viele Wege führen nach ROM. Per Monoflop. Man nimmt ein flankengetriggertes, z.B. 74HC123. Bei der fallenenden Flanke von CLK geht der Ausgang auf LOW und erzeugt den CS. Kommen nun für eine bestimmte Zeit keine fallenden Flanken mehr, geht der Ausgang wieder auf HIGH, CS wird inaktiv. > Das wird sicher auch möglich sein, ich habe nur gerade keinen > Ansatz Naja, jetzt wo ich nochmal drüber nachdenke, könnte man es auch mit einem UND-Gatter und Tiefpass machen, WENN man denn exakt dieses Verhalten mit der HIGH-Zeit will oder braucht. Aber ein UND mit Schmitttriggereingängen. Eben 74HC132, auch wenn das NAND ist.
Einen kleinen 8-Pinner direkt an den Sensor der das alles mit ein wenig code übernimmt wäre hier auch noch eine möglichkeit.
Kannst du das CS am Sensor nicht einfach dauerhaft auf High lassen? Oder macht der Sensor dann nicht das, was er soll? So wie du es mit dem TP vorschlägst, geht das prinzipiell schon, nur macht der TP auch eine Verschiebung auf der negativen Flanke des Taktes. Das heißt, dass du sicherstellen musst, dass die steigende Flanke des nachfolgenden Taktes erst dann kommt, wenn der TP wieder auf Null ist. Andernfalls bekommst du nochmal einen Impuls auf dem CS-Signal. Ein retriggerbares Monoflop erscheint mir hier sinnvoller. Das Monoflop wird mit Low-Pegel "zurückgesetzt" und läuft los, wenn der Pegel nach High geht. Ist die Zeit abgelaufen, geht der Ausgang auf "1". Die Zeit läuft ist so bemessen, dass bei normalem Takt immer vor Ablauf nachgetriggert wird. Bei einem verlängerten Takt läuft das Teil ab.
Okay, danke, über den Monoflop-Ansatz muss ich nochmal nachdenken. Beim 74hc132 würde man zwei Gatter "verknoten" um das UND zu bekommen, gel? Was mir allerdings nicht daran gefällt ist, dass ich so weing und so kleine Bauteile wie möglich verwenden wollte... Wenn ich nochmal nachfragen darf: ein echts UND mit Schmitt-Triggern, am liebsten in SOT23 o.ä., kennst du (oder jemand anders) nicht? Vielen Dank nochmal für die Hilfe! John
John schrieb: > danke für den Hinweis! Könntest du mir noch etwas konkreter auf die > Sprünge helfen? Ich möchte ja nicht aus einem "kurzen" Puls einen > "langen" machen Mitdenken! Stichwort "retriggerbares Monoflop". Wenn dessen Haltezeit länger ist als eine Taktperiode, dann bleibt sein Ausgang bei anliegendem Takt auf festem Pegel. Und schon fertig. Die einfachste Implementierung würde aus einer Diode, einem Kondensator, einem Pullup-Widerstand und einem Schmitt-Trigger bestehen. XL
Oh, da kamen noch andere Antworten... Also: Christian L. schrieb: > Einen kleinen 8-Pinner direkt an den Sensor der das alles mit ein wenig > code übernimmt wäre hier auch noch eine möglichkeit. Ja, also das ist auch irgendwie der Ansatz der mir am nächsten liegt =). Aber irgenwie kommt mir das schon sehr wie "overkill" vor. Im Hinterkopf habe ich das, aber irgendwie wollte ich es "eleganter" machen. Schlumpf schrieb: > Kannst du das CS am Sensor nicht einfach dauerhaft auf High lassen? Oder > macht der Sensor dann nicht das, was er soll? Ja, das ist genau das Problem, der Sensor braucht den Puls auf CS um den neunen Wert rauszuschieben.
Axel Schwenke schrieb: > Die einfachste Implementierung würde aus einer Diode, einem Kondensator, > einem Pullup-Widerstand und einem Schmitt-Trigger bestehen. Auch das klingt interessant! Ich denke gerne mit, wenn du das etwas konkretisieren könntest, würde es mir sehr helfen, damit anzufangen. Danke! John
eine andere Option wäre es, über einen Längskondensator die Flanken rauszufiltern und mit denen einen Kondensator "aufzupumpen". Um einen CS zu generieren, musst du dann nicht einen langen Impuls erzeugen, sondern ein Paket aus vielen kurzen. Bei dieser Variante brauchst du nur passive Bauteile.
@ John (Gast) >> Die einfachste Implementierung würde aus einer Diode, einem Kondensator, >> einem Pullup-Widerstand und einem Schmitt-Trigger bestehen. >Auch das klingt interessant! Ich denke gerne mit, wenn du das etwas >konkretisieren könntest, würde es mir sehr helfen, damit anzufangen. Siehe Anhang.
> Einen kleinen 8-Pinner direkt an den Sensor der das alles mit ein wenig > code übernimmt wäre hier auch noch eine möglichkeit. jaja, und möglichst noch mit einem RTOS und in C++ programmiert. Wenn programmierer Hardware bauen....
Falk Brunner schrieb: > Siehe Anhang. Zunächst: Danke, Falk! An sonsten mal kurz die Nachfrage, ob ich das Prinzip richtig verstanden habe (sorry wenn's eigentlich trival ist...): Wenn der Eingang auf low ist, fließt die Ladung der Kapazität über den Eingang nach Masse ab (die Kapazität wird gewissermaßen kurzgeschlossen), damit ist das Signal am Eingang des Schmitt-Triggers sofort 0. Wenn der Eingang high wird, wird die Kapazität über den Widerstand geladen und die Diode sperrt weil ihre Kathode positiver als ihre Anode ist. Je nach dem wann die Schwelle vom Trigger erreicht ist, schaltet der dann eben irgendwann in diesem Zustand durch. Wenn die Freq. vom Eingangssignal jetzt groß genug wird, wird die Kapazität nicht mehr bis an die Schwelle vom Trigger geladen und dieser löst nicht aus, gibt allerdings ein high aus, weil er nochmal invertiert. D. h. ich muss noch einen zweiten Schmitt-Trigger bzw Inverter nachschalten, um das Verhalten zu erzielen, das ich suche. Ist das so in etwas richtig? Dann noch drei Anschlussfragen: Sehe ich es richtig, dass ich den Aufladevorgang am Kondensator, und damit die ZEitkonstante einfach über tau = RC berechnen kann? Gibt es entweder einen einzelnen nichtinvert. Schmitt-Trigger oder zwei invertierende in SOT23 o. ä. Bauform bei Reichelt? sn74lvc2g14 käme in Frage, gibts da aber nicht. Vielleicht weiss ja jemand was, sonst bestell ich bei digikey oder so. Wenn man extrem kritisch wäre, was würde man an der Schaltung noch bemängeln (das ist eher ne philosophische Frage... ;-)) Danke nochmal! John
Achso, dann nochwas: Bis zu welchen Frequenzen kann ich das vom 74xx14 her einsetzen. Wäre schön wenn die Clock bis 2 MHz sein könnte (ist aber der Extremfall). Danke! John
@ John (Gast) >das so in etwas richtig? Ja. >Sehe ich es richtig, dass ich den Aufladevorgang am Kondensator, und >damit die ZEitkonstante einfach über tau = RC berechnen kann? Ja.
Wegen SOT-23 und der Mikrocontroller-Idee: https://secure.reichelt.de/PIC-12-Controller/PIC-10F202T-I-OT/3//index.html?ACTION=3&GROUPID=2966&ARTICLE=86954&SHOW=1&START=0&OFFSET=500& Der reicht mehr als aus und kost nicht die Welt. Keine weiteren Bauteile nötig (naja, den obligatorischen 100nF an Vcc vielleicht).
Sam P. schrieb: > Wegen SOT-23 und der Mikrocontroller-Idee: > > https://secure.reichelt.de/PIC-12-Controller/PIC-1... > > Der reicht mehr als aus und kost nicht die Welt. Keine weiteren Bauteile > nötig (naja, den obligatorischen 100nF an Vcc vielleicht). Ja, hast schon recht. Aber trotzdem irgendwie nicht schön - finde ich :-).
>Ja, hast schon recht. Aber trotzdem irgendwie nicht schön - finde ich >:-). Dein CS aus dem Clock zu erzeugen ist auch nicht schön. Ob das mit deinem Sensor klappt ist die zweite Frage. Welcher Sensor war das noch mal? Ich würde eine eigene Clock Leitung bevorzugen.
John schrieb: > Zunächst: Danke, Falk! Heh! Das war mein Vorschlag! ;) > Ist das so in etwas richtig? Ja. Wobei es natürlich auch nichtinvertierende Schmitt-Trigger gibt. Oder man könnte einen OPV dafür verwenden. Oder sich auf die Charakteristik des Logik-Eingangs dahinter verlassen oder ... oder ... oder > Dann noch drei Anschlussfragen: > Sehe ich es richtig, dass ich den Aufladevorgang am Kondensator, und > damit die ZEitkonstante einfach über tau = RC berechnen kann? Ja. Ladekurve vom RC-Glied und Schaltspannung des Triggers verwenden. Z.B. für U_b/2 kommt man auf t = ln(2) * RC > Wenn man extrem kritisch wäre, was würde man an der Schaltung noch > bemängeln (das ist eher ne philosophische Frage... ;-)) Es ist wie gesagt nur eine mögliche Variante von vielen. Und sie ist auch nicht hundertprozentig wasserdicht. Z.B. verursacht die Diode in Reihe zu einem (potentiell) geladenen Kondensator eine möglicherweise nicht tolerierbare Belastung des Taktsignals. Zumindest direkt nach der fallenden Flanke, wenn der fließende Strom allein durch den Innenwiderstand des steuernden Signals, der Diode und des Kondensators begrenzt wird. Dem könnte man abhelfen, indem man einen Widerstand in Reihe mit der Diode schaltet. Auch darf dein Taktsignal nicht auf dem L-Pegel stehenbleiben. Und natürlich muß die Flußspannung der Diode klein genug sein, um noch nennenswert Pegel am Ausgang zu liefern. Wasserdicht würde man das machen, indem man eine Taktflanke (so wie du das gezeichnet hast die fallende) auswerten und in ein retriggerbares Monoflop reinschieben würde. Also entweder gleich ein flankengesteuertes Monoflop oder eine Differenzierstufe vorschalten. Auch Monoflops gibts als fertige IC. XL
Ich hab genau sowas das (Clock lange halten um ein anderes Signal zu erzeugen) mal gemacht, ich kann die ltspice-Simulation dazu mal morgen raussuchen. Das blöde an der normalen RC Lösung war glaub ich, dass der Kondensator sich in der Low Phase des Taktes nicht schnell genug entlädt und man u.U. das Zweitsignal erzeugt, wenn der Takt zu lange normal läuft. Man kann aber mit einem Transistor C schnell entladen, wenn der Takt auf Low geht.
Ich mach mal die Ingrid Axel Schwenke schrieb: > Wasserdicht würde man das machen, indem man eine Taktflanke (so wie du > das gezeichnet hast die fallende) auswerten und in ein retriggerbares > Monoflop reinschieben würde. Also entweder gleich ein flankengesteuertes > Monoflop oder eine Differenzierstufe vorschalten. Auch Monoflops gibts > als fertige IC. z.B. ein halber 74xx123 oder ein halber (74HC)4538 oder ein ganzer 74xx122. Taktsignal an Eingang B, andere Eingänge nach Datenblatt. Zeitkonstante = maximale Taktperiode + \epsilon. Ausgang /Q bleibt auf L solange ein Takt anliegt und geht in Taktpausen auf H. XL
@ Axel Schwenke (a-za-z0-9) >z.B. ein halber 74xx123 oder ein halber (74HC)4538 oder ein ganzer >74xx122. Wurde ja schon vorgeschlagen, apsst dem OP aber nicht wegen der Größe. ODer gibts die als Single Gate in SOT23? ;-)
Axel Schwenke schrieb: > Heh! Das war mein Vorschlag! ;) Ja, ich weiß! Auch dir vielen Dank - wobei Falk ja der erste war der mit einem Schaltbild rauskam. So ganz "von Null" bekomme ich sowas noch nicht hin... :-) Axel Schwenke schrieb: > Und sie ist auch nicht hundertprozentig wasserdicht. Z.B. verursacht die > Diode in Reihe zu einem (potentiell) geladenen Kondensator eine > möglicherweise nicht tolerierbare Belastung des Taktsignals. Hm, okay. Also um's mal konkret zu machen, der Takt kommt aus einem MAX488 (oder ähnlichem), er wird nämlich differentiell zum Sensor übertragen (ist zumindest aktuell mein Plan). Ich bin mir nicht sicher, wie ich die hier entscheidende Größe aus dem MAX Datenblatt rauslese... Axel Schwenke schrieb: > Dem könnte man abhelfen, indem man einen > Widerstand in Reihe mit der Diode schaltet. Das würde allerdings den Entladevorgang verzögern, oder? Wie kann ich beim MAX rausfinden, wie stark ich den Strom begrenzen muss? Axel Schwenke schrieb: > Auch darf dein Taktsignal > nicht auf dem L-Pegel stehenbleiben. Das verstehe ich ehrlich gesagt nicht. Dann würde doch einfach ein durch den Widerstand bestimmter Strom nach Masse über Clock abfließen, ist das ein Problem? Der Strom wäre doch eher klein weil der R groß ist... Marco M. schrieb: > Das blöde an der normalen RC Lösung war glaub ich, dass der > Kondensator sich in der Low Phase des Taktes nicht schnell genug entlädt > und man u.U. das Zweitsignal erzeugt, wenn der Takt zu lange normal > läuft. Man kann aber mit einem Transistor C schnell entladen, wenn der > Takt auf Low geht. Ich baue die Schaltung einfach mal auf, dann werde ich sehen wie das real darstellt. Mit der Monoflop-Variante werde ich mich gedanklich auch nochmal befassen, jetzt werde ich erstmal diese Schmitt-Trigger Version zu ende "erforschen". Also danke nochmal für die Tipps! Und wenn jemandem nochwas einfällt: immer her damit... ;-) Gruß John
@ John (Gast) >> Dem könnte man abhelfen, indem man einen >> Widerstand in Reihe mit der Diode schaltet. >Das würde allerdings den Entladevorgang verzögern, oder? Ja. >Wie kann ich >beim MAX rausfinden, wie stark ich den Strom begrenzen muss? Naja, man muss es nicht zu akademisch sehen. 100pF stellt eine große, aber noch akzeptable Last dar. Typische CMOS-Ausgänge haben um die 30-100 Ohm Ausgangswiderstand, das passt schon man braucht keinen extra Widerstand. >> Auch darf dein Taktsignal >> nicht auf dem L-Pegel stehenbleiben. >Das verstehe ich ehrlich gesagt nicht. Dann würde doch einfach ein durch >den Widerstand bestimmter Strom nach Masse über Clock abfließen, ist das >ein Problem? Nein. >Der Strom wäre doch eher klein weil der R groß ist... Eben. Aber man kommt dann mit einem normalen invertierenden Schmitt-Trigger aus.
Ach so, dann muss man R und C vertauschen und die Diode umpolen.
John schrieb: > Axel Schwenke schrieb: >> Z.B. verursacht die >> Diode in Reihe zu einem (potentiell) geladenen Kondensator eine >> möglicherweise nicht tolerierbare Belastung des Taktsignals. > > Hm, okay. Also um's mal konkret zu machen, der Takt kommt aus einem > MAX488 (oder ähnlichem), er wird nämlich differentiell zum Sensor > übertragen (ist zumindest aktuell mein Plan). Ich bin mir nicht sicher, > wie ich die hier entscheidende Größe aus dem MAX Datenblatt rauslese... Es geht hier weniger um die Belastung der Quelle als darum, daß du ein derartig belastetes Taktsignal nicht mehr für was anderes benutzen kannst; weil zumindest die fallende Flanke mehr oder weniger verschliffen sein wird. Wenn du das simulieren willst: ideales Rechtecksignal 0/5V in Reihe 100R (der Ausgangswiderstand der realen Quelle) in Reihe Diode auf Kondensator gegen GND. Pullup von Kondensator gegen +5V, RC-Glied und Frequenz so legen, daß der Kondensator während der H-Phase des Taktes auf ca. 2.5V aufgeladen wird. Und dann schau dir das Signal zwischen den 100R und der Diode an. Insbesondere die fallende Flanke. >> Dem könnte man abhelfen, indem man einen >> Widerstand in Reihe mit der Diode schaltet. > > Das würde allerdings den Entladevorgang verzögern, oder? Richtig. Dieser Widerstand müßte einerseits deutlich größer sein als der Innenwiderstand der Signalquelle, andererseits deutlich kleiner als der Pullup. In der Praxis würde man wohl eher einen Treiber dazwischenschalten. Der könnte dann auch gleich die zweite Negierung übernehmen. >> Auch darf dein Taktsignal >> nicht auf dem L-Pegel stehenbleiben. > > Das verstehe ich ehrlich gesagt nicht. Dann würde doch einfach ein durch > den Widerstand bestimmter Strom nach Masse über Clock abfließen, ist das > ein Problem? Der Strom wäre doch eher klein weil der R groß ist... Das Problem wäre, daß der stehengebliebene Takt nicht erkannt würde. XL
Axel Schwenke schrieb: > Wenn du das simulieren willst: ideales Rechtecksignal 0/5V in Reihe 100R > (der Ausgangswiderstand der realen Quelle) in Reihe Diode auf > Kondensator gegen GND. Pullup von Kondensator gegen +5V, RC-Glied und > Frequenz so legen, daß der Kondensator während der H-Phase des Taktes > auf ca. 2.5V aufgeladen wird. Und dann schau dir das Signal zwischen den > 100R und der Diode an. Insbesondere die fallende Flanke. Das habe ich in meiner Simulation nicht beobachtet, vielleicht habe ich noch was falsch gemacht. Ich habe jetzt noch etwas rumgespielt (siehe Anhang). Um die Quelle (CLK) möglichst wenig zu beeinflussen, gehe ich damit als erstes jetzt direkt in den inv. Schmitt-Trigger. CLK für den Sensor greife ich dann enstpr. vor dem Inverter ab. Um unter diesen Bedingungen das nötige Verhalten zu erzeugen, habe ich die Schaltung quasi umgedreht, Falk hatte das oben angedeutet. Übersehe ich was oder macht das die Sache so etwas solider (insb durch den ersten Inverter/Trigger)? Axel Schwenke schrieb: > Das Problem wäre, daß der stehengebliebene Takt nicht erkannt würde. Verstehe ich immer noch nicht - bzw sehe das Problem in diesem Zusammenhang nicht. Wenn CLK dauerhaft auf 0 ist bleibt CS das doch auch. Da die Daten direkt mit CLK rausgeschoben werden (quasi wie bei einem Schieberegister, oder bei SPI) kommen dann ohne CLK eben auch keine Daten, also das scheint mir kein Probl. zu sein. Danke und Gruß! John
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.