MfG (Mit feinem Grübeln) Wir unterstützen dich bei deinen Projekten, aber wir entwickeln sie nicht für dich. (radbruch) "Irgendwas" geht "irgendwie" immer...(Rabenauge) Machs - und berichte.(oberallgeier) Man weißt wie, aber nie warum. Gut zu wissen, was man nicht weiß. Zuerst messen, danach fragen. Was heute geht, wurde gestern gebastelt. http://www.youtube.com/watch?v=qOAnVO3y2u8 Danke!
Ich bin fleissig weiter am testen... Einfach mal so verschiedene Baudraten in Bascom einzustellen hat nichts gebracht. Es gab Baudraten, bei denen der Empfang noch empfindlicher auf niedrige Temperaturen reagierte, und Baudraten bei denen die auswertung bei allen Temperaturen "halbwegs gut" lief. D.h. ich hatte viel Jitter in der Auswertung, wahrscheinlich weil oftmals Bytes verwechselt werden.
Jetzt habe ich etwas weiter gegoogelt und die Register Ubrr und u2x gefunden. Ubrr ist das das Baudraten register, es ist in Bascom bei 16MHz und 115200 baud standardmässig auf 8 eingestellt. U2x ist ein register für den "double speed mode", bei Bascom normalerweise ausgeschaltet. Im Datenblatt des m328p habe ich eine tabelle mit den typischen baudratenfehlern gefunden. Bei u2x = 0 und ubrr = 8 (bascom standard) ist der baudratenfehler bei -3.5% (warum zeigt Bascom hier 7.84% an?).
Wenn man den doublespeed mode einschaltet (u2x=1) und ubrr auf 16 setzt, ist der fehler laut tabelle im Datenblatt angeblich nur noch +2.1%
Da ich mich scheinbar genau auf einer Toleranzgrenze befinde, könnte diese kleine Verbesserung ja bereits helfen.
Also habe ich das mal ausprobiert. Und siehe da, auf einmal funktioniert es auch mit dem 16MHz quarz und Eisspray. Es tritt kein Framingerror mehr auf, und mein Code scheint den RC-Empfänger sauber auszuwerten. Auch die Hitzesimulation per Glühlampe verursacht keinen Fehler. Also habe ich mich jetzt scheinbar ein Stück von der Toleranzgrenze wegbewegt.
Was mich nur noch wundert: Wenn ich mir die m32def.dat anschaue (im Moment teste ich alles auf einem Mega32), dann steht dort in einer Zeile
U2X = 1
Ich würde daraus schliessen, dass der double speed mode in Bascom standarmässig eingeschaltet ist. Lese ich aber in Bascom das Register aus (print Ucsra.u2x), dann wird mir eine 0 ausgegeben.
Viele Grüße, William
-> http://william.thielicke.org/
Das mit dem Datarate Register UBRR hatte ich gemeint.
Ich denk mal das U2X=1 bezieht sich auf den Platz des Bit's U2X im Register UCSRA, da es dort auf Bitplatz 1 ist.
Da hast du wohl recht, danke. Wenn man sich den Rest anguckt, erscheint das doch sehr naheliegend,Ich denk mal das U2X=1 bezieht sich auf den Platz des Bit's U2X im Register UCSRA, da es dort auf Bitplatz 1 ist.
;UCSRA
RXC =7
TXC =6
UDRE =5
FE =4
;OR =3 ; old name kept for compatibilty
DOR =3
PE =2
U2X =1
MPCM =0
Viele Grüße, William
-> http://william.thielicke.org/
Lesezeichen