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.
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.
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.
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