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.
Lesezeichen