Forum: Mikrocontroller und Digitale Elektronik Arduino Uno (Atmega328p) über Assembler programmieren mit AVR Studio, was gibt es zu beachten?


von int 21h (Gast)


Lesenswert?

Moin,

ich lese mich zur Zeit in das AVR-Tutorial ein und bin dabei das 
gelesene auch Praktisch umzusetzen.
Aus Kostengründen konnte ich mir kein teures AVR Evaluierungsboard 
leisten, sondern habe mich stattdessen für einen Arduino Uno rev 3 
entschieden (genauer gesagt für den hier: 
https://store.arduino.cc/arduino-uno-rev3).

Nun lese ich in letzter Zeit immer häufiger etwas vom Bootloader.
So wie ich es verstanden habe, soll das Programm im Bootloader dafür 
sorgen, dass der Flash über den USB Anschluss beschrieben werden kann.

Problem sollte jetzt sein, dass wenn ich von der Arduino IDE zu AVR 
Studio wechsel um den uC in Assembler (nicht C!) zu programmieren, dass 
das Programm im Bootloader resetet wird.
Irgendwie umständlich das ganze.
Wie dem auch sei, ich würde halt gerne mein erstes Programm über AVR 
Studio laufen lassen.
Kann ich das jetzt einfach so machen oder geht das Bootloader Programm 
zu nichte?
Was gibt es noch zu beachten?


Schönen ersten Advent wünscht euch int 21h :D

von MWS (Gast)


Lesenswert?

Ein Bootlader programmiert den Flash über die serielle 
Schnittstelle/USB, AVR-Studio unterstützt den Arduino Bootlader nicht. 
Programmiert man per ISP, dann wird der Bootlader überschrieben, die 
Arduino IDE kann den Uno dann nicht mehr ansprechen. Der Bootlader kann 
aber bei Bedarf wieder per AVR-Studio draufgeladen werden.

von Asdf (Gast)


Lesenswert?

IIRC kannst du via avrdude den bootloader mitnutzen. Dafür musst Du in 
Atmelstudio den dude als externes Tool einbinden. Beschreibungen dafür 
gibt es im Netz

von Bootloader Hater (Gast)


Lesenswert?

Man kann es sich auch leichter machen um sich nicht ständig
mit Bootloader-Kommandozeilen (die sowieso nie stimmen und
kryptisch sind) herumärgern zu müssen.

Man kauft sich einen ISP Programmer, nicht gerade den billigsten,
und kann mit wenigen Klicks und ganz ohne externe Tools aus dem
AVR Studio heraus seinen Controller flashen.

Ich finde es gerade für einen Anfänger furchtbar umständlich und
fehleranfällig mit einem Bootloader zu arbeiten. Dazu kommt noch
die immer wieder auftretende Stolperfalle von ver-fusten
Controllern (durch "kryptische" Fuse-Hexzahlen) was hier im Forum
immer wieder kilometerlange Problemlösungs-Threads verursacht.

von Einer K. (Gast)


Lesenswert?

Bootloader Hater schrieb:
> Ich finde es gerade für einen Anfänger furchtbar umständlich und
> fehleranfällig mit einem Bootloader zu arbeiten.
Keiner interessiert sich dafür ob du Bootloader hasst, oder liebst.

Aber es ist nunmal auf dem Arduino einer drauf.
So ist die Situation, alles andere ist ein "Wünsch dir was"
Darum, wird man sich also kümmern müssen.
Zumindest mal den ein oder anderen Gedanken dran verschwenden dürfen.

Ich halte die Frage des TO für berechtigt!
Wobei ich bezweifle, dass ein Assemblerprogrammierer solche Fragen 
stellen muss.
OK, vielleicht ganz am Anfang....



MWS schrieb:
> Programmiert man per ISP, dann wird der Bootlader überschrieben, die
> Arduino IDE kann den Uno dann nicht mehr ansprechen. Der Bootlader kann
> aber bei Bedarf wieder per AVR-Studio draufgeladen werden.
Natürlich kann die Arduino IDE dann weiterhin Programme per ISP 
aufspielen, und so auch den Bootloader reparieren.



int 21h schrieb:
> Was gibt es noch zu beachten?

Was gerne dabei vergessen wird:
Dann sollte man aber auch die (Bootloader) Fuses so setzen, dass später 
keine Probleme zu erwarten sind.


Schlussendlich:
Ja, man kann den Arduino UNO, seines Bootloaders berauben, in dem man 
die Anwendung per ISP aufspielt. Und dann bitte noch die Fuses 
korrigieren.

von Rudi D. (rulixa)


Lesenswert?

int 21h schrieb:
> kein teures AVR Evaluierungsboard

Beitrag "Pollin AVR Board Programmierung per USB-to-RS232 Converter DOCH möglich"

Verwende dieses billige Board seit vielen Jahren mit AVR Studio 4.16...9
Studio7 geht auch, aber für den Zweck überzogen, denke ich.

Flashen mit Ponyprog bzw avrdude.

von Michael U. (amiga)


Lesenswert?

Hallo,

ich benutze für ein paar alte ASM-Projekte auch AVR-Studio 4.18, bei der 
4.19 gab es die ersten größeren Umbauten und irgendwas klemmte damals 
dann bei mir. Programmer ist, auch aus alten Zeiten, entweder ein Dragon 
oder ein STK500. Ein China-Programmer, den mir ein Bekannter vererbt 
hat, wird vom Studio aber auch sauber erkannt. Ein Arduino-UNO oder Nano 
als Mega328 Plattform ist einfach kostengünstig, ein Arduino-Pro Mini 
eigentlich noch besser, da hat man auch die serielle komplett frei.
https://www.amazon.de/IZOKEE-ATmega328-Mikrocontroller-Entwicklerboard-Arduino/dp/B078HJDFLB/ref=sr_1_3?ie=UTF8&qid=1543742578&sr=8-3&keywords=arduino+pro+mini
Bootloader Fuses raus, ISP ran und fertig.

Gruß aus Berlin
Michael

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Zusammenfassend:
* Klar geht ein Arduino als Eval Board für AVR Controller
* Du benötigst einen ISP Programmer, um ohne Bootloader und aus AVR 
Studio Programme auf das Board zu flashen. Dabei ist es egal, ob es sich 
um Assembler oder C Programme handelt.

* Du kannst einen zweiten Arduino zum ISP Programmer machen, indem du 
ihn einmalig aus der Arduino IDE heraus als solchen programmierst. Den 
Sketch findest du sicher.
AVR Studio möchte von sich aus nur Atmel Programmiergeräte unterstützen, 
es gibt aber Fremdprodukte, die so tun, als wären sie der alte AVRISP 
(Mark 1). M.W. macht das z.B. der USBASP von Kollege Fischl.
Viele Fremdprogrammer benötigen allerdings den Schritt, das man sie 
extra aufruft und das von AVR Studio produzierte HEX File per 
Kommandozeile oder eigener GUI auf den MC bringt. Das beste Tool für 
solche Operationen ist vermutlich avrdude, das eine Unmenge Geräte 
unterstützt.

: Bearbeitet durch User
von int 21h (Gast)


Lesenswert?

Ok, also komme ich an einen USBASP nicht drum herum (Ich werde mir 
wahrscheinlich diesen hier zulegen: 
https://guloshop.de/shop/Mikrocontroller-Programmierung/guloprog-der-Programmer-von-guloshop-de::70.html

und: 
https://guloshop.de/shop/Kabel-und-Adapter/Programmieradapterkabel-6-polig-lang::8.html 
, brauche ich nicht noch einen Oszillator zum beschreiben?)

Aber welchen Zweck erfüllt dann eigentlich der andere uC auf dem Arduino 
Uno Board (Atmega16u2)? Der soll doch die Kommunikation zwischen USB und 
uC herstellen. Der ist dann sozusagen der Bootloader denke ich.
Wird das Programm darin beim reset/programmieren auch entfernt?
Ist der Chip ab dann auch nutzlos?
Im Prinzip ist dann der ganze Arduino Uno überflüssig XD
(z.B. der USB Anschluss, der zweite uC, der Quartz Oszillator, etc.)
Aber wegen der Einfachheit (und Geldmangel) habe ich mir den Arduino 
doch überhaupt gekauft.
Sehe ich das so richtig?

von Bootloader Hater (Gast)


Lesenswert?

int 21h schrieb:
> Ok, also komme ich an einen USBASP nicht drum herum (Ich werde mir
> wahrscheinlich diesen hier zulegen:

Sparen koste es was es wolle?

Lieber einen zu "AVR ISP MKII" kompatiblen.

Macht viel mehr Freude da AVR Studio sich freut.

von int 21h (Gast)


Lesenswert?

Asdf schrieb:
> IIRC kannst du via avrdude den bootloader mitnutzen. Dafür musst Du in
> Atmelstudio den dude als externes Tool einbinden. Beschreibungen dafür
> gibt es im Netz

Habe mich noch mal auf die Suche gemacht und bin auf dieses Video hier 
gestoßen: https://www.youtube.com/watch?v=zEbSQaQJvHI

Hat alles funktioniert... Problem gelöst :D
Kein usbasp oder sonstiges Nötig!!!

von Bootloader Hater (Gast)


Lesenswert?

int 21h schrieb:
> Kein usbasp oder sonstiges Nötig!!!

Irgendwann wirst du einen ver-fusten Controller haben und reuemütig
hier zurückkehren bzw daran denken was du hier geschrieben hast.

von Stefan F. (Gast)


Lesenswert?

USBASP wird vom AVR Studio und ATmel Studio nicht unterstützt. Du 
kannst diesen Programmieradapter aber trotzdem mit zusätzlicher Software 
verwenden. Zum Beispiel avrdude und AVR8-Burn-O-Mat.

von Asdf (Gast)


Lesenswert?

> Irgendwann wirst du einen ver-fusten Controller haben und reuemütig
> hier zurückkehren bzw daran denken was du hier geschrieben hast.

Ein Atmega328 kostet ca €2,20. Also kann er locker 10 "verfusen " und 
liegt immer noch unter den Kosten eines ISPs (Arduino mit DIP 
angenommen)

Und mit avrdude kann er gezielt nur das Flash ohne die Fuses brennen.

von S. R. (svenska)


Lesenswert?

Davon abgesehen kann man einen AVR aus einem Bootloader heraus nicht 
verfusen.

Beitrag #5644485 wurde von einem Moderator gelöscht.
Beitrag #5644833 wurde von einem Moderator gelöscht.
von int 21h (Gast)


Lesenswert?

MWS schrieb:
> Ein Bootlader programmiert den Flash über die serielle
> Schnittstelle/USB...
> Programmiert man per ISP, dann wird der Bootlader überschrieben, die
> Arduino IDE kann den Uno dann nicht mehr ansprechen.

So ganz verstehe ich es noch nicht. Den Bootloader programmiert man doch 
auch über die serielle Schnittstelle, genauso wie den Flash.
Also ist der Bootloader, wenn man mit einem ISP programmiert, erstmal 
nicht nötig.

Wenn ich aber den uC über den USB Eingang programmieren möchte (was ja 
auch seriell geschieht) dann muss im uC bereits eine kleine Software 
enthalten sein, die diese eine spezielle Kommunikation ermöglicht (Der 
Bootloader in dem Fall).
Wenn ich den uC jetzt über AVR-Studio programmieren möchte, sollte doch 
schlimmstenfalls gar nichts passieren, da der Bootloader die Bits die 
aus dem USB Ausgang kommen nicht interpretieren kann.
Wieso wird dann aber der Bootloader gelöscht?
Der sollte dann, wenn ich die Firmware geschrieben hätte, einfach nichts 
machen, fertig. Oder sehe ich das falsch?
____________________________________

Zweite Frage:
Befindet sich das Bootloader Programm jetzt im kleinen Atmega16u2 oder 
im Atmega328?
Falls es sich im Atmega16u2 befindet, was ich auch denke, ist es dann im 
Bootloader vom Atmega16u2 oder im Flash Speicher. Und dann müsste der 
Bootloader vom Atmega328 ja leer sein richtig?
____________________________________
(3. Wer/Wie/Was sind diese Fuse Bits? Falls ich das wissen muss)


Ich warte gespannt auf eure Antworten und wünsche euch noch einen 
schönen Nikolaus Tag :D

von Sebastian R. (sebastian_r569)


Lesenswert?

1. Programmspeicher und und Bootloader liegen im gleichen Flash. Hinter 
dem Programmspeicher kommen noch ein paar Bytes für den Bootloader.

Bevor du ein neues Programm aufspielst, wird der Flash komplett, 
einschließlich Bootloader gelöscht, damit keine Artefakte vom alten 
Programm bleiben, falls das neue kürzer ist.

Dementsprechend wird bei jedem ISP-Flashen auch der Bootloader 
plattgemacht.


2. Der Bootloader befindet sich im 328. Der 16U2 ist nur ein 
FT232-Ersatz, er macht also nur USB auf seriellen UART.
Du kannst den Bootloader auf dem 328 auch mit einer echten 
RS232-Schnittstelle mit Pegelwandler bespaßen.

3. Ja, die solltest du kennen, denn dort nimmst du grundlegende 
Einstellungen des Controllers vor, die für den Betrieb erforderlich sind 
und nicht in deinem Flash stehen können.

Über diese Konfiguarionsbits gibst du z.B. an, woher der Takt des 
Controllers kommt. Quarz, interner Oszillator,... Und dort wird auch 
angegeben, ob ein Bootloader vorhanden ist und wie viel Platz der 
Bootloader braucht, damit der Controller beim Start an der richtigen 
Adresse startet.

von Stefan F. (Gast)


Lesenswert?

int 21h schrieb:
> So ganz verstehe ich es noch nicht. Den Bootloader programmiert man doch
> auch über die serielle Schnittstelle, genauso wie den Flash.

Der Satz ist für mich nicht eindeutig.

Der Bootloader von dem bei AVR allgemein gesprochen wird ist ein Stück 
Software, dass man über die ISP Schnittstelle in den Flash Speicher des 
Mikrocontrollers installiert.

Der Zweck des Bootloaders besteht darin, das eigentliche Hauptprogramm 
über andere Schnittstellen, als ISP installieren zu können - 
normalerweise eine serielle Schnittstelle. Manchmal auch USB.

Wenn du einen ISP Programmieradapter verwendest, brauchst du keinen 
Bootloader.

> Wenn ich den uC jetzt über AVR-Studio programmieren möchte, sollte doch
> schlimmstenfalls gar nichts passieren, da der Bootloader die Bits die
> aus dem USB Ausgang kommen nicht interpretieren kann.

Du verwechselst dabei vermutlich zwei unterschiedliche USB Anschlüsse:
1
      USB 1-------ISP programmieradapter------------ISP 
2
PC                                                         AVR
3
      USB 2-------USB-UART Adapter (oder Chip)------UART

Das AVR/Atmel Studio unterstützt ausschließlich ISP Programmieradapter. 
Mit Bootloadern kann das AVR/Atmel Studio nichts anfangen. Die sind eher 
aus dem Arduino Umfeld bekannt.

Wie gesagt kann man aber z.B. avrdude benutzen, um Programme auf den µC 
zu übertragen. Avrdude unterstützt praktisch alle 
Schnitsttellen-Varianten und Adapter, die es dazu gibt.

Wenn man ein Programm über den ISP Anschluss installiert, geht der 
vorher Installierte Bootloader normalerweise verloren.

> Befindet sich das Bootloader Programm jetzt im kleinen
> Atmega16u2 oder im ATmega328?

Ich vermute, dass du ein Arduino Uno Board meinst. Dort dient der kleine 
ATmega16u2 als USB-UART Adapter. Das Board wird mit vorinstallierter 
Firmware geliefert, so dass dieser Chip sofort einsatzbereit ist.

Andere Boards haben an dieser Stelle meistens einen Chip von FTDI oder 
den chinesischen CH340/341.

Dein eigenes Anwendungsprogramm kommt auf den ATmega328. Dieser ist beim 
kauf schon mit einem Bootloader ausgestattet und seriell mit dem 
USB-UART Adapter (ATmega16u2) verbunden. Somit kann die Arduino IDE 
deinen Sketch seriell (über USB) drauf laden.

Das ARV/Atmel Studio kann mit dem Arduino Bootloader nichts anfangen. Es 
installiert dein Programm üblichgerweise mit einem ISP 
programmieradapter, der mit der ISP Schnittstelle des ATmega328 
verbunden ist.

Also:

1) Der ATmega16u2 hat keinen Bootloader, aber ein Programm, dass ihn zum 
USB-UART Adapter macht. Daran sollst du nichts ändern - niemals.

2) Der ATmega328 ist dein Target, darauf sollst du dein eigenes Programm 
installieren. Und zwar wahlweise über USB mit Hilfe des dort 
vorinstallierten Bootloaders oder über ISP, dann geht der Bootloader 
verloren.

Die Fuses sind im Datenblatt des Mikrocontrollers beschrieben. Ich 
empfehle Dir dazu das Tool http://www.engbedded.com/fusecalc/ . Damit 
kannst du unter Anderem einstellen, woher der µC seinen Systemtakt 
bezieht und mit welcher Taktfrequenz er starten soll. Die Taktfrequenz 
kannst du aber auch später in deinem Programm durch Schreibzugriff auf 
das OSCCAL Register ändern.

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.