Hallo allerseits, ich wollte mal zu Übungszwecken, möglichst ohne zu Denken dieses Tutorial http://www.mikrocontroller.net/articles/AVR_Bootloader_in_C_-_eine_einfache_Anleitung ausprobieren, da ich erst Erfahrung mit dem Bootlader sammeln wollte, bevor ich das IRMP nachbaue. Also habe ich mir das erst mal ausführlich durchgelesen. Nun hatte ich mir extra bei Reichelt mehrere Mikrocontroller-Typen bestellt, damit ich in solchen Fällen genau den richtigen aus der Kiste ziehen kann, der im Tutorial vorgeschlagen wird. In diesem Fall war der Mega88 defekt!! Kam schon mit verbogenen Pins an. Ebenso die beiden Mega168-Exemplare. Was geht, sind die Mega8-8-Typen und die Mega8-16-Typen, die einwandfrei ankamen. Mega48er sind auch einwandfrei. Deshalb stehe ich jetzt in der Not, das Programm aus dem Tutorial an den Mega8 anpassen zu müssen, denn es macht schlicht nichts! das heißt, nicht ganz: eine Kontroll-LED vor der Schleife eingefügt, blinkt. Startet das Programm immer wieder neu? Ich mußte im Datenblatt nachlesen wegen der "BOOTRST-Fuse" und der Einstellung "BOOTSZ auf 1024 words". Folgende Fuses habe ich auf 1 (=unprogrammed) gesetzt: BOOTSZ1, BOOTSZ0, BOOTRST, CKSEL2 ->8MHz hier noch ein Ausschnitt aus main.c: /* Interrupt Vektoren verbiegen */ char sregtemp = SREG; cli(); temp = GICR; GICR = temp | (1<<IVCE); GICR = temp | (1<<IVSEL); SREG = sregtemp; .... cli(); Enable change of Interrupt GICR = (1<<IVCE); Move interrupts to boot Flash section GICR = (1<<IVSEL);*/ Also wenn die Geschichte mit den IVCE und IVSEL-Bits nicht stimmt, geht es im nächsten Schritt wieder schief, wenn der "echte" Bootlader dran kommt. Siehe "main.c" Diese UART-Library habe ich verwendet: http://beaststwo.org/avr-uart/Updated%20_UART_Library.zip Der Programmcode erscheint in Ponyprog ab Adresse 1800 hex. Wie erwartet. Es erscheint in AVR-Studio 4.18 folgende Warnung: ../main.c:38: warning: unused variable 'p_mode' Hat da jemand vielleicht eine Idee, was ich da ändern könnte? mit freundlichem Gruß
Christian S. schrieb: > Nun hatte ich mir extra bei Reichelt mehrere Mikrocontroller-Typen > bestellt, damit ich in solchen Fällen genau den richtigen aus der Kiste > ziehen kann, der im Tutorial vorgeschlagen wird. In diesem Fall war der > Mega88 defekt!! Kam schon mit verbogenen Pins an. Ebenso die beiden > Mega168-Exemplare. Bieg die Pins gerade, fahr zu Reichelt und nagel den Idioten die Dinger an die Backe. Aber das hilft dir ja jetzt nicht weiter. Christian S. schrieb: > Enable change of Interrupt > GICR = (1<<IVCE); > Move interrupts to boot Flash section > GICR = (1<<IVSEL);*/ Diese Tutorial ist eigentlich gar nicht schlecht. Aber die Interruptgeschichte ist einfach ein bisschen oversized. Ein Bootloader macht nichts anderes als Daten empfangen und diese ins Flash zu schreiben. Er wartet auf Daten und wenn die da sind, brennt er die. Ein Interrupt ist da vollkommen überflüssig. Den Uart kann man dann auch genau so gut pollen und sich die Umschalterei mit den Vektoren sparen. mfg.
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.