Forum: Mikrocontroller und Digitale Elektronik Arduino Uno Bootloader verwenden


von Michael (k-mte)


Lesenswert?

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.

von Sebastian R. (sebastian_r569)


Lesenswert?

Schritt 1: Bootloader brennen
Schritt 2: Firmware mit z.B. avrdude hochladen

von Falk B. (falk)


Lesenswert?

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

von Oliver S. (oliverso)


Lesenswert?


von Rainer W. (rawi)


Lesenswert?

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
von Michael (k-mte)


Lesenswert?

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.

von Wastl (hartundweichware)


Lesenswert?

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

von Wastl (hartundweichware)


Lesenswert?

Vielleicht ist es noch hilfreich darauf hinzuweisen dass die
Bootloader Fuses richtig gesetzt werden sollten.

von Falk B. (falk)


Lesenswert?

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.

von Michael (k-mte)


Angehängte Dateien:

Lesenswert?

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
von Falk B. (falk)


Lesenswert?

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.

von Michael (k-mte)


Lesenswert?

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.

von Falk B. (falk)


Angehängte Dateien:

Lesenswert?

Siehe Anhang.

von Michael (k-mte)


Angehängte Dateien:

Lesenswert?

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!

von Johannes F. (jofe)


Angehängte Dateien:

Lesenswert?

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
Noch kein Account? Hier anmelden.