Forum: Mikrocontroller und Digitale Elektronik Arduino Mega 2560, C, Programmieren


von Max P. (eizo)


Lesenswert?

Hallo
ich wollte mir ein Arduino Mega 2560 Board kaufen und habe aber noch 
folgende Fragen dazu, die mir ein Arduino Nutzer bestimmt schnell und 
einfach beantworten kann.

1. Kann man mit WinAVR GCC im Atmel Studio diesen Controller (AT Mega 
2560)Programmieren? Ich habe gelesen, dass wohl der Speicher nicht 
komplett genutzt werden kann. Was muss ich beim Compilieren beachten 
bzw. einstellen damit alles fehlerfrei funktioniert? Prinzipiell würde 
mir auch die Hälfte des Speichers reichen, die Frage ist nur ob der 
Compiler das fehlerfrei mitmacht.

2. Wenn ich das fertige HEX File habe, kann ich es über die Arduino 
Software über USB an das Board schicken oder welche alternative Software 
würde funktionieren um die Bootloaderprogrammierung zu nutzen. Das Board 
besitzt ja USB über einen zusätzlich programmierten AT Mega8 der wohl 
ein standardisiertes Protokoll nutzt. Möchte unbedingt über USB 
programmieren und nicht die ISP Schnittstelle nutzen müssen.

Ich hoffe das ich das Problem verständlich mitteilen konnte.

von Thomas E. (thomase)


Lesenswert?

Fangen wir mal vorne an.

Programmieren mit AVR Studio? -  ja

Kompletter Speicher kann nicht genutzt werden? - Blödsinn

Einstellungen? - Die üblichen Projekteinstellungen, wie bei jedem 
anderen Controller auch

Hexfile mit Arduino Bootloader laden? - Soll irgendwie gehen.

Die Arduino Software ist irgendein propietärer Kram, vielleicht auch 
Java, keine Ahnung jedenfalls kein C.
Wen das nicht stört, der kommt da sicher auch mit klar. Ist 
wahrscheinlich gar nicht so schlecht, zumal es da jede Menge Beispiele 
gibt.

Für mich kam aber nur AVR Studio und richtiges C in Frage.

Der Bootloader arbeitet mit dem STK500-Protokoll. D.h. man soll 
grundsätzlich vom AVR-Studio das Ding mit dem Bootloader uploaden 
können.
Oder über Kommandozeile mit Avr-Dude.

Der Bootloader startet nach dem Reset und springt nach einem Timeout, 
einigen ms oder so, in die Applikation, also auf Adresse 0x00000. Das 
Problem ist, daß zum downloaden der Chip resetted werden muß und zwar 
über die DTR-Leitung des USB-to-Serial Controllers.Das macht das 
AVR-Studio, bzw. der Avr-Dude, aber nicht.

Manuelles Reset bringt nichts, da der Timeout zu kurz ist.

Irgendeinen Hack habe ich irgendwo im Internet gefunden, womit das gehen 
soll. Habe ich kurz ausprobiert,funktionierte aber nicht. Hat mich dann 
allerdings aber auch nicht weiter interessiert, da ich das Board ohnehin 
über JTAG programmiere (und debugge).

Google mal nach "Arduino STK500 Bootloader", ich glaube damit habe ich 
das auch gefunden. Keine Ahnung mehr, wo ich das war.

Es gibt aber hier einen Bootloader mit Anleitung in C, den man ohne 
weiteres auch auf dem Arduino installieren kann. Damit funktioniert es 
wunderbar. Und man weiß wenigstens, warum es funktioniert.

Warum willst du ISP nicht benutzen? Die Fuses kannst Du mit 'nem 
Boot-loader ohnehin nicht verändern.

von Max P. (eizo)


Lesenswert?

Erstmal vielen dank für die Antwort.

Bezüglich des Speichers steht zum Beispiel unter
http://www.watterott.com/de/Arduino-Mega-2560

# 256KB Flash (im Moment nur 128kb nutzbar, da der GCC Compiler begrenzt 
ist)

Das war der Grund warum ich frage. Das Problem gibt es also nicht mehr?
Wie du selber schreibst möchte ich auch mit C und AVR Studio 
programmieren. Die Arduino-Software hätte ich halt maximal zum 
Programmieren genutzt. Hatte ja die Hoffnung, dass man da als Quelle ein 
Hexfile nehmen kann und somit sogar die von dir genannten Reset-Leitungs 
Probleme umgehen kann. Wäre halt schade wenn ich erst mal einen neuen 
Bootloader suchen muss das sollte ja wenn möglich out of the box 
funktionieren.

Den ISP würde ich nur anfangs nutzen um die Fuses zu programmieren, 
danach soll das Gerät sozusagen von jeden beliebigen Notebook aus mit 
neuer Firmware bestückbar sein, ohne einen extra Programmierdongle 
nutzen zu müssen. Außerdem kommt das Board in ein Gehäuse wo ich keine 
extra ISP Anschluss raus führen möchte bzw. jedes mal das Gehäuse öffnen 
muss.

von Thomas E. (thomase)


Lesenswert?

Also das mit den 128K könnte daher kommen, daß der 2560 tatsächlich nur 
128K Speicher hat - und zwar 128K Words(= 256K Bytes). Da wird öfter mal 
was durcheinander gebracht.

mfg.

von Max P. (eizo)


Lesenswert?

Aber die würden es ja nicht auf der Internetseite schreiben wenn es 
nicht tatsächlich Probleme gäbe.
Beitrag "Volle Adressierbarkeit (256k) im Programmspeicher bei Mega 2560 ?"
Dort steht was zu eventuellen Problemen.

Also nochmal an Arduino Erfahrene. Ist es möglich mit der Arduino GUI 
"fremde" Hex Files zu programmieren also zb. ein Arduino Projekt anlegen 
und kompillieren, dann Hex File austauschen und schließlich 
Programmieren über die Arduino Software?

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Tipp: Frag zusätzlich in einem Arduino Forum nach bzw. suche dort vor 
der Frage nach entsprechendem. So viele Arduino-User, und speziell auch 
noch zu diesem rel. neuen fetten Board, gibt es hier nicht.

von Thomas E. (thomase)


Lesenswert?

Jetzt fällt es mir wieder ein.

Es gibt in der Tat ein Problem mit dem EICALL-, bzw. EIJMP-Befehl, der 
vom Compiler nicht richtig umgesetzt wird.

Das I steht für Indirekt, das E für Enhanced

Die Controller <= 128K kennen diesen Befehl gar nicht. Die kennen nur 
ICALL bzw. IJMP. Genau wie der Compiler auch.

Dazu muß neben dem normalen Adressregister (16 Bit) noch das 
EIND-Register gesetzt werden, damit die oberen 128K adressiert werden. 
Jetzt sind wir auch wieder bei den Word-Adressen.

Lässt sich lösen, indem man die Funktionen, die von ausserhalb dieser 
beiden Blöcke aufgerufen werden, mit einem Funktionspointer aufruft und 
vorher das EIND per Hand setzt. Wenn das Programm denn so lang wird.

In jedem Falle braucht man das, um vom Bootloader in die Applikation zu 
springen (und umgekehrt).

mfg.

von me (Gast)


Lesenswert?

Zum ATmega2560 kann ich nichts sagen.
Aber Arduino nutzt WinAVR und avrdude. Wenn du also mit C entwickeln 
willst, kannst du gleich WinAVR und einen Editor deiner Wahl nutzen. 
Wenn du schon ein hex-File hast, kannst du es direkt mit avrdude 
flashen.
Hex-Files mit der Arduino-GUI laden und flashen funktioniert meines 
Wissens nicht.
Allerdings muss der Reset nicht zwingend mit der DTR-Leitung erfolgen. 
Ein manueller Reset funktioniert ebenfalls poblemlos.

von Max P. (eizo)


Lesenswert?

Die Vorgängerversion des Boards Arduino Mega (AT Mega 1280) wäre unter 
Umständen also besser geeignet? Der Chip sollte mit GCC nicht diese 
Probleme besitzen?!?!? und auch der USB Chip ist ein ftdi, der wohl 
weniger speziell angepasst ist mit zusätzlichen Steuerleitungen. Ich 
habe bloß noch keine günstige Bezugsquelle dafür gefunden. Wenn ich das 
so höre, lohnt sich der Kauf des aktuellen 2560 Boards wohl nicht, wenn 
ich nicht die Arduino Software nutzen möchte. Schließlich möchte ich für 
den Preis nicht erst solch üppigen Probleme lösen müssen. Kennt noch 
jemand ein Board mit AT Mega 1280 und USB, optional noch mit SD-Slot?

von Karl H. (kbuchegg)


Lesenswert?

Bis deine Programm so groß werden, dass du tatsächlich in dieses Problem 
läufst, ... fällt noch viel Schnee. Und zwar in der Wintersaison 
2011/2012

von Max P. (eizo)


Lesenswert?

Das mag gut sein aber schön ist es trotzdem nicht. Ich weiß ja nicht 
welche Probleme das noch weiter mit sich führt besonders im Bezug 
darauf, wenn ich eventl. einen alternativen Bootloader anpassen müsste. 
Hab ja oben schon erwähnt das mir ansonsten auch der halbe Speicher 
reichen würde, deswegen interessiert mich ja auch das Vorgängerboard, 
welches wohl aber sogar teurer ist als der "größere" Nachfolger.

von Thomas E. (thomase)


Angehängte Dateien:

Lesenswert?

Nur nicht gleich die Flinte ins Korn werfen.

Bootloader.hex ist der Bootloader (kaum zu glauben)
Burnit3.exe das dazugehörige PC-Programm (XP).

mfg.

von Max P. (eizo)


Lesenswert?

Danke für den Bootloader. Werd mir das aber erstmal gründlich überdenken 
ob ich nicht doch lieber das Vorgängerboard nehme. Ich frag nochmal in 
einem Arduino Forum bezüglich der Programmierung etc.

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.