Hallo Leute,
ich wollte meinen Atmega 162 mit einem Bootloader ausstatten und hab den
Chip45boot2 gefunden als einfach zu nutzender Bootloader.
Also das richtige Hexfile heruntergeladen Atmega 162 uart0_v2.9
dann geflasht und gefreut das ich mit dem Gui Programm den Bootloader
ansprechen kann. Dann das Hexfile ausgewählt und geschrieben.
Auf den ersten Blick sah alles gut aus, aber der Watchdog funktioniert
nichtmehr und das Programm als solches auch nicht.
1 | ISR(TIMER1_OVF_vect)
|
2 | {
|
3 | wert_anfordern = 1;
|
4 | wdt_enable(7);
|
5 | }
|
6 | .
|
7 | .
|
8 | .
|
9 | int main(void)
|
10 | {
|
11 | if(MCUCSR & (1<<WDRF))
|
12 | {
|
13 | LED_PORT |= (1<<LED1);
|
14 | }
|
15 | //uint8_t i =0;
|
16 | while(1)
|
17 | {
|
18 | if(wert_anfordern == 1)
|
19 | {
|
20 | Temp_anfordern(wertadressen[0][wertnr],10);
|
21 | wert_anfordern = 0;
|
22 | wertnr++;
|
23 | if(wertnr == wertadressen[0][0]+1)
|
24 | {
|
25 | wertnr = 1;
|
26 | }
|
27 |
|
28 | }
|
29 |
|
30 | if(receive_complete != 0)
|
31 | {
|
32 | USART_Transmit(receive_complete); //K
|
33 | //USART_Transmit(wertadressen[1][receive_complete]);
|
34 |
|
35 |
|
36 | wdt_disable();
|
37 | wdt_reset();
|
38 | receive_complete = 0;
|
39 | LED_PORT &= ~(1<<LED1);
|
40 |
|
41 | }
|
falls ich nicht innerhalb von ca. 2 Sekunden ein Telegramm auf der
seriellen Schnittstelle beantworte, schlägt der Watchdog zu und das wird
mir mit LED1 signalisiert.
Wenn ich das Programm direkt flashe ohne Bootloader dann funktioniert
alles wie es soll.
Wenn ich es den Bootloader schreiben lassen passiert garnichts. Die LED
bleibt immer aus. Er sendet zwar was auf der Schnittstelle, wenn ich
aber antworte hängt sich das Programm auf und er reagiert nicht mehr.
Mein Build aus Eclipse meldet mir für mein Programm:
AVR Memory Usage
----------------
Device: atmega162
Program: 3068 bytes (18.7% Full)
(.text + .data + .bootloader)
Data: 483 bytes (47.2% Full)
(.data + .bss + .noinit)
Der Atmega sollte also nicht voll sein.
Die Fuses sind auf 1024 words für den bootloader gesetzt und Bootreset
Vektor ist auch gesetzt.
Watchdog ist nicht per fuse aktiviert.
Auch das Problem mit fragmented Hexfiles hab ich schon probiert:
Aus der Doku:
If you observe problems with downloading your program, please check your
hexfile for such steps. If you find one,
you can convert your hexfile to a hexfile without such step with the
following command line tool:
srec_cat.exe test.hex -Intel -Output test_new.hex -Intel -Line_Length 44
screc_cat normally converts between different output formats, but can be
used to convert a hexfile into a hexfile
with fixed 44 characters per line, which means 16 data bytes per line.
Trotzdem funktioniert das Programm mit Bootloader nicht so wie
gewünscht. Hat jemand eine Idee?