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
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
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
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
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
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.
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
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.
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
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?
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
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.
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
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.
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
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.