So jungs, ich brauch nochmal eure Hilfe.
Ich will die PID Werte ändern und anschließend speichern.
Wie macht man das mit float/double?
Hier was ich gefunden hatte und probiert:
http://forum.arduino.cc/index.php?topic=122270.msg920283#msg920283
http://forum.arduino.cc/index.php?topic=389705.msg2685082#msg2685082
http://forum.arduino.cc/index.php?topic=147461.msg1107876#msg1107876
https://forum.arduino.cc/index.php?topic=69629.0
http://playground.arduino.cc/Code/EEPROMLoadAndSaveSettings
combie's versionskonflikt
Wenn dann einmal geändert wurde, sollen alle ins EEPROM updaten und beim nächsten reset nicht die Startwerte genommen werden sondern die aus dem EEPROM.
Ist es normal dass bei jedem Upload des Sketches der EEPROM "resettet" wird? Kann man es nicht "abstellen"?
agmue
March 13, 2017, 6:47am
2
skorpi08:
Ist es normal dass bei jedem Upload des Sketches der EEPROM "resettet" wird? Kann man es nicht "abstellen"?
Schau mal bei den Fuses: "Preserve EEPROM memory through the Chip Erase cycle; [EESAVE=0]"
Wieso so umständlich? Die EEPROM Library hat Template-Methoden die mit beliebigen Datentypen umgehen können. Also sowohl die Standarddatentypen als auch selbst definierte (z.B. structs). Du musst die einzelnen Bytes nicht selbst behandeln.
combie
March 13, 2017, 12:45pm
5
skorpi08:
Also mit get und put?
Ja!
Mein Tipp:
Du legst eine Struktur an, welche deine Daten halten soll.
Eine Instanz der Daten ins EEPROM (Arduino erzeugt eine *.eep Datei)
Eine ins RAM
Dann kannst du nach belieben hin und eher schaufeln.
Beispiel: (ein Counter, welcher die Powerup und Reset zählt)
#include <EEPROM.h>
struct DatenSatz
{
int version;
char name[64];
unsigned long resetCounter;
};
DatenSatz EEMEM eep_datensatz = {1,"Frosch",0}; // Gcc erzeugt *.eep Datei
void setup()
{
Serial.begin(9600);
Serial.println("Start");
unsigned long counter=0;
EEPROM.get((int)&eep_datensatz.resetCounter,counter);// lesen
counter++;
EEPROM.put((int)&eep_datensatz.resetCounter,counter);// schreiben
Serial.println(counter);
}
void loop()
{
}
Da wird nur der Counter aus dem Datensatz gelesen.
Du kannst aber genau so gut die ganze Struktur in einem Rums verwursten.
Also ich versuch hiermit die Fuses zu berechnen: AVR® Fuse Calculator – The Engbedded Blog
Habe die Fuses vom UNO genommen und da eingegeben, um schon mal die Standartwerte zu haben.
Da ich eh mit USBasp Uploade, was muss ich da noch setzten bzw abwählen, da brauch ich ja den Bootloader nicht?
EESAVE hab ich schon angeklickt.
combie
March 13, 2017, 2:06pm
7
Den Resetvektor abwählen
Die Boot FlashSize auf default stellen
Nicht die Lock Bits des UNO übernehmen.
Die boards.txt ändern (eine eigene bauen), damit du den Speicher auch nutzen kannst(wenn nötig)
EESAVE, BOOTSZ0, BOOTSZ1 gesetzt.
BOOTRST abgewählt.
##############################################################
uno.name=UNO ohne BOOTLOADER
uno.vid.0=0x2341
uno.pid.0=0x0043
uno.vid.1=0x2341
uno.pid.1=0x0001
uno.vid.2=0x2A03
uno.pid.2=0x0043
uno.vid.3=0x2341
uno.pid.3=0x0243
uno.upload.tool=avrdude
uno.upload.protocol=arduino
uno.upload.maximum_size=32256
uno.upload.maximum_data_size=2048
uno.upload.speed=115200
uno.bootloader.tool=avrdude
uno.bootloader.low_fuses=0xFF
uno.bootloader.high_fuses=0xD1
uno.bootloader.extended_fuses=0xFD
uno.bootloader.unlock_bits=0x3F
uno.bootloader.lock_bits=0xFF
uno.build.mcu=atmega328p
uno.build.f_cpu=16000000L
uno.build.board=AVR_UNO
uno.build.core=arduino
uno.build.variant=standard
##############################################################
Bootloader gebrannt mit dem USBasp und anschließend Sketch Upload mit:
AVR ISP (Also über USB)
Signature detector.
Written by Nick Gammon.
Compiled on Mar 13 2017 at 16:27:45 with Arduino IDE 10801.
Signature = 1E 95 0F
Fuses
Low = FF High = DE Ext = FD Lock = CF
Processor = ATmega328P
Flash memory size = 32768
Bootloader in use: Yes
EEPROM preserved through erase: No
Watchdog timer always on: No
Bootloader is 512 bytes starting at 7E00
Bootloader:
7E00: 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
7E10: 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F
7E20: 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F
7E30: 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F
7E40: 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F
7E50: 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F
7E60: 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F
7E70: 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F
7E80: 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F
7E90: 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F
7EA0: A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF
7EB0: B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF
7EC0: C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF
7ED0: D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF
7EE0: E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF
7EF0: F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF
7F00: 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
7F10: 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F
7F20: 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F
7F30: 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F
7F40: 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F
7F50: 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F
7F60: 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F
7F70: 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F
7F80: 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F
7F90: 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F
7FA0: A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF
7FB0: B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF
7FC0: C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF
7FD0: D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF
7FE0: E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF
7FF0: F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF
MD5 sum of bootloader = F5 C8 E3 C3 1C 04 4B AE 0E 65 56 95 60 B5 43 32
USBasp
Signature detector.
Written by Nick Gammon.
Compiled on Mar 13 2017 at 16:18:24 with Arduino IDE 10801.
Signature = 1E 95 0F
Fuses
Low = FF High = DE Ext = FD Lock = FF
Processor = ATmega328P
Flash memory size = 32768
Bootloader in use: Yes
EEPROM preserved through erase: No
Watchdog timer always on: No
Bootloader is 512 bytes starting at 7E00
Bootloader:
7E00: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
7E10: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
7E20: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
7E30: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
7E40: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
7E50: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
7E60: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
7E70: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
7E80: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
7E90: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
7EA0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
7EB0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
7EC0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
7ED0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
7EE0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
7EF0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
7F00: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
7F10: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
7F20: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
7F30: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
7F40: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
7F50: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
7F60: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
7F70: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
7F80: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
7F90: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
7FA0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
7FB0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
7FC0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
7FD0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
7FE0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
7FF0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
MD5 sum of bootloader = DE 03 FE 65 A6 76 5C AA 8C 91 34 3A CC 62 CF FC
Dabei hab ich noch nichts geändert.
Aber auch wenn ich die boards.txt ändere, zeigt immer noch das alte an und es ist kein neuer Eintrag vorhanden.
EDIT//
Beim Mac liegts hier:
/Users/{username}/Library/Arduino15/packages/arduino/hardware/avr/{version}/boards.txt
combie
March 13, 2017, 4:21pm
10
Ich habe mich dazu entschlossen, möglichst wenig an den original Dateien zu ändern.
Denn:
Beim nächsten Update werden die Änderungen überschrieben.
Es liegen mehrere Versionen auf der Platte (so wie jetzt bei dir vermutlich)
Auch verwende ich die "portable" IDE Version, eben damit das alles nicht quer über alle Platten verteilt wird.
Siehe Anhang, da baue ich meine Variationen ein.
Oder sage mir konkret deine Wünsche, dann baue ich es dir ein.
breadboard.zip (5.91 KB)
Arduino Pro Mini 16Mhz
EEPROM beim Upload nicht löschen.
Uploaden mit USBasp ohne Bootloader.
Das wars eigentlich.
Beim Mac gibts nur die eine Version, also keine Portable.
Bzw beim Mac sind die Meisten Apps Portabel, also nicht wie bei WIN erstmal lange installieren.
Gibts für den Mac nicht sowas, wie die ZIP-Version? Das portable wird hinterher durch Anlegen des Ordners portable neben hardware gemacht. Das hat den Vorteil, dass man mehrere Versionen mit völlig unterschiedlichen Libs und Architekturen haben kann, die sich gegenseitig nicht ins Gehege kommen.
Gruß Tommy
Nö, gibts nur die eine .zip https://www.arduino.cc/en/Main/Software
Man kann aber mehrere downloaden, umbenennen, und schon läufts. Ist also schon die Portable Version, wenn ichs richtig verstehe.
Früher hab ich in der App die boards.txt geändert, ist jetzt bei den neueren wohl anders.
Wo legt dann jede Version die Sketche und die von Dir installierten Libs ab? In einem gemeinsamen Ordner oder getrennt?
Wenn letzteres, ist es portabel.
Gruß Tommy
Alles in einem gemeinsamen Ordner, glaub ich. Es gibt aber keine Probleme dabei, warum auch?
Wenn ich mal ein manuelles Backup machen will, brauch ich nur ein Ordner sichern.
Jede App nimmt sich dass was die haben will, den rest fasst die nicht an, denk ich zumindest.
Wie soll ichs testen? Die 023 IDE laden und dann? oder die 1.5er?
Also wäre es so richtig?
atmega328bb.menu.variante.16mhzohnebootloader=16MHz OhneBootloader+EESAVE=1
atmega328bb.menu.variante.16mhzohnebootloader.upload.maximum_size=32786
atmega328bb.menu.variante.16mhzohnebootloader.bootloader.low_fuses=0xFF
atmega328bb.menu.variante.16mhzohnebootloader.bootloader.high_fuses=0xD1
atmega328bb.menu.variante.16mhzohnebootloader.bootloader.path=arduino:atmega
atmega328bb.menu.variante.16mhzohnebootloader.build.f_cpu=16000000L
Der ganze Code
##############################################################
menu.variante=Variante
menu.bod=Brownout
atmega328bb.name=ATmega328P
atmega328bb.build.board=AVR_328_BREADBOARD
atmega328bb.build.mcu=atmega328p
atmega328bb.build.core=arduino:arduino
atmega328bb.build.variant=arduino:standard
atmega328bb.upload.tool=arduino:avrdude
atmega328bb.bootloader.unlock_bits=0x3F
atmega328bb.bootloader.tool=arduino:avrdude
atmega328bb.menu.bod.bod18=Bod 1,8V
atmega328bb.menu.bod.bod18.bootloader.extended_fuses=0x04
atmega328bb.menu.bod.bod27=Bod 2,7V
atmega328bb.menu.bod.bod27.bootloader.extended_fuses=0x05
atmega328bb.menu.bod.bod43=Bod 4,3V
atmega328bb.menu.bod.bod43.bootloader.extended_fuses=0x06
atmega328bb.menu.variante.in1mhzbootloaderopti9600=1MHz Optiboot 9600Baud
atmega328bb.menu.variante.in1mhzbootloaderopti9600.upload.protocol=arduino
atmega328bb.menu.variante.in1mhzbootloaderopti9600.upload.maximum_size=32256
atmega328bb.menu.variante.in1mhzbootloaderopti9600.upload.speed=9600
atmega328bb.menu.variante.in1mhzbootloaderopti9600.bootloader.low_fuses=0xff
atmega328bb.menu.variante.in1mhzbootloaderopti9600.bootloader.high_fuses=0xde
atmega328bb.menu.variante.in1mhzbootloaderopti9600.bootloader.path=optiboot_v50
atmega328bb.menu.variante.in1mhzbootloaderopti9600.bootloader.file=optiboot_v50/atmega328_9600_1MHz.hex
atmega328bb.menu.variante.in1mhzbootloaderopti9600.bootloader.lock_bits=0x2F
atmega328bb.menu.variante.in1mhzbootloaderopti9600.build.f_cpu=1000000L
atmega328bb.menu.variante.in1mhzbootloaderopti4800=1MHz Optiboot 4800Baud
atmega328bb.menu.variante.in1mhzbootloaderopti4800.upload.protocol=arduino
atmega328bb.menu.variante.in1mhzbootloaderopti4800.upload.maximum_size=32256
atmega328bb.menu.variante.in1mhzbootloaderopti4800.upload.speed=4800
atmega328bb.menu.variante.in1mhzbootloaderopti4800.bootloader.low_fuses=0xff
atmega328bb.menu.variante.in1mhzbootloaderopti4800.bootloader.high_fuses=0xde
atmega328bb.menu.variante.in1mhzbootloaderopti4800.bootloader.path=optiboot_v50
atmega328bb.menu.variante.in1mhzbootloaderopti4800.bootloader.file=optiboot_v50/atmega328_4800_1MHz.hex
atmega328bb.menu.variante.in1mhzbootloaderopti4800.bootloader.lock_bits=0x2F
atmega328bb.menu.variante.in1mhzbootloaderopti4800.build.f_cpu=1000000L
atmega328bb.menu.variante.in8mhzbootloader=8MHz StdBootloader
atmega328bb.menu.variante.in8mhzbootloader.upload.protocol=stk500
atmega328bb.menu.variante.in8mhzbootloader.upload.maximum_size=30720
atmega328bb.menu.variante.in8mhzbootloader.upload.speed=57600
atmega328bb.menu.variante.in8mhzbootloader.bootloader.low_fuses=0xE2
atmega328bb.menu.variante.in8mhzbootloader.bootloader.high_fuses=0xDA
atmega328bb.menu.variante.in8mhzbootloader.bootloader.path=arduino:atmega
atmega328bb.menu.variante.in8mhzbootloader.bootloader.file=ATmegaBOOT_168_atmega328_pro_8MHz.hex
atmega328bb.menu.variante.in8mhzbootloader.bootloader.lock_bits=0x0F
atmega328bb.menu.variante.in8mhzbootloader.build.f_cpu=8000000L
atmega328bb.menu.variante.8mhzohnebootloader=8MHz OhneBootloader
atmega328bb.menu.variante.8mhzohnebootloader.upload.maximum_size=32786
atmega328bb.menu.variante.8mhzohnebootloader.bootloader.low_fuses=0xE2
atmega328bb.menu.variante.8mhzohnebootloader.bootloader.high_fuses=0xD9
atmega328bb.menu.variante.8mhzohnebootloader.bootloader.path=arduino:atmega
atmega328bb.menu.variante.8mhzohnebootloader.build.f_cpu=8000000L
atmega328bb.menu.variante.16mhzohnebootloader=16MHz OhneBootloader+EESAVE=1
atmega328bb.menu.variante.16mhzohnebootloader.upload.maximum_size=32786
atmega328bb.menu.variante.16mhzohnebootloader.bootloader.low_fuses=0xFF
atmega328bb.menu.variante.16mhzohnebootloader.bootloader.high_fuses=0xD1
atmega328bb.menu.variante.16mhzohnebootloader.bootloader.path=arduino:atmega
atmega328bb.menu.variante.16mhzohnebootloader.build.f_cpu=16000000L
atmega328bb.menu.variante.1mhzohnebootloader=1MHz OhneBootloader
atmega328bb.menu.variante.1mhzohnebootloader.upload.maximum_size=32786
atmega328bb.menu.variante.1mhzohnebootloader.bootloader.low_fuses=0x62
atmega328bb.menu.variante.1mhzohnebootloader.bootloader.high_fuses=0xd9
atmega328bb.menu.variante.1mhzohnebootloader.build.f_cpu=1000000L
Ähm, pustekuchen!
Wie soll ich den Bootloader brennen um Fuses zu setzen wenn ich garkein Bootloader haben will?!?!
Kein Wunder dass der meckert:
Library/Arduino15/packages/arduino/hardware/avr/1.6.17/bootloaders/{bootloader.file}: No such file or directory
agmue
March 13, 2017, 5:53pm
17
Ich mische mich mal ein, weil ich die Probleme, von denen Ihr schreibt, nicht kenne. Ob das meine Unwissenheit oder Genialität ist, müßt Ihr herausfinden
Ich habe Win7 mit IDE 1.6.5 auf Laufwerk c installiert. Meine Sketche liegen in Verzeichnissen von f:\Arduino. Außerdem gibt es beispielsweise f:\Arduino\hardware\MiniCore\avr\boards.txt (GitHub - MCUdude/MiniCore: Arduino hardware package for ATmega8, ATmega48, ATmega88, ATmega168, ATmega328 and ATmega328PB ) mit ATmega328, ATmega168, ATmega88, ATmega48 und ATmega8 jeweils mit verschiedenen internen und externen Taktraten. Eine Variante ohne Bootloader wird leider nicht angeboten.
All diese Dateien werden bei einer neuen Version nicht überschrieben. Solange die IDE einen Sketchbook-Speicherort kennt, werden die Dateien, Bibliotheken und Hardware-Verzeichnisse verwendet.
Nur mal so als Einwurf.
skorpi08:
Ähm, pustekuchen!
Wie soll ich den Bootloader brennen um Fuses zu setzen wenn ich garkein Bootloader haben will?!?!
Analogie von den ATtinys: Du verwendest einen leeren Bootloader. Bei mir für den ATmega hier:
f:\Arduino\hardware\MiniCore\avr\bootloaders\empty\empty.hex
48.menu.clock.16MHz_external=16 MHz external (BOD 2.7v)
48.menu.clock.16MHz_external.upload.speed=115200
48.menu.clock.16MHz_external.bootloader.low_fuses=0xf7
48.menu.clock.16MHz_external.bootloader.high_fuses=0xd5
48.menu.clock.16MHz_external.bootloader.extended_fuses=0xff
48.menu.clock.16MHz_external.bootloader.file=empty/empty.hex
48.menu.clock.16MHz_external.build.f_cpu=16000000L
Alles klar, ich brauch beim USBasp garnicht den Bootloader brennen,die Fuses werden beim jeden Upload neu gesetzt, wie es scheint.
Der Bootloader ist jetzt zwar um einiges größer aber ist nicht in use, hab ich dann trotzdem mehr Flash da er ja nicht genutzt wird?
Signature detector.
Written by Nick Gammon.
Compiled on Mar 13 2017 at 18:48:27 with Arduino IDE 10801.
Signature = 1E 95 0F
Fuses
Low = FF High = D1 Ext = FD Lock = FF
Processor = ATmega328P
Flash memory size = 32768
Bootloader in use: No
EEPROM preserved through erase: Yes
Watchdog timer always on: No
Bootloader is 4096 bytes starting at 7000
Bootloader:
7000: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
.............
7FF0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
MD5 sum of bootloader = 6A E5 9E 64 85 03 77 EE 54 70 C8 54 76 15 51 EA
agmue
March 13, 2017, 6:15pm
19
Bei low_fuses=0xFF bekomme ich im Calculator 8MHz external. 0xF7 würde mir besser gefallen.
Die Fuses werden nach meiner Vorstellung nur zusammen mit dem Bootloader, auch wenn er leer ist, gebrannt. Ist bei den ATtinys so.
Ich würde das Angebot von combie annehmen ...
Der UNO hat Standardmäßig bei 16Mhz die FF Fuses gesetzt, wird dann ja richtig sein?!
uno.bootloader.tool=avrdude
uno.bootloader.low_fuses=0xFF
uno.bootloader.high_fuses=0xDE
uno.bootloader.extended_fuses=0x05
uno.bootloader.unlock_bits=0x3F
uno.bootloader.lock_bits=0x0F
uno.bootloader.file=optiboot/optiboot_atmega328.hex
Hab ja schon geschrieben was ich brauch,
Arduino Pro Mini 16Mhz
EEPROM beim Upload nicht löschen.
Uploaden mit USBasp ohne Bootloader.