Hallo, ich habe schon alles probiert, ich kriege den UART am 2333 einfach nicht zum Laufen. Ich habe zum Testen jetzt mal per Transistor eine LED an TXD gehängt und den Baudraten-Teiler extrem hoch eingestellt. Eigentlich müsste an der LED ein Flackern zu sehen sein, aber nichts passiert. (Vorher habe ich es natürlich normal getestet, mit normaler Baudrate und mit einem Pegelwandler - aber da kam am PC auch nix an.) Hier ist das Testprogramm: .include "2333def.inc" .def temp = r16 ldi temp, low(RAMEND) ;Stackpointer initialisieren out SPL, temp sbi UCSRB,TXEN ;TX aktivieren ldi temp,255 ;Baudrate so gering wie möglich setzen out UBRRH,temp out UBRR,temp loop: ldi temp, 'T' rcall serout ldi temp, 'e' rcall serout ldi temp, 's' rcall serout ldi temp, 't' rcall serout ldi temp, '!' rcall serout ldi temp, 10 rcall serout ldi temp, 13 rcall serout rjmp loop serout: sbis UCSRA,UDRE ;Warten, bis UDR bereit ist rjmp serout out UDR, temp ret
Hi Andreas, ich vermute, das der Fehler in der Baudrate Einstellung liegt. Das richtige verhältniss errechnet sich aus fbaud = Quarzfreq. /(16*(ubrr+1)) also ist der Wert f. 9600baud ubrr = quarzfreq. / (9600*16)-1 Lasse mal die 3 Zeilen für das UBRR Register weg und ersetze sie durch ldi temp,4000000/(9600*16)-1 out ubrr,temp Wenn du jetzt deinen PC auf 9600Baud, kein Handshake, 8 Datenbits, 1 Stoppbit, keine parität einstellst dann sollte es gelingen. Solltest du einen anderen Quarz als 4MHz benutzen, entsprechen die Frequenz natürlich einsetzen. Für die Subroutine "SEROUT" schreibe mal: serout: sbis USR,UDRE rjmp serout out UDR,temp ret Gutes gelingen Günter
Hallo Günter, das mit der Baudrate hatte ich zuerst, für 5 MHz Quarz und 9600 baud ist 32 rausgekommen. Aber jetzt wollte ich eben erstmal mit einer LED testen, ob am TXD-Pin irgendwas rauskommt - dazu habe ich den Teiler so hoch wie möglich gesetzt, damit die einzelnen Impulse möglichst langsam kommen. Deine Änderung in serout besteht ja nur in USR statt UCSRA, das USR gibt es aber im 2333 gar nicht. Das Register heisst da UCSRA, und das enthält laut Datenblatt auch das UDRE-Bit. Also müsste das eigentlich stimmen.
Ja Andreas, das mag sein, ich habe es aus meiner Routine für den 8535 entnommen. Aber ich find das Register ubrrh nicht. Leider habe ich auch kein Datenblatt vom 2333 da. Beim 4413 usw. gibt es das wohl nicht. Was hast du den für einen Transistor genommen? Gruß, Günter
In meinem 2333 ist die Baudrate ein 12-bit-Wert. Die unteren acht Bit liegen in UBRR, die oberen vier in UBRRH. Der Transistor ist ganz normal BC547C, 10k Basiswiderstand. An anderen Ports funktioniert das auch wunderbar, nur am TXD kommt nichts raus.
Hi, Eigentlich sollte es gehen. Funktioniert PD1 überhaupt als Ausgang? Normal brauchst du es ja nicht, aber setze doch mal PD1 permanent als Ausgang. Solange TXEN=1 sind keine Fehler zu erwarten. Gruß Uwe
Hallo Uwe, da scheint wohl der Fehler zu sein: Ich habe einfach mal ein Programm geschrieben, das nichts weiter macht, als den gesamten Port D als Output konfiguriert und auf HIGH setzt - dann überall nachgemessen, und siehe da: Überall hübsch 5V, nur auf PD1 und PD2 0V! Bloß warum ?!
Tag Andreas, es eigentlich egal wie du den Port D setzt, wenn du den UART aktiverst sind PD0 und PD1 als RX und TX geschaltet. Schalte mal deine UART Routine ab, nehme den MAX232 weg und du wirst sehen, das PD0 und PD1 auch als Ausgang laufen. Ich habe mal wegen dem 2333/4433 geschaut, deine Routine sollte eigentlich laufen. Gruß, Günter
Hallo Günter, das dachte ich zuerst auch - aber der UART ist in dem Testprogramm gar nicht aktiviert. Es setzt NUR Port D als Ausgang und setzt ihn auf HIGH. Außerdem sind es ja PD1 und PD2, die nicht gehen, nicht PD0 und PD1. Womöglich sind die beiden Ausgänge einfach zerschossen?
Hi Andreas, wollen ja nicht hoffen, das die Ports komplett zerschossen sind. Lege doch mal PD1 und PD2 über 4,7KOhm nach +5V und konfiguriere den kompletten Port D nochmal als Ausgang. Dann teste nochmal ob du PD1 und 2 auf L bzw. auf H setzen kannst. Wenn das nur mit diesen beiden Ausgängen nicht klappt, dann ist er wohl wirklich gehimmelt. Ich mache hier im Moment auch mit dem UART rum und habe diesbezüglich überhaupt keine Probleme (4414). Gruß, Günter
Hi, also wenn die 4,7K nichts bringen, hau wech dat Ding oder mach was anderes damit. Ich hatte jetzt mal nen 1200-erter da wollte int0 auf einmal nicht mehr, da muß er eben Weichen auf des Sohnes Eisenbahn steuern. Gruß Uwe
Das mit den 4,7K-Pullups hat leider auch nicht geklappt. Wenn ich den ganzen Port auf Low setze, sind die beiden Pins immer noch High (durch die Pullups). PD1 und PD2 benehmen sich also völlig tristated. Gibt es noch Hoffnung?
Hi Andreas, wenn du alles richtig gemacht hast (ddrd auf 1 gesetzt) und so, glaube ich das du mal einen anderen 2333 testen solltest. Die Zeit ist wohl jetzt reif dafür. Mein Beileid zum ableben des ehrwürdigen µProz Günter
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.