Forum: Mikrocontroller und Digitale Elektronik Übersprechen bei LogicLevel-Adapter Platine


von Christian F. (feuerwerk)


Angehängte Dateien:

Lesenswert?

Hallo zusammen

Ich hab hier ein kleines Bastelprojekt. Ich habe mir einen Nintendo NES 
mit einem Cyclone V FPGA auf einem Terasic GX Starter Kit gebaut. Nun 
war mein Plan auch die original Spielmodule ansprechen zu können. Hierzu 
habe ich mir auf einer Lochrasterplatine 8x SN74LVC8T245DWR aufgebaut um 
zwischen den 3,3V des FPGAs und den 5V des GamePaks vermitteln zu 
können. Dabei handelt es sich grob um 4 Busse (Adress- und Datenbus) die 
mit 5,3 MHz (PPU) und 1,6 MHz (CPU) betrieben werden, sowie einige 
weitere Signale (ein- oder ausgehend) für verschiedene Zwecke. Im Grunde 
funktioniert das auch schon ganz gut.

Allerdings habe ich je nach Spiel unterschiedlich starke Störungen. 
Diese Störungen betreffen größtenteils nur die schnellere PPU-Seite und 
man kann grob sagen, je älter das Spielmodul (Beginn der 80er) desto 
weniger Störungen habe ich. Die alten ROM-Chips sind wohl weniger 
anfällig für das Problem.

Durch Experimente habe ich herausgefunden, dass wenn ich bspw. 4 oder 
mehr Bits am CPU Datenbus im CPU-Takt kippen lasse, ich Lesefehler am 
PPU-Bus erhalte. Wenn ich Teile des Flachbandkabels mit dem ich mein 
Adapter-Board mit dem FPGA-Board verbinde zwischen meine Finger nehme 
reduzieren sich die Lesefehler. Auf dem Oszilloskop kann ich schön sehen 
wie das Signal mit dem Takt der "anderen Seite" Spitzen aufweist wo 
keine sein sollten.

Meine Frage ist nun, wo habe ich meine Fehler gemacht? Sind einfach nur 
die 20cm Flachbandkabel mein Problem? Ich habe, nachdem ich hier im 
Forum einige Beiträge zu diesem Thema gefunden habe, eine Ader im 
Flachbandkabel Platz geschaffen und diese dann auf Masse gelegt, 
allerdings ohne einen echten Unterschied feststellen zu können. An 
anderen Stellen ist es mir gar nicht möglich Platz zu schaffen, da die 
meisten Adern belegt sind. Was soll ich da tun? Das Kabel direkt hinter 
dem 40-Pol Stecker abzwicken und die Signale einzeln mit Masse durch ein 
TwistedPair-Kabel führen? Ich muss zugeben, ich hab in diesem Bereich 
sehr wenig Ahnung. Oder liegt das Problem stattdessen in meiner 
Schaltung?

Ich würde gerne die Fehler meiner Platine weitestgehend beseitigen bevor 
ich ein PCB herstelle, damit ich beide 40-Pol Steckverbindungen auf eine 
Seite verlegen und somit die Kabel sehr kurz halten kann.

Grüße
Christian

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Du könntest das sehr lange Flachbandkabel deutlich kürzen, indem Du den 
Aufbau mit dem Stecksockel um 90° zur bisherigen Ausrichtung drehst.

Auch das kürzere der beiden Flachbandkabel sollte sich so auf etwa die 
Hälfte der Länge reduzieren lassen.

Du solltest in Deinem Aufbau die Drähte für die Versorgungsspannung 
verstärken, insbesondere die für den Stecksockel,
und dem Stecksockel auch noch einen Abblockkondensator spendieren - 
idealerweise eine Kombination aus Low-ESR-Elektrolytkondensator mit 
10..100 µF und dazu parallelgeschaltet den üblichen 100-nF-Kondensator, 
so nah wie möglich am VCC- und GND-Anschluss.

von Noch einer (Gast)


Lesenswert?

> je älter das Spielmodul (Beginn der 80er) desto weniger Störungen habe ich

80er Jahre - das war noch Technik für Hobbybastler. Auf einem 20MHz Oszi 
hat man noch trapezförmige Signale gesehen. Mit ECB Backplane war 
Fehlersuche einfach. Verlängerungskarte aufstecken und mit Multimeter 
messen.

Die heutigen Chips dagegen funktionieren nicht mal sauber mit 
DIL-Adapter und Fädeldraht verbunden.

Sei froh, dass es überhaupt mit Lochraster funktioniert!

von Frank K. (fchk)


Lesenswert?

Der Ansatz mit den beiden 40-poligen Flachbandkabeln ist nicht optimal.
Idealerweise hast Du in einem Flachbandkabel abwechselnd Signal und 
Ground. So wird es beispielsweise bei SCSI gemacht, und beim 80-poligen 
UDMA-IDE-Kabel. Zwei Gründe sprechen dafür: 1. werden die Signale 
voneinander isoliert (kapazitives Übersprechen) und 2. muss ja der Strom 
durch die Signalleitungen auch wieder zurück, um einen Stromkreis zu 
bilden. Hin- und Rückleitung bilden eine Spule mit einer Windung, und 
wenn ein sich wechselndes Magnetfeld innerhalb dieser 'Spule' befindet, 
wird eine Störspannung induziert. Das willst Du nicht, und deswegen 
machst Du die Fläche zwischen Hin- und Rückleitung minimal klein, damit 
das nicht passiert.

Ich weiß, dass die Pinbelegung durch den Terasic-Adpter vorgegeben ist, 
aber das hilft Dir nichts - Du musst halt einen besseren bauen, dort am 
Besten die Pegelwandler und den Slotstecker draufpacken und damit auf 
das Flachbandkabel komplett verzichten.

Zweiter Punkt:
Das FPGA hat sehr schnelle Ausgangstreiber mit kurzen Anstiegszeiten. 
Die erzeugen Strom- und Spannungsspitzen und damit Störungen beim 
Schalten. Nimm Dir mal in Gedanken eine Signalleitung im Flachbandkabel 
plus der zugehörigen Groundleitung daneben. Das stellt einen Kondensator 
da, der beim Schalten umgeladen werden muss. Beim Umladen fließen 
jeweils am Anfang hohe Ströme, die dann in einer e-Kurve abfallen. Um 
die Störungen zu verringern, musst Du den Umladevergang verlangsamen, 
und das machst Du am einfachsten mit einem Widerstand. Da nimmst Du 
irgendwas in der Größenordnung 10...100Ω. Der optimale Wert hängt vom 
konkreten Aufbau ab - am besten ausprobieren und dabei mit 100Ω oder 68Ω 
anfangen. Diese Methode findest Du auch unter dem Stichwort 
"Serienterminierung". Für Deinen Zweck gibts Widerstandsarrays als DIL16 
für Lochraster (†), und nachher als kleine 0603-SMD-Teile für die 
fertige Adapterplatine. Vielleicht kannst Du damit auch Deinen 
Lochrasteraufbau retten.

fchk

(†) Schau mal ebay #361817899350. Das wäre so etwas mit 82Ω. Wäre einen 
Versuch wert.

von 6a66 (Gast)


Lesenswert?

Christian F. schrieb:
> Hierzu
> habe ich mir auf einer Lochrasterplatine 8x SN74LVC8T245DWR aufgebaut um
> zwischen den 3,3V des FPGAs und den 5V des GamePaks vermitteln zu
> können. Dabei handelt es sich grob um 4 Busse (Adress- und Datenbus) die
> mit 5,3 MHz (PPU) und 1,6 MHz (CPU) betrieben werden, sowie einige
> weitere Signale (ein- oder ausgehend) für verschiedene Zwecke. Im Grunde
> funktioniert das auch schon ganz gut.

Hallo Christian,

kann es sein, dass Deine 5V und 3,3V Versorgung über Flachband kommt und 
dann am Cartridge Adaper nur jeweils kleine 100nF an den LVCs hängen? 
Hast Du Dir schon mal die 5V und 3,3V Rails angeschaut wie die bei solch 
einem Konstrukt aussehen? Würde vielleicht helfen, eine paar 100uF 
keramisch und Alu dranzuhängen?

rgds

von Christian F. (feuerwerk)


Lesenswert?

Hi zusammen

Vielen Dank für die Hinweise und Tips.


> Du könntest das sehr lange Flachbandkabel deutlich kürzen, indem Du den
> Aufbau mit dem Stecksockel um 90° zur bisherigen Ausrichtung drehst.

Hast du zufällig eine Zeichnung für mich, ich kann es mir gerade nicht 
vorstellen wie das gemeint ist?


> Du solltest in Deinem Aufbau die Drähte für die Versorgungsspannung
> verstärken, insbesondere die für den Stecksockel,
> und dem Stecksockel auch noch einen Abblockkondensator spendieren -
> idealerweise eine Kombination aus Low-ESR-Elektrolytkondensator mit
> 10..100 µF und dazu parallelgeschaltet den üblichen 100-nF-Kondensator,
> so nah wie möglich am VCC- und GND-Anschluss.

Ich hätte jetzt erwartet, dass das Verstärken der Drähte für die 
Versorgungsspannung den Querschnitt erhöht und somit den Widerstand 
verringert. In wie weit habe ich durch den zu geringen Querschnitt ein 
Problem?
Den 100 nF Kondensator hab ich verstanden, aber was genau bewirkt der 
10-100 µF Elko und warum nimmt man einmal einen normalen Kondensator und 
einmal einen Elko?


> Ich weiß, dass die Pinbelegung durch den Terasic-Adpter vorgegeben ist,
> aber das hilft Dir nichts - Du musst halt einen besseren bauen, dort am
> Besten die Pegelwandler und den Slotstecker draufpacken und damit auf
> das Flachbandkabel komplett verzichten.

Ein Board mit mit diesem Terasic-Connector, ganz ohne Flachbandkabel 
währe eine meiner Lieblingslösungen, aber ich glaube das übersteigt 
meine Fähigkeiten.


> Da nimmst Du irgendwas in der Größenordnung 10...100Ω. Der optimale Wert
> hängt vom konkreten Aufbau ab - am besten ausprobieren und dabei mit 100Ω
> oder 68Ω anfangen.

Für einen ersten Test und um bestimmen zu können was denn der 
geeignetste Widerstandswert ist würde ich hingehen und an einem der 
Busse 8 Widerstände zwischen Flachbandkabel und Stiftleiste anbringen. 
Dadurch müsste ich ja schon einen Unterschied feststellen können wenn 
ich dich richtig verstanden habe?


> Vielleicht kannst Du damit auch Deinen Lochrasteraufbau retten.

Da meine Erfahrung in dem Bereich nicht all zu hoch und meine 
Lochrasterplatine schon recht gefüllt ist: Wie könnte ich den vorgehen 
um den Platz auf der Platine zu erweitern um rund herum die 8 
Widerstandsnetzwerke noch zusätzlich anzubringen? Kann man eigentlich 
irgendwo größere beidseitige Lochrasterplatinen bekommen als im 
Euro-Format, ich hatte nichts gefunden?


> kann es sein, dass Deine 5V und 3,3V Versorgung über Flachband kommt und
> dann am Cartridge Adaper nur jeweils kleine 100nF an den LVCs hängen?

Ja, genau so ist es.
Wenn ich an dieser Stelle ein Problem habe könnte vielleicht noch meine 
Beobachtung helfen, dass wenn ich die Spannungsversorgungen (3,3V und 
5V) aus beiden 40-Pol-Konnektoren verwende und jeweils zur linken und 
rechten Seite meines Boards stecke, nehmen die Lesefehler deutlich zu.


> Hast Du Dir schon mal die 5V und 3,3V Rails angeschaut wie die bei solch
> einem Konstrukt aussehen? Würde vielleicht helfen, eine paar 100uF
> keramisch und Alu dranzuhängen?

Ähhmmm, ich kann gerade nichts mit dem Begriff "Rail" und "Alu" 
anfangen. Kannst du mich kurz abholen?



Grüße
Christian

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Christian F. schrieb:
> Hast du zufällig eine Zeichnung für mich, ich kann es mir gerade nicht
> vorstellen wie das gemeint ist?
>
>>

Zur Seite kippen, so daß die Steckkarte in der gleichen Ebene liegt wie 
Deine Platine links. Damit steht die Adapterplatine senkrecht, und an 
ihrer Ober- und Unterkante werden die Flachbandkabel befestigt. Dafür 
sollten um die 10cm Länge problemlos ausreichen.

von uwe (Gast)


Lesenswert?

> 80-poligen UDMA-IDE-Kabel
Hat am Stecker auch nur 40 Pole die herausgeführt sind. Das sollte 
einfach anpassbar sein.

von Jim M. (turboj)


Lesenswert?

uwe schrieb:
> Hat am Stecker auch nur 40 Pole die herausgeführt sind. Das sollte
> einfach anpassbar sein.

Aber nur wenn die GND Pins zufällig passen.

von Frank K. (fchk)


Lesenswert?

Christian F. schrieb:

>> Ich weiß, dass die Pinbelegung durch den Terasic-Adpter vorgegeben ist,
>> aber das hilft Dir nichts - Du musst halt einen besseren bauen, dort am
>> Besten die Pegelwandler und den Slotstecker draufpacken und damit auf
>> das Flachbandkabel komplett verzichten.
>
> Ein Board mit mit diesem Terasic-Connector, ganz ohne Flachbandkabel
> währe eine meiner Lieblingslösungen, aber ich glaube das übersteigt
> meine Fähigkeiten.

Layout oder Fertigung? Selber ätzen ist natürlich nicht, aber das ist ja 
klar, oder? Den Samtec-Connector bekommst Du bei Digikey (SAM8182-ND)

>> Da nimmst Du irgendwas in der Größenordnung 10...100Ω. Der optimale Wert
>> hängt vom konkreten Aufbau ab - am besten ausprobieren und dabei mit 100Ω
>> oder 68Ω anfangen.
>
> Für einen ersten Test und um bestimmen zu können was denn der
> geeignetste Widerstandswert ist würde ich hingehen und an einem der
> Busse 8 Widerstände zwischen Flachbandkabel und Stiftleiste anbringen.
> Dadurch müsste ich ja schon einen Unterschied feststellen können wenn
> ich dich richtig verstanden habe?

genau. Du darfst auch einen Sack Einzelwiderstände nehmen, aber ich 
finde die Arrays bequemer.

>> Vielleicht kannst Du damit auch Deinen Lochrasteraufbau retten.
>
> Da meine Erfahrung in dem Bereich nicht all zu hoch und meine
> Lochrasterplatine schon recht gefüllt ist: Wie könnte ich den vorgehen
> um den Platz auf der Platine zu erweitern um rund herum die 8
> Widerstandsnetzwerke noch zusätzlich anzubringen? Kann man eigentlich
> irgendwo größere beidseitige Lochrasterplatinen bekommen als im
> Euro-Format, ich hatte nichts gefunden?

Lochrasterstreifen herstellen, die an beide Seiten passen, einige cm 
überlappen lassen, an beiden Enden 3mm Loch und Schraube mit Mutter. 
Sollte reichen.

Es gibt Doppel-Euro-Karten und Karten mit 100mm Breite und 300mm Länge. 
Ansonsten musst Du stückeln.

fchk

von Christian F. (feuerwerk)


Lesenswert?

Hi zusammen

> Layout oder Fertigung? Selber ätzen ist natürlich nicht, aber das ist ja
> klar, oder? Den Samtec-Connector bekommst Du bei Digikey (SAM8182-ND)

Meine Idee war es ein Layout zu machen, mir das PCB herstellen zu lassen 
und es dann selbst zu bestücken. Meine Löterfahrung beschränkt sich im 
Moment auf DIP und die LogicLevel-Converter im SOIC20-Package, der 
Samtec-Connector erscheint mir noch feingliedriger zu sein. Ausserdem 
müssten Bohrungen an exakten Stellen auf dem Board sein, damit ich die 
beiden Boards verschrauben kann, da der Connector selbst keine 
Arretierung hat. Ich bin mir unsicher ob ich so präzise arbeiten kann.


> 80-poligen UDMA-IDE-Kabel
> Hat am Stecker auch nur 40 Pole die herausgeführt sind. Das sollte
> einfach anpassbar sein.

Ja, das ist mir auch schon in den Sinn gekommen, ich muss mal prüfen ob 
der Masse-Anschluss, wie Jim Meba gesagt hat, an der richtigen Stelle 
liegt


> Zur Seite kippen, so daß die Steckkarte in der gleichen Ebene liegt wie
> Deine Platine links. Damit steht die Adapterplatine senkrecht, und an
> ihrer Ober- und Unterkante werden die Flachbandkabel befestigt. Dafür
> sollten um die 10cm Länge problemlos ausreichen.

Jetzt hat es klick gemacht. Ja du hast recht, da könnte ich die 
Leitungen massiv einkürzen, das kann ich auch noch an der bestehenden 
Platine machen, muss mir nur einen Halter für das Board überlegen.


Grüße
Christian

von HildeK (Gast)


Lesenswert?

An deinen Steckverbindern CON_xxxx sind noch freie Pins. Lege da mal GND 
drauf.

von Christian Fruth (Gast)


Lesenswert?

Hi zusammen

@fchk
Ich hab testhalber die Pins eines LogicLevel-Konverters mit 100 Ohm 
Serienterminierung versehen. Das Ergebnis sah schon sehr gut aus. Ich 
kann noch Anzeigefehler provozieren wenn ich alle 8 Signalleitungen 
gleichermaßen im CPU-Takt ändere, aber das schiebe ich jetzt einfach mal 
darauf, dass ich erst 9 von 63 Signalen terminiert hab und noch nicht 
die anderen Ratschläge umgesetzt hab. Vielen Dank für die Hilfe.

Ich hab im Forum bzgl. Serienterminierung geschaut, aber alles was ich 
gefunden habe war zum Thema Reflektion, was scheinbar nicht mein Problem 
ist/war. Hat jemand noch ein bischen passenden Lesestoff für mich?

Gruß
Christian

von J. S. (engineer) Benutzerseite


Lesenswert?

Mal eine Zwischenfrage zur Funktion: Welches Cyclone Board ist das? 
Nicht das DE2, oder?

von Christian F. (feuerwerk)


Lesenswert?

Ein Cyclone V GX Starter Kit von Terasic mit GPIO Daughter-Board um mehr 
IOs für die Adapter-Platine zu haben.

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.