Forum: Mikrocontroller und Digitale Elektronik Verständnisproblem ADUM1201ARZ brachte Nullen


von Holger (Gast)


Angehängte Dateien:

Lesenswert?

Hallo, sorry für den Betrefff ... hier mal eine Frage an die Praktiker!


Also ich schildere hier mal erst einmal das Problem. Ich habe auch eine 
Lösung gefunden. Nun möchte ich einfach verstehen, wieso ein 
zusätzlicher Widerstand das Problem beseitigen konnte.

Also:

Ich möchte einen ATMEGA32 galvanisch von der RS232-Verbindung zum PC 
trennen. Dies habe ich zuerst mit Optokopplern 6N136 gelöst. Alles i.O. 
Baud <=38400.



Um Platz auf der Platine einzusparen, habe ich dann ein ADUM1201-Modul 
vom China-Mann verwendet. Es wurde absolut nichts an der Software 
geändert!


Der Datenverkehr vom PC zum ATMEGA läuft ohne Probleme. Nur umgekehrt 
kamen am PC die Nutzdaten aber auch immer so 5-8 zusätzliche Nullen an. 
Ich habe mir einem zusätzlichen TTL-USB-UART-Baustein mich an folgende 
Pins des ADUM1201 geklemmt:

1. VIA --> Daten zum PC i.O. keine zusätzlichen Nullen!!!
2. VIB --> Daten vom PC i.O.
3. VOB --> Daten vom PC i.O.
4. VOA --> Daten zum PC i.O. aber immer zusätzliche Nullen.

Ich habe dann das ADUM1201-Modul und auch den MAX232ACPE getauscht. 
Keine Änderung. Es zeigte sich das Verhalten auch, wenn der MAX232 
ausgebaut ist. Es kommen immer Nullen zusätzlich bei VOA raus.

Da ich mir das nun nicht so recht erklären kann, habe ich mal testweise 
Pullup- und Pulldown Widerstände an den vier Datenpins gehängt. Und 
siehe da, wenn an VIA ein Pullup hängt, dann verschwinden die Nullen. Im 
Schaltplan ist dies R1. Ich habe bei dem Schaltplan mal das ganze 
restliche Hühnerfutter weggelassen.

Also wiese löst der Widerstand das Problem? Ich habe im Netz der Netze 
oder in den Datenblatt nirgends Aufbauten mit einem Pullup-Widerstand 
gesehen.




Holger

von Thomas (Gast)


Lesenswert?

Hallo Holger,

lass mal deinen Init Code für den PORTD.1  sehen. Ich hoffe ,
dass DDRB |=(1<<1); ist


denn ich vermute , dass nur den Pull up vom Optokoppler gehabt hast...
gruß Thomas

von Peter (Gast)


Lesenswert?

Sind es ASCII Nullen oder binäre Nullen?

Hast du ein Oszi?

Hast du 100n Kondensatoren am ADUM?

von Markus -. (mrmccrash)


Lesenswert?

Kann es sein, dass deine Software das Register DDRD für PortD1 nicht auf 
Ausgang schaltet? Es könnte sein, dass der interne Pullup zwar für die 
Optokoppler gerade reicht, der Adum aber etwas mehr Strom zum Schalten 
braucht.

MfG

von Holger (Gast)


Lesenswert?

Moin, eines vorweg. Auch wenn es sein soll, habe ich noch nie bei 
Verwendung eines UART TX als Ausgang geschaltet. Es mag falsch sein, hat 
aber immer funktioniert. Also bisher immer MAX232ACPE direkt 
angeschlossen.

Der Optokoppler Eingang (Kathode) war mittels 330 Ohm Vorwiderstand 
direkt an TX angeschlossen. Die Anode hing direkt an +5V. Am Kollektor 
des Ausgangstransistors war ein Pullup-Widerstand.

Nun habe ich aber mit
1
ldi r16, 0b00000010
2
out DDRD, r16

PortD.1 als Ausgang geschaltet. Nun funktioniert es auch mit dem Pullup 
nicht mehr.

Ich verstehe es irgendwie nicht ...


Holger

von Holger (Gast)


Lesenswert?

Moin,

so habe eben mal stichprobenartig drei Projekte, bei denen der UART 
verwendet wurde, angeschaut. Egal welcher AVR. Ich habe noch nie TX als 
Ausgang geschaltet.

Ich gehe jetzt in die Falle.


Gruß

Holger

von H.Joachim S. (crazyhorse)


Lesenswert?

Braucht man auch nicht. Freigabe des Transmitters reicht. Übernimmt dann 
die komplette Portsteuerung.
Somit ist der pullup an TxD auch entbehrlich.
Ich habe den DC/DC-Wandler in Verdacht, ist ja ein ungeregelter. Und 
sehr wenig Last dran, vielleicht ist die Spannung etwas zu hoch? Mal 
messen.

: Bearbeitet durch User
von Holger (Gast)


Lesenswert?

Moin,

die Spannung am Ausgang beträgt 5,25 V. Das ist auch in etwa die 
Spannung am anderen Board mit den Opto-Kopplern.

Ich habe, wie schon gesagt, noch nie den TX-Pin extra als Ausgang 
konfiguriert und auch noch nie einen Pull-Up verwendet. Da das jetzt ein 
SMD-Typ ist, lasse ich den auch drin. Nur für zukünftige Designs muss ja 
eine Verbesserung her. Wie hoch sollte die Mindestlast für einen 
DCDC-Wandler sein?


Holger

von Achim S. (Gast)


Lesenswert?

Holger schrieb:
> Nur für zukünftige Designs muss ja
> eine Verbesserung her.

Wenn du eine sichere Verbesserung willst, dann wird kaum ein Weg daran 
vorbei führen, dass du das Problem mit einem adäquaten Messgerät 
analysierst. D.h. mit einem Oszilloskop, das du irgendwo auftreiben 
müsstest (bzw. bei jemandem misst, der ein Oszi hat).

Mit Oszi wirst du sehr wahrscheinlich direkt erkennen können, woran die 
Übertragung krankt (ob der DCDC zu stark wackelt, ob die Treiberstärke 
des µC nicht ausreicht, ob vielleicht irgendein unerkannter Leckpfad 
dein Signal beeinflusst, ....). Die Wahrscheinlichkeit, die richtige 
Fehlerursache damit zu verstehen und zu beheben, ist sehr groß.

Ohne Oszi kannst du nur mit Glück erraten, in welche Richtung der Fehler 
zu suchen ist (so wie du z.B. mit Glück den Pullup als hilfreich 
gefunden hast). Die Wahrscheinlichkeit, die tatsächliche Fehlerursache 
damit zu verstehen, bleibt leider eher gering.

Holger schrieb:
> Wie hoch sollte die Mindestlast für einen
> DCDC-Wandler sein?

Im Datenblatt nachschauen, was darüber geschrieben wird. Bei deinem 
SIM1-0505 finde ich zwar keine direkte Angabe dazu. Aber die load 
voltage regulation ist für einen Lastbereich von 20% bis 100% angeben. 
Das bedeutet schon mal, dass für weniger als 20% der Nominallast die 
Ausgangsspannung um mehr als 8% stärker ansteigen kann (zsätzlich zu den 
ohnehing vorhandenen 5% voltage accuracy und den überlagerten 100 mVpp 
ripple. Ob die Versorgung im Mittel zu hoch ist, kannst du übrigens auch 
ohne Oszi schon mit dem Multimeter herausfinden.

von Purzel H. (hacky)


Lesenswert?

Ohne Oszilloskop wird es schwierig. Mit einem Oszilloskop wuerde man nun 
den Eingang des ADuM, sowie dessen Ausgamg messen. Fertig...

von Holger (Gast)


Lesenswert?

Achim S. schrieb:
> Ohne Oszi kannst du nur mit Glück erraten, in welche Richtung der Fehler
> zu suchen ist (so wie du z.B. mit Glück den Pullup als hilfreich
> gefunden hast). Die Wahrscheinlichkeit, die tatsächliche Fehlerursache
> damit zu verstehen, bleibt leider eher gering.

Moin,

Oszi ist vorhanden. Liefert aber keine Hinweise, warum auf der 
Ausgangsseite mehr rauskommt, oder zumindest da ist, als auf der 
Eingangsseite.

Achim S. schrieb:
> um mehr als 8% stärker ansteigen kann

Da steht aber +/- 8%.


Die Frage ist doch, warum beseitigt ein Pullup auf der Eingangsseite des 
ADUM das Problem auf der Ausgangsseite?


Holger

von Achim S. (Gast)


Lesenswert?

Holger schrieb:
> Oszi ist vorhanden. Liefert aber keine Hinweise, warum auf der
> Ausgangsseite mehr rauskommt, oder zumindest da ist, als auf der
> Eingangsseite.

Dann zeige uns Messungen vom Eingang, vom Ausgang und von der Versorgung 
statt uns hier ohne diese essentielle Information herumraten zu lassen. 
Eingang und Ausgang bitte gleichtzeitig in einem Bild und einmal in der 
Übersicht, einmal reingezoomt auf die Flanke.

Holger schrieb:
> Da steht aber +/- 8%.

Ja, und? Du schreibst das als wäre es ein Widerspruch zu meiner Aussage, 
dass die Ausgangsspannung bei zu geringer Last um mehr als 8% ansteigen 
kann. (Ich habe nicht geschrieben, dass sie das tun muss. Und wenn du 
uns deine Oszimessungen gezeigte hättest, dann hätten wir uns schon mal 
diese unnütze Diskussion sparen können.)

Holger schrieb:
> Die Frage ist doch, warum beseitigt ein Pullup auf der Eingangsseite des
> ADUM das Problem auf der Ausgangsseite?

Das weiß niemand. Aber mit vernünftigen Messungen kann man es 
wahrscheinlich rauskriegen. Das ist viel besser als herumzuraten. Wie 
sieht z.B die Flanke des Eingangssignals mit und ohne Pullup aus?

von Holger (Gast)


Lesenswert?

Achim S. schrieb:
> Ja, und? Du schreibst das als wäre es ein Widerspruch zu meiner Aussage,
> dass die Ausgangsspannung bei zu geringer Last um mehr als 8% ansteigen
> kann. (Ich habe nicht geschrieben, dass sie das tun muss. Und wenn du
> uns deine Oszimessungen gezeigte hättest, dann hätten wir uns schon mal
> diese unnütze Diskussion sparen können.)

Moin,

darum geht es nicht. +8% sind ja mehr als ich gemessen habe. +0,4V kann 
sein, laut Hersteller, +0,25V sind es. Es könnten auch 8% weniger sein. 
Aber der gemessene Wert ist ja in den Specs.

Ich bin nun für einige Tage nicht da. Ich werde dann mal alle Messungen 
mit dem Oszi machen und dann berichten.


Holger

von Achim S. (Gast)


Lesenswert?

Holger schrieb:
> darum geht es nicht. +8% sind ja mehr als ich gemessen habe.

Dann zeige halt bitte klar die Messungen, statt sie (missverständlich) 
im Text zu beschreiben.

Du hast oben mal geschrieben, dass die Spannung "am Ausgang" 5,25V 
beträgt. Das kann sich auf den Ausgang des DCDC beziehen, es hätte aber 
auch auf den Ausgang des ADUM bezogen sein können. Es kann sich auf den 
Mittelwert der Spannung beziehen (gemessen mit dem Multimeter) oder auf 
den Peak-Wert (gemessen mit den Oszi). Würde man eine aussagekräftige 
Oszi-Messung sehen mit einer eindeutigen Angabe des Messpunkts, dann 
würde Klarheit herrschen.

Meine Antwort mit den 8% bezog sich auf die Spec des DCDC (weil du im 
vorhergehenden Beitrag danach gefragt hast). Und in der ist eben nur bei 
einer Mindestlast von 20% der Spannungsbereich des DCDC angegeben. Was 
darunter passiert, ist nicht spezifiziert. Die Spannung kann stärker 
ansteigen, sie kann theoretisch auch um mehr als 8% absinken (obwohl das 
eher unwahrscheinlich ist) und sie kann auch auf 5,25V stehen bleiben: 
die Spec macht dazu keine Aussage.

Holger schrieb:
> Ich werde dann mal alle Messungen
> mit dem Oszi machen und dann berichten.

Gut, damit werden wir voraussichtlich weiter kommen.

von Holger (Gast)


Lesenswert?

Achim S. schrieb:
> Gut, damit werden wir voraussichtlich weiter kommen.

Moin,

damit wir uns alle wieder etwas beruhigen hier die Lösung.

In meinem Programm habe ich immer vor dem Senden mittels
1
ldi temp0, (1<<TXEN0)|(1<<RXEN0)|(1<<RXCIE0)
2
sts UCSR0B, temp0

den UART eingeschaltet und nach 500 ms, in der die Antwort garantiert 
kommt, wieder ausgeschaltet.
1
ldi temp0, (1<<TXEN0)|(1<<RXEN0)|(0<<RXCIE0)
2
sts UCSR0B, temp0


Das mag der ADUM überhaupt nicht. Ich schalte nun nach 500 ms nur noch 
den Empfangsinterrupt ab. Und nun läuft alles ohne Probleme. Das 
verbaute Hühnerfutter ist also nicht die Ursache gewesen.

Da ich ja das Programm gegenüber der Optokoppler-Variante nicht 
verändert habe und diese Variante funktinonierte, hatte ich natürlich 
die Software erst einmal nicht in Verdacht. Beim Oszillographieren viel 
mir dann auf, dass sich der Pegel immer im Takt der Abfrage von 0 auf 5V 
änderte. In der +5V Phase wurde dann entsprechend dem gesendetem Inhalt 
natürlich auch der Pegel auf 0 V abgesenkt.

Allen Antwortenden einen recht herzlichen Dank und ein schönes 
Wochenende!



Gruß
Holger

von Achim S. (Gast)


Lesenswert?

Holger schrieb:
> damit wir uns alle wieder etwas beruhigen hier die Lösung.

Wenn du meinst, ich wäre wegen dieser Diskussion unruhig geworden: da 
brauchst du dir keine Sorgen zu machen. Ich erlebe fast jeden Tag 
"Schlimmeres", ohne dass es mich besonders kratzen würde.

Mein Ton wurde etwas dringlicher um dir klar zu machen, dass die Aussage

Holger schrieb:
> Oszi ist vorhanden. Liefert aber keine Hinweise, warum auf der
> Ausgangsseite mehr rauskommt,

höchstwahrscheinlich Unsinn ist und dass systematische Oszi-Messungen 
sehr wahrscheinlich zur Lösung des Problems führen werden (was denn ja 
auch geschehen ist).

Holger schrieb:
> Das mag der ADUM überhaupt nicht.

Ja: undefinierte Eingangspegel mögen die meisten Digitalschaltungen 
nicht. Für die meisten Optokoppler hingegen ist ein offener Eingang 
eindeutig und unproblematisch.

von Holger (Gast)


Lesenswert?

Achim S. schrieb:
> Ich erlebe fast jeden Tag
> "Schlimmeres", ohne dass es mich besonders kratzen würde.

Moin, ich weiß.

Achim S. schrieb:
> dass systematische Oszi-Messungen
> sehr wahrscheinlich zur Lösung des Problems führen werden (was denn ja
> auch geschehen ist).

Im Prinzip richtig. Deine Vorschläge zielten aber eher darauf ab, dass 
etwas mit der Signalform oder dem DCDC-Wandler nicht stimmen kann. Und 
selbstverständlich habe ich, bevor ich hier gefragt habe, mir das ganze 
am Oszi angesehen. Ich habe auch direkt mit dem anderen Board 
verglichen. Sauber Spannungsversorgung, sauber steile Flanken. Ich hatte 
ja auch vor dem ADUM parallel mitgelesen und dort war alles sauber. 
Dahinter nicht mehr.

Letzlich ist es ja ein logisches Problem. Leider habe ich zwei Fehler 
gemacht. Ich habe den rechteckigen Verlauf am TX-Ausgang nicht weiter 
beachtet und ich habe nicht erkannt, dass keine Nullen nachgeschoben 
wurden sondern dass die Nullen zu Beginn meines Sendestrings kamen. In 
HTERM sah es halt wie nachgeschobene Nullen aus.

Gruß
Holger

von Achim S. (Gast)


Lesenswert?

Holger schrieb:
> Deine Vorschläge zielten aber eher darauf ab, dass
> etwas mit der Signalform oder dem DCDC-Wandler nicht stimmen kann.

Mein Vorschlag zur Fehlersuche war:

Achim S. schrieb:
> Mit Oszi wirst du sehr wahrscheinlich direkt erkennen können, woran die
> Übertragung krankt (ob der DCDC zu stark wackelt, ob die Treiberstärke
> des µC nicht ausreicht, ob vielleicht irgendein unerkannter Leckpfad
> dein Signal beeinflusst, ....).

und als du endlich damit rausgerückt bist, dass du ein Oszi hast, noch 
konkreter:

Achim S. schrieb:
> Dann zeige uns Messungen vom Eingang, vom Ausgang und von der Versorgung
> statt uns hier ohne diese essentielle Information herumraten zu lassen.
> Eingang und Ausgang bitte gleichtzeitig in einem Bild und einmal in der
> Übersicht, einmal reingezoomt auf die Flanke.

Bei der Messung der Versorgung hättest du gesehen, dass diese wohl nicht 
Ursache des Problems ist. (eine mögliche Ursache ausschließen zu können 
ist ebenfalls ein Schritt zum Finden des Fehlers.)

Im Übersichsbild des Eingangssignals könntest du sehen, dass der Eingang 
des ADUM zwischenzeitlich den falschen Pegel annimmt. (So bist du ja 
dann auch tatsächlich auf den Fehler gekommen)

Beim Zoom auf die Flanke könntest du entweder sehen, dass zwischendurch 
der High-Pegel nur langsam über den Pullup erreicht wird (dass also der 
Push-Pull Treiber des µC zwischendurch deaktiviert ist). Oder du 
könntest ohne Pullup sehen, dass das Signal zwischendurch 
schnarchlangsam gegen 0V driftet. Auch das wäre ein klarer Hinweis auf 
einen offenen Eingang.

Mit diesen systematischen Messungen ist es dann nur noch ein kurzer 
Schritt zum Verstehen des Fehlers.

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.