Also beim Mega186 zB. ist der interne 8Mhz schon DEUTLICH stabiler, als
beim Mega8!!
Die UART initialisiere ich so:
1 | UCSR0A |= (1<<U2X0); /* improves baud rate error @ F_CPU = 1 MHz */
|
2 | UCSR0B |= (1<<TXEN0); /* tx enable */
|
3 | UCSR0C |=(1<<UCSZ01)|(1<<UCSZ00); //8Bit
|
4 | // UBRR0H = (unsigned char)(F_CPU / (8 * 9600UL)) - 1 >> 8;
|
5 | // UBRR0H = (unsigned char)((F_CPU / (8 * 1200UL)) - 1) >> 8;
|
6 | // UBRR0L = (unsigned char)(F_CPU / (8 * 9600UL)) - 1; /* 9600 Bd */
|
7 | // UBRR0L = (unsigned char)(F_CPU / (8 * 1200UL)) - 1; /* 9600 Bd */
|
8 | UBRR0 = (F_CPU / ((8L * 1200UL)) - 1);
|
9 |
|
10 | // UBRR0H = 0;
|
11 | //UBRR0L = 103; //9600 Bd @ 8Mhz
|
12 | //UBRR0L = 101; //9600 @ 7860khz (2.5V)
|
klappt wunderbar.
In einer Schleife erhöhe ich OSCCAL gebe ich Wert zum Test aus. Wenn man
den Wert lesen kann, hat man den korrekten Wert für's OSCCAL Register.
Da ich nicht mit 3V, sondern mit 2.5V arbeite, stimmte der Werkseintrag
von 162 natürlich nicht mehr 100%tig. ich habe diesen auf 123
korrigieren müssen.
bei einem UBBR von 6 und einer Taktfrequenz von 62kHz(!) erzeuge ich
somit stabile 1200Bd.
Das geht in der Klimakammer bei allen erdenklichen Temperaturen.
Das gleiche geht mitm Mega8 zB. NCIHT!
GRuß
AxelR.
An PORTB.0 lässt sich die Oszillatorfrequenz bequem messen...