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
Sind es ASCII Nullen oder binäre Nullen? Hast du ein Oszi? Hast du 100n Kondensatoren am ADUM?
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.
:
Bearbeitet durch User
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.
Ohne Oszilloskop wird es schwierig. Mit einem Oszilloskop wuerde man nun den Eingang des ADuM, sowie dessen Ausgamg messen. Fertig...
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.