Forum: Mikrocontroller und Digitale Elektronik Schieberegister-Kaskade schiebt in der Mitte der Kaskade einen Takt zu weit


von Ralph K. (rosti_mcn)


Angehängte Dateien:

Lesenswert?

Ich komme gerade mit einem toten Vollverstärker nicht weiter, den ich 
gerne wiederbeleben möchte.
Er besteht aus 3 Platinen: Controller, Power-Amp und Vorverstärker.
Die Funktionen des Vorverstärkers (also Quellenwahl und 
Lautstärkeregelung) werden von drei kaskadierten 74HC4094 
Schieberegistern gesteuert, die Daten/Takt/Strobe vom Prozessor (bzw. 
dem letzten der drei SR, die sich bereits auf dem Controller-Board 
befinden) bekommen. Daten werden jeweils von QS zum nächsten SR 
weitergegeben, die einzelnen SR hängen hintereinander an der gleichen 
Taktleitung.

Da die Z80-CPU auf dem Controller-Board gestorben war, habe ich sie 
durch einen AVR ATmega ersetzt.
Mein Problem ist nun, dass die Schieberegister auf dem 
Vorverstärker-Board die Daten um genau einen Takt weiter schieben, als 
sie sollten.

Da die Leitungslänge vom Prozessor bis zum letzten SR fast 50cm ist (und 
zudem noch über 2 Flexkabel respektive 4 Steckverbinder läuft), habe ich 
mir die existierenden Threads zum Thema "SR an langer Leitung" 
reingezogen, aber als Nicht-vom-Fach-Mann leider nicht alles davon so 
gut verstanden, dass ich mir das Phänomen jetzt erklären könnte. Daher 
meine Bitte um eure Hilfe ;)

Das am häufigsten in solchen Zusammenhängen genannte Problem ist die 
Terminierung der Taktleitung - die hier zu fehlen scheint. Jedenfalls 
habe ich keine entdecken können und im (offiziell nicht verfügbaren) 
Schaltplan fehlt sie auch. Das gibt also 'ne satte Reflexion am Ende 
Leitung. Die Low-High-Flanke zeigt an meinem 100MHz-Oszi ein leichtes 
Überschwingen. Soweit - so gut. Aber das kann ja nun nicht dazu führen, 
dass das 4. bis 6. SR in der Kaskade in einer Taktfolge genau einen Takt 
mehr sehen als die ersten drei, oder irre ich mich da? Die Taktfolge an 
sich ist übrigens langsam.

Was ich eher verstehen würde, wäre folgendes: wenn der Dateneingang des 
4. SRs seinen Taktimpuls erst zu einem Zeitpunkt erkennt, zu dem das 
vorangehende SR seinen QS-Ausgang bereits geshifted hat, ergibt sich das 
was ich beobachte. Nur - wo soll diese Verzögerung herkommen??? Und dann 
nur auf der Taktleitung und nicht in gleicher Weise auf der 
Datenleitung, sonst würde sich der Effekt ja wieder aufheben.
Liege ich damit richtig? Und wie sähe dann die Lösung des Problems aus?

Bitte seid so nett und lasst Antworten der Art: "mach einfach 'ne 
Terminierung ran und gut isses". Kann sein, dass das so ist. Ich möchte 
aber vor allem verstehen, was da im Detail passiert und wie das 
schaltungstechnisch a) idealerweise und b) in meinem Fall am einfachsten 
zu lösen ist.


Vielen Dank schon mal im Voraus ;)
Ralph

von Beknnerschreiben (Gast)


Lesenswert?

Moin Moin,

naja, wenn es wirklich zu Reflektionen auf der Clock-Leitung kommt, dann 
kann es durchaus sein, dass eines oder mehrere SR die Reflexion als 
Clock-Puls verstehen. Überschwinger bei der Low-High Flanke sind 
vermutlich nicht so das Problem.

Die Frage ist aber auch, was und wie Du da eigentlich misst.

Ich würde da mal ein Rechteck draufgeben und dann am Anfang und am Ende 
der Clock-Leitung messen. Wenn es Reflexionen gibt, solltest Du die so 
sehen können.

Außerdem könntest Du testweise ja mal CLK--->240R--->120pF--->GND hinter 
das letzte SR schrauben. Das wäre eine Terminierung.

von HildeK (Gast)


Lesenswert?

Ralph K. schrieb:
> Das am häufigsten in solchen Zusammenhängen genannte Problem ist die
> Terminierung der Taktleitung - die hier zu fehlen scheint.
Ja, führt zu gestörten Taktflanken.

> im (offiziell nicht verfügbaren)
> Schaltplan fehlt sie auch.
Das Gerät ist schon älter (Z80), die CPU ist mit einer deutlich 
langsameren Technologie gefertigt, die Flanken haben größere 
Anstiegs-/Abfallzeiten. Deshalb ging es damals.

> Die Taktfolge an sich ist übrigens langsam.
Die Taktfrequenz ist egal, entscheidend sind die Flankensteilheit 
zusammen mit der Leitungslänge und den Stichleitungslängen.

> Was ich eher verstehen würde, wäre folgendes: wenn der Dateneingang des
> 4. SRs seinen Taktimpuls erst zu einem Zeitpunkt erkennt, zu dem das
> vorangehende SR seinen QS-Ausgang bereits geshifted hat, ergibt sich das
> was ich beobachte. Nur - wo soll diese Verzögerung herkommen???
Kann passieren, wenn die Datenleitung deutlich länger ist als die 
Taktleitung. Dem kann man auch damit begegnen, dass man den Takt am 
letzten FF einspeist, die Daten natürlich am ersten.

> Bitte seid so nett und lasst Antworten der Art: "mach einfach 'ne
> Terminierung ran und gut isses".
Terminierung mag hier helfen. Aber warum willst du gerade das 
ausschließen?
Vielleicht ist auch dein neuer Prozessor nicht in der Lage, so viele 
Eingänge sinnvoll zu treiben.

> Kann sein, dass das so ist. Ich möchte
> aber vor allem verstehen, was da im Detail passiert
Höchstwahrscheinlich Reflexionen, die zu einer Doppelflanke im Takt 
führen.
Abhilfe ist tatsächlich in erster Linie eine Terminierung.

> und wie das
> schaltungstechnisch a) idealerweise
Idealerweise wäre eine echte Taktverteilung die sicherste Lösung. Jedes 
FF (meinetwegen auch zwei oder drei, die räumlich sehr nahe beieinander 
sind) bekommt eine eigene Taktleitung mit quellseitiger 
Serienterminierung.
In deinem Fall: zumindest das Vorverstärkerboard müsste so mit einem 
extra gepufferten Takt versorgt werden.
Z.B. so:
1
             +-BUF--33Ω----- Controller
2
             | 
3
Taktquelle --o
4
             |
5
             +-BUF--33Ω----- Vorverstärker
Vielleicht geht das auch ohne den Buffer (z.B. CD4050), nur mit den 
getrennten, serienterminierten Leitungen. Das hängt einfach von dem mir 
unbekannten räumlichen Aufbau ab.
Und immer schön darauf achten, dass die Taktleitung nicht kürzer ist als 
die Datenleitung.

> und b) in meinem Fall am einfachsten zu lösen ist.
Siehe oben oder:
Beknnerschreiben schrieb:
> Außerdem könntest Du testweise ja mal CLK--->240R--->120pF--->GND hinter
> das letzte SR schrauben. Das wäre eine Terminierung.

von Peter D. (peda)


Lesenswert?

Ralph K. schrieb:
> Da die Z80-CPU auf dem Controller-Board gestorben war, habe ich sie
> durch einen AVR ATmega ersetzt.

Hast Du nur den Z80 ersetzt oder auch die Peripherie-ICs?
Die Z80-Peripherie wird hochohmiger gewesen sein, d.h. langsamere 
Flanken. Häng mal in Reihe zu SCK, MOSI und Latch des AVR Widerstände 
(47..470R).

von Mike (Gast)


Lesenswert?

Mal die Versorgungsspannung der Schieberegister mit dem Oszi angeschaut? 
Vielleicht kommt es hier beim Umschalten zu Spannungseinbrüchen, 
möglicherweise durch defekte Elkos.

von Ralph K. (rosti_mcn)


Lesenswert?

So, jetzt bin ich weitergekommen. Eine Terminierung der Taktleitung hat 
in der Tat das praktische Problem gelöst :)

Aber nicht das theoretische. Denn es handelt sich ja um eine 48 Bit 
lange Taktfolge. Ich verstehe nicht wie es sein kann, dass da genau 
ein Bit zu viel weitergeschoben wurde. Denn Leitungsreflexionen wirken 
sich ja auf jede Taktflanke aus. Und da außerdem die einzelnen 
Taktimpulse mit 2µs gefühlte Ewigkeiten auseinanderliegen, scheint es 
mir unwahrscheinlich zu sein, dass es ausgerechnet die erste oder letzte 
Flanke in besonderer Weise betrifft.

Ich bin übrigens vorher noch nie auf die Idee gekommen, mir mal so 'ne 
Taktleitung mit dem Oszi genauer anzuschauen. Ausgesprochen lehrreich - 
kaum zu glauben, was da alles drauf los ist :D

von Stefan F. (Gast)


Lesenswert?

Ralph K. schrieb:
> Ich verstehe nicht wie es sein kann, dass da genau
> ein Bit zu viel weitergeschoben wurde.

Ohne aussagekräftige Oszilloskop-Bilder können wir auch nur raten.

von HildeK (Gast)


Lesenswert?

Ralph K. schrieb:
> Ich verstehe nicht wie es sein kann, dass da genau
> ein Bit zu viel weitergeschoben wurde. Denn Leitungsreflexionen wirken
> sich ja auf jede Taktflanke aus. Und da außerdem die einzelnen
> Taktimpulse mit 2µs gefühlte Ewigkeiten auseinanderliegen, scheint es
> mir unwahrscheinlich zu sein, dass es ausgerechnet die erste oder letzte
> Flanke in besonderer Weise betrifft.

Die Reflexionen wirken sich natürlich auf jede Flanke aus. Das heißt 
aber nicht zwingend, dass es bei jeder Taktflanke auch sicher schief 
geht. Du hast ja mit den Empfängern zwangsweise eine örtliche Ausdehnung 
mit mehr oder weniger kurzen Stubs, die dann lokal auch was dazu 
beitragen - im positiven wie im negativen Sinn. Heißt: ein FF sieht 'ne 
Doppelflanke, das andere nicht, zumindest keine ausreichend groß 
ausgeprägte.

Dein übrig gebliebenes Problem könnte auch andere Ursachen haben.
- Du schiebst einen Takt mehr raus als notwendig ...
- Du hast ein Problem in der Pause mit der Ruhelage des Taktes und dem 
jeweiligen Neubeginn; z.B. dadurch, dass du am Ende den Takt zwar auf 
z.B. LOW lässt, aber beim Neubeginn ihn erst mal auf HIGH setzt, um dann 
anzufangen.

Ralph K. schrieb:
> Bitte seid so nett und lasst Antworten der Art: "mach einfach 'ne
> Terminierung ran und gut isses".

Das hat sich damit auch relativiert ... :-)

von Wolfgang (Gast)


Lesenswert?

Ralph K. schrieb:
> So, jetzt bin ich weitergekommen. Eine Terminierung der Taktleitung hat
> in der Tat das praktische Problem gelöst :)
>
> Aber nicht das theoretische.
Dann wäre es jetzt an der Zeit, zu verstehen, warum deine 
Taktterminierung geholfen hat. Hast du mal versuchsweise QS* als Ausgang 
für den Übertrag benutzt und dir die Signale auf dem Logikanalysator 
angeguckt?
Dann könntest du hier beide Versionen mal zeigen.

> Ich bin übrigens vorher noch nie auf die Idee gekommen, mir mal so 'ne
> Taktleitung mit dem Oszi genauer anzuschauen. Ausgesprochen lehrreich -
> kaum zu glauben, was da alles drauf los ist :D

Dann klemm dein Oszi zum Vergleich mal unter Verwendung einer Massefeder 
direkt an der Prüfspitze an ...

von Ralph K. (rosti_mcn)


Lesenswert?

HildeK schrieb:
> - Du schiebst einen Takt mehr raus als notwendig ...
> - Du hast ein Problem in der Pause mit der Ruhelage des Taktes und dem
> jeweiligen Neubeginn; z.B. dadurch, dass du am Ende den Takt zwar auf
> z.B. LOW lässt, aber beim Neubeginn ihn erst mal auf HIGH setzt, um dann
> anzufangen.

Nein nein, der Logikanalysator sagt mir, dass da alles in Ordnung ist :)

Wolfgang schrieb:
> Dann klemm dein Oszi zum Vergleich mal unter Verwendung einer Massefeder
> direkt an der Prüfspitze an ...

Hab' schon ;)

Wolfgang schrieb:
> Hast du mal versuchsweise QS* als Ausgang für den Übertrag benutzt
> und dir die Signale auf dem Logikanalysator angeguckt?

Das wäre mein nächster Versuch gewesen, denn vom Timing her wäre das ja 
eigentlich die zu bevorzugende Variante. Aber SMD-Beinchen einzeln 
ablösen und dann quer verdrahten macht nicht wirklich Spaß :D
Keine Ahnung warum die Entwickler da QS statt QS* genommen haben.

Ich denk mal, dass ich das Thema jetzt zu den Akten lege.
Herzlichen Dank für Eure Antworten!

von Wolfgang (Gast)


Lesenswert?

Ralph K. schrieb:
> Keine Ahnung warum die Entwickler da QS statt QS* genommen haben.
Vermutlich weil im Datenblatt steht, das QS1 für schnelle Flanken die 
richtige Wahl ist. Im anderen Fall sollte dann das Problem trotz deiner 
Terminierung auftreten.
("Data is available at QS1 on the LOW-to-HIGH transitions of the CP 
input to allow cascading when clock edges are fast. The same datais 
available at QS2 on the next HIGH-to-LOW transition of the CP input to 
allow cascading whenclock edges are slow.")

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.