Sauerlaender
12.05.2009, 21:30 |
Suche Schaltung zur Zeitverzögerung von Clocksignalen (Schaltungstechnik) |
Hallo,
ich bebötige eine Schaltung mit der 5V Clocksignale (5V,1Mhz,16 Pulse) um einen Clock nach "rechts" shiften kann.
Ich möchte einen 15 Bit Ausgang eines Ic's in ein 16Bit System übergeben.Momentan ist das MSB immer 1 so dass ich einen Offset von 2^15 bekommen.
Durch die Verschiebung verspreche ich mit diesen Fehler zu vermeiden.
Ich habe bereits das Clocksignal durch 4xOder-Gater geschleift um die Durchlaufzeiten mitzunehmen. Dies fkt. jedoch, gibt es manchmal aussetzer da clock und data nicht ganz passen
Googeln und Schaltungssammlungen durchsuchen hat leider nicht geholfn
Vielen Dank für eure Hilfe
 |
Torsten

12.05.2009, 23:01 (editiert von Torsten am 12.05.2009 um 23:03)
@ Sauerlaender
|
Suche Schaltung zur Zeitverzögerung von Clocksignalen |
» Ich habe bereits das Clocksignal durch 4xOder-Gater geschleift um die Durchlaufzeiten mitzunehmen. Dies fkt. jedoch, gibt es manchmal aussetzer da clock und data nicht ganz passen
Digitalschaltungen, die bewusst die Verzögerung von Gattern ausnutzen, sind in meinen Augen gefährlicher Pfusch.
» ich bebötige eine Schaltung mit der 5V Clocksignale (5V,1Mhz,16 Pulse) um einen Clock nach "rechts" shiften kann.
Wenn Du ein T-periodisches Signal um T verschieben würdest, hättest Du wieder das Ausgangssignal, denn ich nehme an, dass die clock nicht erst in dem Moment gestartet wird. Was Du gezeichnet hast, ist das Unterdrücken von einem clk Impuls.
Wenn ich Dein Diagramm richtig lese, würde das Unterdrücken des ersten clk Impulses allerdings eine Multiplikation deines Wertes mit 2 bedeuten. Bist Du Dir dessen bewusst und willst Du das?
Das Nachfolgende 16-bit System erwartet ja auf die erste clk Flanke das höchstwertigste Bit (B15), erhält aber B14.
Dein Problem ist wohl eher, dass Dein Ausgangssignal vor der Ausgabe von B14 high ist, Du aber gerne ein low Signal hättest. Interessant wäre, ob Du ein weiteres Signal zur Verfügung hast, dass den Beginn der Übertragungssequenz angibt. Dann könntest Du einfach ein AND-Gatter in den Datenpfad schalten und den zweiten Eingang des AND mit einen Signal belegen, was für die Dauer des nicht vorhandenen 16. Bits 0 ist.
Leider hast Du recht wenig Informationen gegeben, so dass ich hier nur raten kann, ob das vielleicht ein geeigneter Lösungsweg wäre.
Achso: Zum Verzögern eines Signals um eine clk Periode nutzt man üblicherweise ein Flipflop. Aber die clk mit einem clk-synchronen FF verzögern... da verknoten sich meine Gehirnwindungen Das schaff ich heute Abend nicht mehr.
Was mir gerade noch auffällt: Soll t_Per in Deiner Zeichnung die clk Periode darstellen? Dann ist die aber äußerst merkwürdig eingezeichnet...
Gruß
Torsten |
Pimpino

12.05.2009, 23:40
@ Sauerlaender
|
Suche Schaltung zur Zeitverzögerung von Clocksignalen |
Hallo, wäre es denkbar einfach SCLK zu invertieren?
Eventuell muss man dazu noch ein FF am Anfang haben,um
eine Dauer-1 vor Beginn des Takts zu vermeiden.
Sonst schonmal über ein Schieberegister nachgedacht?
Gruß aus dem Kreis Soest |
Sauerlaender
13.05.2009, 22:19
@ Torsten
|
Suche Schaltung zur Zeitverzögerung von Clocksignalen |
Hallo,
vielen Dank für Antworten
» » Ich habe bereits das Clocksignal durch 4xOder-Gater geschleift um die
» Durchlaufzeiten mitzunehmen. Dies fkt. jedoch, gibt es manchmal aussetzer
» da clock und data nicht ganz passen
»
» Digitalschaltungen, die bewusst die Verzögerung von Gattern ausnutzen,
» sind in meinen Augen gefährlicher Pfusch.
»
» » ich bebötige eine Schaltung mit der 5V Clocksignale (5V,1Mhz,16 Pulse)
» um einen Clock nach "rechts" shiften kann.
»
» Wenn Du ein T-periodisches Signal um T verschieben würdest, hättest Du
» wieder das Ausgangssignal, denn ich nehme an, dass die clock nicht erst in
» dem Moment gestartet wird. Was Du gezeichnet hast, ist das Unterdrücken von
» einem clk Impuls.
»
Doch der clock besteht immer aus 16er Paketen die alle paarhundert µs gepulsed werden.
» Wenn ich Dein Diagramm richtig lese, würde das Unterdrücken des ersten clk
» Impulses allerdings eine Multiplikation deines Wertes mit 2 bedeuten. Bist
» Du Dir dessen bewusst und willst Du das?
da bin ich mir nicht ganz sicher, der Hintergrund ist der das ich aus eine 15bit Wort ein 16Bit Wort machen will.Bei dem 15Bit Wort ist das erste Bit allerdings immer "1" ==> siehe neuer Anhang
» Das Nachfolgende 16-bit System erwartet ja auf die erste clk Flanke das
» höchstwertigste Bit (B15), erhält aber B14.
»
das 16-bit system erhält quasi bit 16 das immer "1" ist
» Dein Problem ist wohl eher, dass Dein Ausgangssignal vor der Ausgabe von
» B14 high ist, Du aber gerne ein low Signal hättest. Interessant wäre, ob
» Du ein weiteres Signal zur Verfügung hast, dass den Beginn der
» Übertragungssequenz angibt.
nein leider nur ein CS der aber stark schwankt und der µC kann diesen nicht genau plazieren
Dann könntest Du einfach ein AND-Gatter in den
» Datenpfad schalten und den zweiten Eingang des AND mit einen Signal
» belegen, was für die Dauer des nicht vorhandenen 16. Bits 0 ist.
» Leider hast Du recht wenig Informationen gegeben, so dass ich hier nur
» raten kann, ob das vielleicht ein geeigneter Lösungsweg wäre.
»
» Achso: Zum Verzögern eines Signals um eine clk Periode nutzt man
» üblicherweise ein Flipflop. Aber die clk mit einem clk-synchronen FF
» verzögern... da verknoten sich meine Gehirnwindungen Das schaff ich heute
» Abend nicht mehr.
»
» Was mir gerade noch auffällt: Soll t_Per in Deiner Zeichnung die clk
» Periode darstellen? Dann ist die aber äußerst merkwürdig eingezeichnet...
stimmt, danke
Ich habe ein verzögerungsglied mit mehreren Gattern+RC Beschaltung aufgebaut und so den Clock verschoben (unsaubere Methode, hat aber funktioniert.
Ich will jetzt versuchen ein solches Delay IC zu verwenden?
http://de.farnell.com/maxim/ds1000z-500/delay-line-5-tap-500ns-soic8/dp/117365?_requestid=520977
Was hälst du von der Methode?
» Gruß
» Torsten |
Torsten

14.05.2009, 00:17
@ Sauerlaender
|
Suche Schaltung zur Zeitverzögerung von Clocksignalen |
» Doch der clock besteht immer aus 16er Paketen die alle paarhundert µs gepulsed werden.
OK, das Du ein Design mit mehreren Clocks hast, war aus der Fragestellung nicht ersichtlich.
Ist die Frequenz der hier dargestellten Clock identisch mit der Hauptclock?
Es muss ja wenigstens eine weitere Clock geben, die den µC versorgt. Oder kriegt der auch nur periodisch mal einen kurzen Burst von Clock Impulsen?
» da bin ich mir nicht ganz sicher, der Hintergrund ist der das ich aus eine 15bit Wort ein 16Bit Wort machen will. Bei dem 15Bit Wort ist das erste Bit allerdings immer "1" ==> siehe neuer Anhang
Einen neuen Anhang sehe ich nicht. Da ist wohl was schief gelaufen.
Was Du meinst, ist aber aus Deinem Timing-Diagramm im ersten Beitrag ersichtlich.
Allerdings fürchte ich, Du hast nicht ganz verstanden, was ich bezüglich der Multiplikation mit 2 gesagt habe.
Du hast einen Sender, der einen 15 Bit Wert senden möchte. Die Bits nummerieren wir mal von B0 bis B14, wobei B14 das höchstwertigste Bit ist und zuerst gesendet wird.
Der Empfänger erwartet 16 Bit (B0 bis B15) und da die Werte seriell empfangen werden, wird er sie höchstwahrscheinlich intern in ein Schieberegister laden.
Wenn Du jetzt einfach den gesamten Clock-Burst um eine Taktperiode nach hinten verschiebst, tritt folgendes Problem auf:
Der Sender legt den Wert B14 auf die Leitung. Jetzt tritt die erste Clockflanke auf und der Empfänger übernimmt den Wert und schreibt ihn in sein Schieberegister.
Der Sender legt B13 auf die Leitung und mit der nächsten Clockflanke wird B13 beim Empfänger in die niederwertigste Stelle des Schieberegisters geladen. Der vorherige Wert (B14) wird folglich eine Stelle weiter geschoben und steht somit an der zweitniedrigsten Stelle.
Dieses Spiel geht jetzt für die restlichen Bits so weiter.
Zum Schluss schreibt der Empfänger das Bit B0 in sein Schieberegister. Der zuerst gesendete Wert B14 liegt jetzt an der zweithöchsten Position im Schieberegister. Die höchstwertigste Stelle ist entweder mit 0 initialisiert oder undefiniert, je nachdem wie der Empfänger gebaut ist. Bis zum jetzigen Zeitpunkt sind 15 Takte vergangen, das heißt, es folgt noch eine weitere Clockflanke. Aus dem von Dir geposteten Timing-Diagramm ist ersichtlich, dass der Sender, nachdem er alle 15 Bits übermittelt hat, eine Zeit lang eine 0 auf die Leitung legt. Jetzt kommt die 16. Clockflanke und der Empfänger (der ja 16 Werte erwartet) schiebt alle Werte im Schieberegister eine Position weiter und schreibt die 0 an die unterste Stelle.
Im Schieberegister lieget jetzt also die folgenden Werte: (niederwertigstes Bit steht rechts)
B14, B13, ..., B1, B0, 0
Das entspricht dem ursprünglichen Wert multipliziert mit dem Faktor 2.
Du siehst also, ein Verschieben des Clock-Bursts um eine Clockperiode hilft Dir nicht.
Da das nachfolgende System 16 Bit erwartet, wirst Du wohl nicht drum herumkommen, auch 16 Bit zu verschicken, es sei denn der Baustein bietet auch Möglichkeiten, nur 15 Bit zu empfangen und damit weiterzuarbeiten. Von was für einem Empfänger sprechen wir denn eigentlich? Irgendein fertiger IC oder vielleicht ein µC?
Eine Möglichkeit: Ein 16 Bit breites Schieberegister, mit dem Du einen Ring baust. Der erste Wert wird mit 0 initialisiert, alle anderen mit 1. Dann die Datenleitung und den ersten Wert des Schiebregisters mit einen AND-Gatter verbinden. Damit ist sichergestellt, dass in der Zeit vor der Übermittlung des ersten Bits (B14) das Signal auf 0 liegt.
Es geht auch nur mit einem Flipflop, aber dann müsste es vor jeder Übermittlung einer solchen 16 Bit Zahl erneut initialisiert werden, während das Schieberegister nur einmal mit dem normalen Reset der Schaltung initialisiert werden muss.
Ist leider recht aufwendig, aber ohne die beteiligten Systeme und weiteren Signale zu kennen, ist es sehr schwer, irgendwelche Tipps zu geben.
» Ich will jetzt versuchen ein solches Delay IC zu verwenden?
»
» http://de.farnell.com/maxim/ds1000z-500/delay-line-5-tap-500ns-soic8/dp/117365?_requestid=520977
»
» Was hälst du von der Methode?
Sagen wir es mal so: Ein Delay-IC ist auf jeden Fall besser als irgendeine RC-Kombination. Beim Delay-IC hast Du eine relativ eng tolerierte und wohldefinierte Verzögerung. Fast noch wichtiger ist aber, dass Du weiterhin saubere Clockflanken hast. RC-Glieder werden im Gegensatz dazu stets zu einer runden / abgeflachten Flanke führen.
Wenn dann noch Störungen in die Leitung einkoppeln, kann das dazu führen, dass das nachfolgende Gatter auf einer Clockflanke mehrere Flanken erkennt. Deswegen setzt man bei flachen Flanken Schmitt-Trigger ein, um wieder auf saubere Pegel zu kommen.
Das eigentliche, von mir oben geschilderte Problem bleibt aber auch bei dieser Vorgehensweise bestehen.
Zum Erfolg führen wird daher wohl trotzdem nicht.
Gruß
Torsten |
Sauerlaender
21.05.2009, 10:20
@ Torsten
|
Suche Schaltung zur Zeitverzögerung von Clocksignalen |
Vielen Dank für die ganzen Tipps,
ich habe das System mit einem Clock-Delay getestet und es hat funktioniert.
Der Sender ist der HCPL0872 (1 permanentes Bit, 15 Datenbits)
http://de.farnell.com/avago-technologies/hcpl-0872-000e/smd-interface-driver-smd-so-16/dp/9130195?_requestid=629644
und der Empfänger ist der DAC8830 (benötigt 16 Datenbits)
http://focus.ti.com/general/docs/lit/getliterature.tsp?genericPartNumber=dac8830&fileType=pdf
die Clock wird um 1 Puls nach rechts verschoben somit ist der 1 Puls für den DAC nicht mehr erkennbar und der letzte ist immer 0. Der Fehler beträgt somit 1/2^16 damit kann ich leben.
Gruss vom Rande des Kreises Soest |