Hallo, ich programmiere AtMega328 mit einem Tremex AVR-Prog, der über das SPI mit dem Microcontroller verbunden ist. Da ich diese Pins nun anderweitig brauche, möchte ich einen Arduino Uno wie die Arduino-IDE über die serielle / USB-Schnittstelle programmieren - allerdings ohne die Arduino-IDE. Für Tips, wie ich das unter Linux hinbekomme kann, wäre ich dankbar.
Schritt 1: Bootloader brennen Schritt 2: Firmware mit z.B. avrdude hochladen
Michael schrieb: > Da ich diese Pins nun anderweitig brauche, Das bedeutet nicht, daß man diese nicht benutzen kann. Man muss nur wissen wie es geht, wie immer. https://www.mikrocontroller.net/articles/AVR_In_System_Programmer#ISP-Pins_am_AVR_auch_f%C3%BCr_andere_Zwecke_nutzen
Falk B. schrieb: > Das bedeutet nicht, daß man diese nicht benutzen kann. Man muss nur > wissen wie es geht, wie immer. Eben, auch ein Taster schadet nichts, wenn man ihm einen Vorwiderstand gibt. Das kratzt zwar im gedrückten Zustand etwas am Störabstand, verhindert bei angeschlossenem Programmer aber sicher einen versehentlichen Kurzschluss.
:
Bearbeitet durch User
Sorry, ich habe mich vermutlich nicht richtig ausgedrückt. Ich möchte den im Arduino Uno vorhandenen Bootloader weiterhin verwenden, ohne ihn zu ändern. Ich suche ein Programm, das auf dem PC läuft und den von mir generierten Hex-Code (unter Verwendung des Bootloader-Protokolls) über die beim Einstecken des Uno generierte Schnittstelle (z. B. ttyUSB0) auf den Uno lädt und flasht.
Michael schrieb: > Ich suche ein Programm, das auf dem PC läuft und den von mir generierten > Hex-Code (unter Verwendung des Bootloader-Protokolls) über die beim > Einstecken des Uno generierte Schnittstelle (z. B. ttyUSB0) auf den Uno > lädt und flasht. Hat man dir schon gesagt: Sebastian R. schrieb: > Schritt 2: Firmware mit z.B. avrdude hochladen
Vielleicht ist es noch hilfreich darauf hinzuweisen dass die Bootloader Fuses richtig gesetzt werden sollten.
Wastl schrieb: > Vielleicht ist es noch hilfreich darauf hinzuweisen dass die > Bootloader Fuses richtig gesetzt werden sollten. Das sind sie, wenn man den Arduino kauft.
avrdude -F -V -c avrispmkII -p m328p -P /dev/ttyUSB0 -U flash:w:blink.hex avrdude error: timeout avrdude error: timeout avrdude error: timeout avrdude error: timeout avrdude error: timeout avrdude error: timeout avrdude error: timeout communicating with programmer Die Parameter "avrispmkII" und "/dev/ttyUSB0" habe ich der Arduini-IDE entnommen, dort funktionieren sie. Wenn ich "blink.hex" mit dem AVR-Prog runterlade, funktioniert es.
:
Bearbeitet durch User
Michael schrieb: > Wenn ich "blink.hex" mit dem AVR-Prog runterlade, funktioniert es. Die Arduino-IDE zeigt auch die volle Kommandozeile für den Aufruf von avrdude an, wenn man das in den Einstellungen einstellt. Damit kannst du vergleichen.
Bei mir nicht: Archiving built core (caching) in: /tmp/arduino_cache_132696/core/core_arduino_avr_uno_1621df717313d057c922 02babd71649a.a Der Sketch verwendet 930 Bytes (2%) des Programmspeicherplatzes. Das Maximum sind 32256 Bytes. Globale Variablen verwenden 9 Bytes (0%) des dynamischen Speichers, 2039 Bytes für lokale Variablen verbleiben. Das Maximum sind 2048 Bytes. Wenn ich dieses Programm mit dem AVR-Prog runterlade, funktioniert es:
1 | #include <stdint.h> |
2 | #include <avr/io.h> |
3 | #include <util/delay.h> |
4 | |
5 | void blink (void) |
6 | {
|
7 | // Achtung: dies macht auch RXD zum Ausgang!
|
8 | |
9 | DDRD = 255; // Alle Port-D-Pins sind Ausgänge |
10 | |
11 | while (1) |
12 | {
|
13 | PORTD = 255; _delay_ms(100); |
14 | PORTD = 0; _delay_ms(100); |
15 | }
|
16 | }
|
17 | |
18 | int main (void) |
19 | {
|
20 | blink (); |
21 | |
22 | return 0; |
23 | }
|
Mir ist klar, dass ich den im Uno eingebauten Bootloader durch das Runterladen mit dem AVR-Prog zerstöre. Ich verwende deswegen zwei Unos, einen zur Programmierung mit dem AVR-Prog, bei dem der Bootloader überschrieben ist, und einen neuen zur Programmierung mit der Arduino-IDE, bei dem der Bootloader noch ok ist.
Jetzt funktioniert es! Ich habe aus der "ausführlichen Ausgabe" der Arduino-IDE folgende Zeile rauskopiert /usr/bin/avrdude -C/etc/avrdude.conf -v -patmega328p -carduino -P/dev/ttyUSB0 -b115200 -D -Uflash:w:/tmp/arduino_build_466420/AnalogReadSerial.ino.hex:i und so geändert, dass es die von mir erstellte blink.hex runterlädt /usr/bin/avrdude -C/etc/avrdude.conf -v -patmega328p -carduino -P/dev/ttyUSB0 -b115200 -D -Uflash:w:blink.hex:i Danke!
Michael schrieb: > Ich habe aus der "ausführlichen Ausgabe" der Arduino-IDE folgende Zeile > rauskopiert Du hättest auch einfach ins Manual von avrdude gucken können. Das sollte eigentlich die erste Adresse sein, wo man nachschaut, mit welchen Parametern avrdude aufzurufen ist.
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.