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
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.
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!
Hast Du den Pin am Tiny mal ohne MAX... gemessen? Ist´s der richtige Pin (nicht mit RXD verwechselt)?
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.
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.
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.
>>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
Danke vielmals für die Tipps, ich muss die morgen mal ausprobieren.
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?
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.
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.