Hallo,
ich habe auf einer Platine 3 gleiche ADCs, es sind die THS1206 von TI.
Diese Platine ist über ein Flachbandkabel an ein FPGA-Entwicklungsboard
angeschlossen, welches die ADC ansteurt und auslesen soll.
Dazu habe ich in VHDL die Ansteurung nach Datenblatt des THS1206
realisiert und für alle drei ADCs wird der selbe Code instanziiert.
Mein Problem ist nun, dass nur zwei der drei ADC funktionieren, der
dritte stürzt immer ab. Das äußert sich so, dass der DATA_AV (data
availiable) Pin immer anzeigt der ADC hätte keine Daten zum Auslesen.
Das Abstürzen/Deaktivieren des 3. ADC tritt in sehr unregelmäßigen
Abständen auf: Manchmal läuft er ein paar Sekunden, manchmal auch für 10
Minuten. Ab und zu läuft er gar nicht nach dem Aufstarten. Erst nach
einem Neustart kommen wieder Daten.
Da meine Signale ja über 7cm Flachbandkabel + 8cm PCB gehen, habe ich
meine Leitungen terminiert (100 Ohm + 1nF in Reihe nach Masse). Diese
Terminierung habe ich nachträglich eingefügt, weil ohne diese bei den
Schaltflanken deutliche Überschwinger erkennbar sind. Durch die
Terminierung ist das nun auf +/-0.5V überschwingen/"Unterschwingen"
reduziert.
Könnte es sein, dass der ADC defekt ist? Er funktioniert aber manchmal
für längere Zeit und dann fällt er plötzlich wieder in den Schlaf :-(
Ich muss dazu sagen, dass der 3. ADC der ist, der die längsten Leitungen
zum FPGA hat, allerdings habe ich nun ja terminiert und das hat aber
nichts geändert :-(
Über Tipps, was ich noch genau Messen kann/soll oder was ich sonst
versuchen könnte, bin ich sehr dankbar!
Viele Grüße,
Doran
@Doran S. (utzer)
>Da meine Signale ja über 7cm Flachbandkabel + 8cm PCB gehen, habe ich>meine Leitungen terminiert (100 Ohm + 1nF in Reihe nach Masse).
Hmmm. Und auch mal RICHTIG gemessen, wie die Signale aussehen?
Wie sieht deine Signalbelegung auf dem Flachbandkabel aus? Wieviele
Masseleitungen? Wie sind die verteilt?
Siehe Wellenwiderstand.
>Terminierung habe ich nachträglich eingefügt, weil ohne diese bei den>Schaltflanken deutliche Überschwinger erkennbar sind.
Richtig gemessen?
https://www.mikrocontroller.net/articles/Oszilloskop#Tastk.C3.B6pfe_richtig_benutzen> Durch die>Terminierung ist das nun auf +/-0.5V überschwingen/"Unterschwingen">reduziert.
Naja.
>Könnte es sein, dass der ADC defekt ist? Er funktioniert aber manchmal>für längere Zeit und dann fällt er plötzlich wieder in den Schlaf :-(
Kann sein, ist aber eher unwahrscheinlich.
>Ich muss dazu sagen, dass der 3. ADC der ist, der die längsten Leitungen>zum FPGA hat, allerdings habe ich nun ja terminiert
Das hat der T800 auch und war am Ende auch Schrott ;-)
> und das hat aber>nichts geändert :-(
Man muss RICHTIG messen. Und 100R + 1nF ist ein AC-Terminierung, die nur
für konstante Taktsignale taugt.
>>Da meine Signale ja über 7cm Flachbandkabel + 8cm PCB gehen, habe ich>>meine Leitungen terminiert (100 Ohm + 1nF in Reihe nach Masse).>> Hmmm. Und auch mal RICHTIG gemessen, wie die Signale aussehen?> Wie sieht deine Signalbelegung auf dem Flachbandkabel aus? Wieviele> Masseleitungen? Wie sind die verteilt?
Masseleitung gibt es leider nur eine am Rand. Kann das schon das Problem
sein?
>> Siehe Wellenwiderstand.>>>Terminierung habe ich nachträglich eingefügt, weil ohne diese bei den>>Schaltflanken deutliche Überschwinger erkennbar sind.>> Richtig gemessen?>> https://www.mikrocontroller.net/articles/Oszilloskop#Tastk.C3.B6pfe_richtig_benutzen>>> Durch die>>Terminierung ist das nun auf +/-0.5V überschwingen/"Unterschwingen">>reduziert.>> Naja.
Ist -/+0.5V Überschwingen viel oder wenig? (Ich kann das nicht so gut
einschätzen, darum frage ich....)
>>>Könnte es sein, dass der ADC defekt ist? Er funktioniert aber manchmal>>für längere Zeit und dann fällt er plötzlich wieder in den Schlaf :-(>> Kann sein, ist aber eher unwahrscheinlich.
Ok, ja, denn wenn er manchmal für mehrere Minuten läuft, sollte der ADC
ja noch in Ordnung sein....
>>>Ich muss dazu sagen, dass der 3. ADC der ist, der die längsten Leitungen>>zum FPGA hat, allerdings habe ich nun ja terminiert>> Das hat der T800 auch und war am Ende auch Schrott ;-)
Was ist denn ein T800? Und könnten meine langen Leitungen ein Problem
sein?
>>> und das hat aber>>nichts geändert :-(>> Man muss RICHTIG messen. Und 100R + 1nF ist ein AC-Terminierung, die nur> für konstante Taktsignale taugt.
Ok, dass ich richtig gemessen habe, denke ich schon. Habe sogar so eine
Feder an den Tastkopf gemacht, damit die Masse möglichst direkt
angebunden ist. Warum funktioniert 100R + 1nF nur bei konstanten
Taktsignalen und nicht allgemein?
Vielen Dank schon mal für die Anregungen, Foto folgt am Montag
@Doran S. (utzer)
>Masseleitung gibt es leider nur eine am Rand. Kann das schon das Problem>sein?
Ganz sicher!
>Ist -/+0.5V Überschwingen viel oder wenig? (Ich kann das nicht so gut>einschätzen, darum frage ich....)
Kommt drauf an. Es kann aber auch ein Meßfehler sein und das Signal in
Wahrheit besser aussehen.
>> Das hat der T800 auch und war am Ende auch Schrott ;-)>Was ist denn ein T800?http://terminator.wikia.com/wiki/T-800_(The_Terminator)> Und könnten meine langen Leitungen ein Problem> sein?
Ja, aber auch die fehlenden Massen.
>angebunden ist. Warum funktioniert 100R + 1nF nur bei konstanten>Taktsignalen und nicht allgemein?
Steht im Artikel Wellenwiderstand.
Ich wurde eher jede Leitung mit einem 10kOhm Pullup oder Pulldown
Widerstand beschalten. Gibts auch ala Reihenwiderstans zu kaufen.
Ein Bild wäre gut weil man dann auch sieht ob oder wie sparsam du mit
Kerkos umgegangen bist.
@Thomas O. (kosmos)
>Ich wurde eher jede Leitung mit einem 10kOhm Pullup oder Pulldown>Widerstand beschalten. Gibts auch ala Reihenwiderstans zu kaufen.
Und was soll der Quark? 10k sind HF-technisch nicht vorhanden.
Ich hatte mal vor Jahren ein EEPROM versuchsweise per Hand programmiert.
Einige Latches, DIP-Schalter,LEDs, Flachbandkabel usw., es gab immer
etwas PIN Gezappel, erst mit einer kleinen Belastung also Pulldowns
bekamm ich da Ruhe rein. hes auch mit so nem Flachkabel und DIP
Schaltern manuell angesteuert um Daten in ein EEPROM per Hand zu
schreiben, und da gab es auch PIN gewackel erst mit Pullups bzw-
Pulldowns gabs ruhe.
Und bei einem Pollin Board eines Freundes gabs auch mal solche komischen
Überschwinger, da lag es an kleine Kerkos, die glaube parallel über den
Schalten lagen.
Hallo,
Danke für die zahlreichen Tipps. Ich habe nun die Terminierung von R+C
zu reinem Widerstand (100Ohm) nach Masse geändert und damit läuft der
ADC jetzt endlich.
Viele Grüße,
Doran
@Doran S. (utzer)
>Danke für die zahlreichen Tipps. Ich habe nun die Terminierung von R+C>zu reinem Widerstand (100Ohm) nach Masse geändert und damit läuft der>ADC jetzt endlich.
Ohje. Schon mal GEMESSEN, wie deine Signale jetzt aussehen? 100 Ohm an
3,3V macht 33mA! Das ist für einen normalen CMOS-Ausgang viel zuviel! Da
bricht der HIGH-Pegel massiv ein! Da ist es eher Glück, daß dein ADC
noch funktioniert! Wenn schon, dann Theveninterminierung, das halbiert
den Strombedarf. Ist zwar immer noch viel aber es geht so lala.
Flachbandleitung hat um die 120-150 Ohm Wellenwiderstand, da kann man es
erstmal mit 2x 240 Ohm probieren.
https://www.mikrocontroller.net/articles/Wellenwiderstand#Parallelterminierung
Außerdem ist bei einer einfachen Punkt zu Punkt Verbindung die
Serienterminierung deutlich entspannter! Nutze diese!
Hallo,
Oha, an die 33mA habe ich gar nicht gedacht. Das ist ja tatsächlich ein
Problem, da die Ausgänge des FPGAs auf 18mA eingestellt sind....
Bei der Serienterminierung muss der Widerstand aber doch in der Nähe der
Quelle sein? Das geht bei mir aber nicht, da der FPGA ja auf einem
fertigen Board sitzt und ich somit nur am ADC terminieren kann!?
Sollte ich den Widerstand einfach etwas erhöhen, oder doch wieder R-C
einsetzen? Werde am Montag nochmal genauer messen und mich mit einem
Kollegen unterhalten.
Vielen Dank nochmals für eure Unterstützung und die Tipps, so lerne ich
etwas dazu :-)
Viele Grüße,
Doran
Mach einen Spannungsteiler statt einem Widerstand nach Masse. Der
benötigt weniger Strom vom CMOS-Ausgang. Die +3,3V müssen natürlich mit
einem C (0,1uF, 1uF) abgeblockt werden.
Masse---220Ohm---o---220Ohm---3,3V
Habe jetzt doch die Leiterbahn aufgekratzt und 120 Ohm in Reihe
eingebaut. Damit sieht das Signal nun wie im Bilderbuch aus :-) Und der
ADC läuft jetzt super.
Allerdings ist der Widerstand jetzt in der Nähe des ADC, also nicht bei
der Quelle.... Es funktioniert aber trotzdem. Sollte man hier noch etwas
optimieren? Der FPGA sitzt leider auf einem fertigen Entwicklungsboard,
daher kann ich da schlecht einen Widerstand direkt nach dem FPGA
plazieren...
Kann man die Serienterminierung eigentlich auch für das Taktsignal
verwenden? Oder ist da R+C besser? (Wenn ich eine Punkt-zu-Punkt
Verbindung habe).
Viele Grüße und Danke für die tolle Hilfe hier,
Doran
@Doran S. (utzer)
>Allerdings ist der Widerstand jetzt in der Nähe des ADC, also nicht bei>der Quelle.... Es funktioniert aber trotzdem.
Das ist der Sieg der Praxis über die Theorie.
>Sollte man hier noch etwas>optimieren?
Nein.
>Kann man die Serienterminierung eigentlich auch für das Taktsignal>verwenden?
Ja.
> Oder ist da R+C besser? (Wenn ich eine Punkt-zu-Punkt>Verbindung habe).
Nicht unbedingt. Ich würde meistens eher zur Serienterminierung greifen.
Ja genau, leider kommt die Praxis an der Uni meistens zu kurz. Und wenn
man dann mal wirklich was baut, dann stößt man auf total unbekannte
Probleme. Daher hat mir das hier wirklich geholfen, weil ich jetzt ein
Problem in der Praxis gelöst habe und es eben große Abweichungen
zwischen der Theorie und der Praxis gibt.
Da hilft echt nur die Berufserfahrung.....