Nachdem ich heute meine Lieferung ATMEGA328P erhalten habe und diesen den Arduino Bootloader verpasst habe. Funktioniert ein simples Blink nicht. Die LED leuchtet durchgehend. Habe mittlerweise auch schon DP12 ausprobiert das selbe Problem. Komischerweise ist nach dem Bootloader flashen ja ein Blink drauf was auch funktioniert. Nur wenn ich den Sketch selbst danach einspiele leuchtet der PIN durchgehend. Ein Fade auf PIN9 funktioniert hingegen super.
Also ich habe jetzt das knightrider Example ausprobiert und dort klappt es mit dem digitalwrite das sie an und aus geht. Aber warum zur Hölle geht kein einfaches Blink???
Den optiboot Bootloader habe ich wie folgt geflasht:
[root@workstation optiboot]# make ISPTOOL=stk500v1 ISPPORT=/dev/ttyUSB0 ISPSPEED=-b19200 atmega328_isp
avrdude -c stk500v1 -p atmega328p -P /dev/ttyUSB0 -b19200 -e -u -U lock:w:0x3f:m -U efuse:w:0x05:m -U hfuse:w:0xDE:m -U lfuse:w:0xFF:m
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.12s
avrdude: Device signature = 0x1e950f
avrdude: erasing chip
avrdude: reading input file "0x3f"
avrdude: writing lock (1 bytes):
Writing | ################################################## | 100% 0.04s
avrdude: 1 bytes of lock written
avrdude: verifying lock memory against 0x3f:
avrdude: load data lock data from input file 0x3f:
avrdude: input file 0x3f contains 1 bytes
avrdude: reading on-chip lock data:
Reading | ################################################## | 100% 0.04s
avrdude: verifying ...
avrdude: 1 bytes of lock verified
avrdude: reading input file "0x05"
avrdude: writing efuse (1 bytes):
Writing | ################################################## | 100% 0.04s
avrdude: 1 bytes of efuse written
avrdude: verifying efuse memory against 0x05:
avrdude: load data efuse data from input file 0x05:
avrdude: input file 0x05 contains 1 bytes
avrdude: reading on-chip efuse data:
Reading | ################################################## | 100% 0.04s
avrdude: verifying ...
avrdude: 1 bytes of efuse verified
avrdude: reading input file "0xDE"
avrdude: writing hfuse (1 bytes):
Writing | ################################################## | 100% 0.12s
avrdude: 1 bytes of hfuse written
avrdude: verifying hfuse memory against 0xDE:
avrdude: load data hfuse data from input file 0xDE:
avrdude: input file 0xDE contains 1 bytes
avrdude: reading on-chip hfuse data:
Reading | ################################################## | 100% 0.04s
avrdude: verifying ...
avrdude: 1 bytes of hfuse verified
avrdude: reading input file "0xFF"
avrdude: writing lfuse (1 bytes):
Writing | ################################################## | 100% 0.04s
avrdude: 1 bytes of lfuse written
avrdude: verifying lfuse memory against 0xFF:
avrdude: load data lfuse data from input file 0xFF:
avrdude: input file 0xFF contains 1 bytes
avrdude: reading on-chip lfuse data:
Reading | ################################################## | 100% 0.04s
avrdude: verifying ...
avrdude: 1 bytes of lfuse verified
avrdude done. Thank you.
avrdude -c stk500v1 -p atmega328p -P /dev/ttyUSB0 -b19200 -U flash:w:optiboot_atmega328.hex -U lock:w:0x2f:m
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.12s
avrdude: Device signature = 0x1e950f
avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed
To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "optiboot_atmega328.hex"
avrdude: input file optiboot_atmega328.hex auto detected as Intel Hex
avrdude: writing flash (32768 bytes):
Writing | ################################################## | 100% 0.58s
avrdude: 32768 bytes of flash written
avrdude: verifying flash memory against optiboot_atmega328.hex:
avrdude: load data flash data from input file optiboot_atmega328.hex:
avrdude: input file optiboot_atmega328.hex auto detected as Intel Hex
avrdude: input file optiboot_atmega328.hex contains 32768 bytes
avrdude: reading on-chip flash data:
Reading | ################################################## | 100% 37.50s
avrdude: verifying ...
avrdude: 32768 bytes of flash verified
avrdude: reading input file "0x2f"
avrdude: writing lock (1 bytes):
Writing | ################################################## | 100% 0.12s
avrdude: 1 bytes of lock written
avrdude: verifying lock memory against 0x2f:
avrdude: load data lock data from input file 0x2f:
avrdude: input file 0x2f contains 1 bytes
avrdude: reading on-chip lock data:
Reading | ################################################## | 100% 0.04s
avrdude: verifying ...
avrdude: 1 bytes of lock verified
avrdude: safemode: Fuses OK
avrdude done. Thank you.
Zuvor ArduinoAsISP auf einen Arduino und einen selbstgelöteten FlasherShield dann den 328 geflasht.
madworm:
Nun, zum beispiel mal den CODE. Das waere hilfreich.
Das Stinknormales Example, dachte währe klar aber bitte hier:
/*
Blink
Turns on an LED on for one second, then off for one second, repeatedly.
This example code is in the public domain.
*/
void setup() {
// initialize the digital pin as an output.
// Pin 13 has an LED connected on most Arduino boards:
pinMode(13, OUTPUT);
}
void loop() {
digitalWrite(13, HIGH); // set the LED on
delay(1000); // wait for a second
digitalWrite(13, LOW); // set the LED off
delay(1000); // wait for a second
}
Und funktioniert. Aber was nützt mir das? Wenn du mir blos ne Binärdatei schickst, da werde ich auch nicht schlau draus!
Wie ist der Code? Und warum funktioniert der Standart Example nicht. Wenn ich einen atmega168 drauf setzte geht es sofort.
In dieser variante ist der compiler und die ganze toolchain enthalten (auch fuer linux). Allerdings basiert das ganze auf etwas aelteren versionen. Alles Arduino-relevante geht natuerlich, aber z.B. ATtiny4313 oder gar xmega nicht.
Aha... der unterschied ist, dass du ein paar globale variablen definiert hast. Da gab es irgendeien bug in irgendeiner avr-gcc version... frag mich nicht.
madworm:
Aha... der unterschied ist, dass du ein paar globale variablen definiert hast. Da gab es irgendeien bug in irgendeiner avr-gcc version... frag mich nicht.
Probier mal in dem blink beispiel folgendes noch vor setup() einzufuegen:
byte dummy = 1;
Und dann in setup():
dummy++;
Das wars! Danke.
Habe eben noch in einer Windows VM getestet, da geht es von Haus aus mit dem Example.
Habe zwar immer noch nicht so genau verstanden warum das so ist, bin auch kein Genie in C aber naja. Wenigstens wurde des Problems Lösung gefunden.
Das ist ein toolchain bug. Irgendetwas mit den initialisierungsroutienen die laufen bevor main() ueberhaupt anfaengt. Jedenfalls taucht dieses problem nicht in allen versionen auf. Und auf jedenfall nicht in der variante, die mit der naechsten IDE version mitgeliefert wird.