Forum: Analoge Elektronik und Schaltungstechnik Falsche Spannung beim UART eines ATtiny2313


von hansmi (Gast)


Angehängte Dateien:

Lesenswert?

Hallo

Ich habe mit einem ATtiny2313 das Problem, dass der UART keine
richtigen TTL-Pegel liefert. Bei einer logischen 1 liefert er an Pin 3
(TXD) 5.017 Volt, bei einer 0 immer noch 4.75 Volt, obwohl das hier
eher gegen 0 Volt gehen sollte. Das Signal geht nachher in einen
MAX232N, der so am Ausgang natürlich immer auf etwa demselben Pegel
bleibt und nicht wechselt. Der MAX232N hat aber keinen Einfluss, da der
ATtiny2313 gleich reagiert, wenn er nicht mit dem MAX232N verbunden ist.
Ich dachte auch, dass es aktive Pull-Ups sein könnten, die Aktivierung
des PUD-Bits (Pull-Up Disable) hat aber keine Verbesserung gebracht. Im
Anhang ist der verwendete Quellcode zu finden. Gibt es etwas, was ich
übersehen habe?

Vielen Dank,
Michael

von Benedikt (Gast)


Lesenswert?

Pullups und das DDR Register wird bei Verwendung des UARTs übergangen.

Also entweder ist die UART Initialisierung nicht OK, ein Kurzschluss
vorhanden, oder der uC kaputt.
Das erste kann man ausschließen, da der Code OK ist.

von hansmi (Gast)


Lesenswert?

Da es auf einem Breadboard aufgebaut ist glaube ich weniger an einen
Kurzschluss, womit es eigentlich nur ein defekter µC sein kann. Danke
für Deine Antwort!

von TravelRec. (Gast)


Lesenswert?

Hast Du den Pin am Tiny mal ohne MAX... gemessen? Ist´s der richtige Pin
(nicht mit RXD verwechselt)?

von Sascha (Gast)


Lesenswert?

Wie misst du denn den Pegel ? Mit nem Oszilloskop ?
Ein Voltmeter würde ja nicht viel bringen. Die UART Leitung ist ohne
Daten immer auf 1. Wenn du nun alle 100 ms kurz ein Byte sendest, dann
werden die entsprecenden Bits ja nur für einen Bruchteil einer Sekunde
übertragen (je nach Baudrate) und dann geht die Leitung wieder auf 1.

von hansmi (Gast)


Lesenswert?

TravelRec: Ja, ich habe an Pin 3 (TXD) gemessen. Wie im Ursprungsbeitrag
beschrieben ist der Effekt derselbe, wenn die Verbindung zum MAX232N
nicht besteht.

Sascha: Mangels Oszilloskop nur mit einem digitalen Fluke-Multimeter.
Das hat mir bei I²C-Experimenten (auch einige hundert Hertz) jeweils
einen starken Ausschlag angegeben. Hier jedoch bleibt es immer über
vier Volt, dies habe ich auch mit der "Min"-Funktion nachgeprüft. Ich
weiss, dass dies nicht die optimale Messmethode ist, aber leider habe
ich nichts besseres zur Verfügung. Ich kann testweise mal lauter
Null-Bytes senden, was dann ja TTL-mässig sehr viele niedrige Pegel
sein sollten.

von TravelRec. (Gast)


Lesenswert?

Dann deaktiviere doch mal kurz das UART und setze den Pin bewußt auf
Low. DDR nicht vergessen. Wenn das geht, ist der Porttreiber noch in
Ordnung. Andere Frage: Was heißt für Dich 0 am UART? Wenn Du per
Routine auf das UDR-Register eine 0 schreibst, so ist diese, wie Sascha
schon sagt, in "nullkommanix" aus dem Pin raus und danach ist alles
wieder 1. Schreibst Du die 0 andauernd, hängt es davon ab, wie oft jene
Routine, verglichen mit der Baudrate, durchlaufen wird. Somit stellt
sich eine Art PWM an dem Pin ein. Wenn Du jetzt mal nichts machst,
außer die Baudrate bei der UART-Init zu verringern, müßte die
"Spannung" an dem Pin von 4,75 V weiter absinken. Wenn das der Fall
ist, dann ist Dein UART okay und Du mußt nur noch das senden, was Du
möchtest.

von Sven (Gast)


Lesenswert?

>>Mangels Oszilloskop nur mit einem digitalen Fluke-Multimeter.

Dann hast Du nur eine Chance, wenn Du permanent (über UART transmission
interrupt) 0x00 sendest. Über kurze Signale integriert das DMM weg. Oder
häng mal eine LED gegen VCC mit Vorwiderstand ran, die siehst Du
blitzen.

Sven

von hansmi (Gast)


Lesenswert?

Danke vielmals für die Tipps, ich muss die morgen mal ausprobieren.

von hansmi (Gast)


Lesenswert?

Meine Theorie des defekten UART war falsch, der funktioniert nämlich
wunderprächtig. Jedoch kommen leider auf der Empfangsseite nur lauter
«À» an. Hat es ggf. in meinem Programm aus dem ersten Beitrag (test.c)
doch noch einen Fehler?

von hansmi (Gast)


Lesenswert?

Jetzt tut es. Es lag an der Zuweisung von UBRRH und UBRRL. Sobald ich
diese fix auf 0 bzw. 47 setze funktioniert es. Danke für Eure Hilfe.

von TravelRec. (Gast)


Lesenswert?

Na das freut doch den Anwender ;-)!

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.