Bin am verzweifeln. Brauche ein CAN Bootloader für den Arduino NANO.
habe diesen Artikel
[[http://www.kreatives-chaos.com/artikel/can-bootloader]] gefunden, im
Prinzip genau was ich brauche muss ich nur an den atmega328p anpassen.
Tut aber nicht wie ich will. Also 1 kleines Programm
1 | #include <avr/io.h>
|
2 | #include <util/delay.h>
|
3 |
|
4 | int main(void)
|
5 | {
|
6 | uint8_t lc = 0;
|
7 | void (*start)( void ) = 0x0000; /* Funktionspointer auf 0x0000 */
|
8 | DDRB |= (1<<DDB5);
|
9 | while (lc < 10)
|
10 | {
|
11 | PORTB |= (1<<PORTB5);
|
12 | _delay_ms(1000);
|
13 | PORTB &= ~ (1<<PORTB5);
|
14 | _delay_ms(1000);
|
15 | lc = lc + 1;
|
16 | }
|
17 | start();
|
18 | return 0;
|
19 | }
|
soll 10 mal blinken und dann auf Adresse 0 springen.
Fuses sind so eingestellt, Startadresse im Makefile ist 2x3c00 also
7800. Steht so auch im HEX file.
Lade ich das Programm tut es auch es blink mit den richtigen Zeiten an
der richtige LED.
So dann zweites Programm
1 | #define F_CPU 16000000UL
|
2 | #include <avr/io.h>
|
3 | #include <util/delay.h>
|
4 |
|
5 |
|
6 | int main(void)
|
7 | {
|
8 | uint8_t lc = 0; DDRD |= (1<<DDD2);
|
9 | while (5 < 10)
|
10 | {
|
11 | PORTD |= (1<<PORTD2);
|
12 | _delay_ms(200);
|
13 | PORTD &= ~ (1<<PORTD2);
|
14 | _delay_ms(1500);
|
15 | lc = lc + 1;
|
16 | }
|
17 | }
|
soll nach dem 10 maligen ausführen des dummy bootloaders ausgeführt
werden. Fuses unverändert, geladen ab 0x0h, steht auch so im HEX file.
Auch der Teil tut was er soll, blinkt in richtiger Frequenz an richtiger
LED.
Nur das erste Programm (Dummy Bootloader), das vorher ausgeführt werden
soll ist weg oder wird zumindest nicht angesprungen.
Was mache ich falsch, wo ist mein Denkfehler. Habe
[[https://www.mikrocontroller.net/articles/AVR_Bootloader_in_C_-_eine_einfache_Anleitung]]
x mal durchgegangen, dto. das atmega328p Datenplatt, den Fusebit Rechner
bemüht und noch x andere Artikel zu Bootloader und Fusebit gelesen.
Stecke nun seit Tagen fest.
Kann mir bitte wer helfen.
Danke
Gruß Rainer