Forum: Mikrocontroller und Digitale Elektronik Wie programmiert man für einen Atmega32u4?


von Nop I. (nopit)


Lesenswert?

Was ist der offizielle Weg einen Atmega32u4 zu programmieren? Gibt es da 
ein SDK oder wie läuft das?

Ich habe bisher immer nur zur Arduino IDE und den zugehörigen Libraries 
gegriffen, aber ich komme so nicht weiter, weil diese sehr schlecht bis 
gar nicht dokumentiert sind. Zumindest nicht die low-level USB-Libraries 
die ich brauche.
Z.B. 
https://github.com/arduino/ArduinoCore-avr/blob/6ec80154cd2ca52bce443afbbed8a1ad44d049cb/cores/arduino/USBCore.cpp

Vom Hersteller des Chips muss es doch eigentlich einen offiziellen, gut 
dokumentierten Weg geben für den den Mikrocontroller zu programmieren.

Oder ist das so ein Ding wo man sich das offizielle SDK und die Doku für 
10000€ kaufen muss?

von Chris R. (hownottobeseen)


Lesenswert?

Hallo,

entweder mit einem ISP-Adapter oder über den USB-Bootloader. Wenn du 
einen jungfräulichen Chip von Microchip kaufst, ist ein DFU-Bootloader 
drauf.

Flashen lässt sich dann direkt mit Atmel/Microchip Studio (ob es die 
Treiber mitbringt weiß ich nicht, es gibt noch ein Java-Tool von MCP, 
das die Treiber auf jeden Fall mitbringt) oder mit 
https://dfu-programmer.github.io/. Edit: auch beim DFU Programmer sind 
Treiber dabei.

Bei dem Arduino-Gedöns weiß ich nicht was passiert. Wenn du einen 
Arduino gekauft hast und DFU willst, bastelst du dir mit LUFA aus dem 
Beispiel am besten selber etwas.

: Bearbeitet durch User
von jo mei (Gast)


Lesenswert?

Chris R. schrieb:
> entweder mit einem ISP-Adapter oder über den USB-Bootloader.

Entweder hast du die Frage nicht verstanden, oder ich.

Nach meiner Auffassung fragte der TO nach Programmiertechniken,
also irgendwelche Vorlagen um eine eigene Applikation zu
entwickeln.

von Jack V. (jackv)


Lesenswert?

Nop I. schrieb:
> Oder ist das so ein Ding wo man sich das offizielle SDK und die Doku für
> 10000€ kaufen muss?

Dokumentation: https://www.microchip.com/wwwproducts/en/ATmega32U4

Als IDE ist wohl Microchip Studio for AVR vorgesehen, ansonsten sollte 
aber auch ein beliebiger passender Editor/eine Entwicklungsumgebung und 
avr-gcc samt Libs den Job tun.

von Chris R. (hownottobeseen)


Lesenswert?

jo mei schrieb:
> Entweder hast du die Frage nicht verstanden, oder ich.

Ja, das war dann wohl ich, sorry.

Atmel/Microchip Studio ist vermutlich noch immer der beste Einstieg, 
wenn man sich nicht um das Außenrum kümmern will.

Wenn du dich mit Lowlevel-USB nicht herumschlagen willst, lohnt sich ein 
Blick auf LUFA, auch wenn manche schimpfen, dass es Bloatware ist.

von Stefan F. (Gast)


Lesenswert?

Chris R. schrieb:
> Wenn du dich mit Lowlevel-USB nicht herumschlagen willst,

lohnt sich auch ein Blick auf Arduino. Der Arduino Leonardo besteht aus 
diesem Mikrocontroller.

von DurstBoy (Gast)


Lesenswert?


von Einer K. (Gast)


Lesenswert?

DurstBoy schrieb:
> Oder nimm etwas, was fertig ist und erprobt ist.

Ja, nee!
Ich hole mir erstmal eine Tüte Popcorn und nen Bierchen.....

von Nop I. (nopit)


Lesenswert?

In der verlinkten Dokumentation konnte ich zwar riesige Dokumente über 
das Assembler Instruction Set finden und auch ein paar generelle 
Beispiele mit C-Code. Aber keine generelle Dokumentation zu den 
C-Libraries. Also zumindest nicht mehr als ein Halbsatz pro Funktion, 
was mir reichlich wenig hilft.
Es muss doch auch ein Dokument geben in dem beschreiben ist wie man mit 
diesen Libraries arbeitet. Das kann ich nur leider nicht finden... :/

Mich mit low-level USB rumzuschlagen war schon meine Absicht. Ich 
brauche nur Libraries die vernünftig dokumentiert sind, damit ich auch 
weiß wie ich sie verwenden muss, ohne wochenlang rumzuraten, wie ich es 
mit dem Arduino Code bis jetzt getan habe.

Ob ich dann am Ende einen Arduino als Hardware nehmen werde weiß ich 
noch nicht. Ich denke der wird sich nur noch über JTAG oder so flashen 
lassen, wenn ich mit meinem USB kram fertig bin. Keine Ahnung ob Arduino 
Boards diese Pins überhaupt exposen.

Und um es nochmal klarzustellen: Es geht mir um das Programmieren im 
Sinne von Code schreiben, nicht um das Programmieren im Sinne des 
Flashens. Flashen muss ich meinen gebauten Code am Ende natürlich auch, 
aber das hat dann nciths mehr mit meiner Frage zu tun.

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Nop I. schrieb:
> Keine Ahnung ob Arduino
> Boards diese Pins überhaupt exposen.

Tun sie, und die Arduino IDE unterstützt auch die Programmierung über 
ISP.

Weder das Datenblatt noch die Doku der Bibliotheken werden dir erklären 
wie die USB Schnittstelle funktioniert. Die ist bei anderen µC ebenso.

Also nimmst du entweder eine fertige High-Level Implementierung (wie 
z.B. bei Arduino) oder lernst wie USB funktioniert. Wenn du damit durch 
bist wirst du verstehen, warum die bekannten USB-UART Chips immer noch 
beliebt sind.

Siehe https://www.mikrocontroller.net/articles/USB-Tutorial_mit_STM32

Was ist denn für dich eine "low level" Bibliothek? Was soll sie bieten, 
außer auf Register zuzugreifen? Vielleicht gibt es das gar nicht für USB 
weil der ganze Low-Level Kram IMHO bereits in der Hardware steckt.

von DurstBoy (Gast)


Lesenswert?

Mikroelektronika liefert da einige Compiler.

von Frank K. (fchk)


Lesenswert?

Nop I. schrieb:

> Es muss doch auch ein Dokument geben in dem beschreiben ist wie man mit
> diesen Libraries arbeitet. Das kann ich nur leider nicht finden... :/

So etwas hat Microchip schon gemacht, aber eben nicht mehr für die 
zugekauften AVRs (sie wollten eigentlich die Atmel ARMs, die AVRs gab es 
halt dazu), sondern nur für ihre eigenen PICs. Das ganze heißt dann MLA 
und hat brauchbare Doku und Beispiele:

https://www.microchip.com/en-us/development-tools-tools-and-software/libraries-code-examples-and-more/microchip-libraries-for-applications

Als Prozessor kannst Du z.B. etwas am unteren Ende (etwa doppelte 
Rechenleistung eines klassischen AVR)

https://www.microchip.com/wwwproducts/en/PIC24FJ128GB202

oder etwas am oberen Ende wie das hier nehmen, was gegenüber einem 
klassischen AVR etwa Faktur 5 ist.

https://www.microchip.com/wwwproducts/en/dsPIC33EP512MU814

Für die 32 Bit PICs gibts dann wieder was anderes.

fchk

PS: Atmel hat früher eher wenig in der Richtung gemacht und sich auf 
Drittanbieter verlassen, vermutlich mangels Kapazitäten. Microchip hat 
sein eigenes Zeugs eigentlich immer ganz passabel supported.

: Bearbeitet durch User
von Jonas B. (jibi)


Lesenswert?


von Irgend W. (Firma: egal) (irgendwer)


Lesenswert?

Nop I. schrieb:
> Aber keine generelle Dokumentation zu den
> C-Libraries. Also zumindest nicht mehr als ein Halbsatz pro Funktion,
> was mir reichlich wenig hilft.
> Es muss doch auch ein Dokument geben in dem beschreiben ist wie man mit
> diesen Libraries arbeitet. Das kann ich nur leider nicht finden...

Warum sollten sie diese Dokumentieren?
Das ist Bestandteil des C/C++ Standards und nichts spezielles für 
einzelnen µC. Diese gelten quasi überall.

https://en.cppreference.com/w/

Darin wirst du aber nichts dazu finden wie z.B. die Register in einem 
Atmega32u4 heisen oder für was die einzelnen Bits gut sind. Das must du 
dann in der Beschreibung für deinen konkreten µC nachschlagen.

von Karl M. (Gast)


Lesenswert?

NOP

denkt dass der AVR gcc etwas mit dem AVR µC zu tun hat und von Atmel/ 
Microchip programmiert wurde, nö ist so nicht.

Aber Du könnest Dich über das jeweilige Datenblatt:
* https://www.microchip.com/wwwproducts/en/ATmega32U4

und diesem Link:
* http://savannah.nongnu.org/projects/avr-libc/

weiterbilden.

Zum Thema USB, schau mal hier:
* https://www.lufa-lib.org/files/LUFA/Doc/130901/html/index.html

Das ist die Referenzimplementierung.

Viel Erfolg.

von Veit D. (devil-elec)


Lesenswert?

Nop I. schrieb:

> Vom Hersteller des Chips muss es doch eigentlich einen offiziellen, gut
> dokumentierten Weg geben für den den Mikrocontroller zu programmieren.

Wenn du das unbedingt machen möchtest ... unter 'Dokumente'
https://www.microchip.com/wwwproducts/en/ATmega32U4
Dort findet man ein USB DFU Bootloader Datasheet.pdf
und dazu ein megaAVR DFU USB Bootloaders.zip Softwarepaket.
Zwischendrin gibts auch jede Menge USB Dokumente.

Die Arduino Leonardo Alternative wäre ein Arduino Micro.

: Bearbeitet durch User
von Nop I. (nopit)


Lesenswert?

@Stefan
Es war auch nie meine Anforderung, dass mir irgendeine Doku vom 
Mikrocontroller das USB Protokol erklärt. Das findet man alles auf 
usb.org.
Ich muss eben nur wissen wie ich die Bibliotheken zu verwenden habe.

Eine High-Level Implementierung bringt mir nichts. Ich muss einige 
Deskriptoren auf diversen Ebenen zur Laufzeit dynamisch setzen können. 
Z.B. device-, configuration-, interface-, endpoint-, HID- und 
report-descriptor.
Und will dann beliebige Datenpakete auf report Ebene schicken.

Da arbeite ich mich jetzt schon seit Wochen mühseelig durch den 
Quellcode vom Arduino Core, aber das alles nachzuvollziehen, vor allem 
den Kram unter der report- und HID-Ebene, ist sehr schwer ohne 
Dokumentation.

Mit den Registern vom Chip werde ich hoffentlich keinen direkten Kontakt 
haben, wenn die USB-Libraries vernünftig geschrieben sind.

@Frank K.
Okay in dieser Materie stecke ich nicht drin. Ich wusste bis heute nicht 
einmal, dass es die Firma Microchip gibt.
Ich denke ich würde schon gerne bei meinem Atmega32u4 bleiben. Mein Plan 
B wäre ansonsten eher ARM+Linux gewesen.

@Jonas B. @Karl M.
LUFA klingt interessant. Die Doku sieht vielversprechend aus.

@Irgend W.
Ich habe auch nie gesagt, dass ich etwas direkt in Register schreiben 
will.
Low-level USB-Library bedeutet, das eine Abstaktion bis zur untersten 
Schicht des USB Protokolls gegeben ist und nicht, dass ich auf 
irgendwelche Register zugreifen will.

Die Libraries mit denen das USB-Protokoll abgebildet wird, sind Teil des 
"C/C++ Standards"? ... Das wage ich aber mal stark zu bezweifeln.
Kann es sein, dass wir aneinander vorbeireden?

von lda #23 (Gast)


Lesenswert?

Du bist einfach zu doof. Nicht für alles gibt es ein 
youtube-Rezeptvideo. Manche Dinge sind etwas komplizierter.
Ich zum Beispiel bin bei Schwarzwälder Kirschtorte überfordert. Ich 
schimpfe aber deswegen nicht über den Schwarzwald, sondern erkenne, dass 
ich das nicht kann. Bitte mal darüber nachdenken.

von Nop I. (nopit)


Lesenswert?

Zu deiner Torte kann ich nichts sagen, aber an deiner Fähigkeit 
Forenbeiträge richtig zu interpretieren könntest du noch arbeiten. Ich 
habe nie geschimpft. Entweder hast du meine Beiträge verwechselt oder du 
etwas hineininterpretiert was ich nie geschrieben habe.
Und warum behauptest du einfach, dass ich zu doof bin? Schau dir den 
Quellcode doch selber an, ich habe ihn oben verlinkt. Wenn du ihn 
verstehst, kannst du ja mal damit anfangen mir zu erklären wie ich 
programmatisch einen device descriptor mit mehreren configuration 
descriptors anlege.
Und was hat das ganze überhaupt mit youtube-Rezeptvideos zu tun? Es wäre 
doch ganz offenkundig Schwachsinn gewesen den Code aus dem Arduino Core 
weiter zu entschlüsseln, wenn es gut programmierte und dokumentierte 
Alternativen gibt.
Es ist auch nicht so, dass ich den Code nicht hätte verstehen können, es 
ist nur so, dass der Code die reinste Zumutung ist. Das wird dir jeder 
Softwareentwickler betätigen. Warum sollte ich mir das wochenlang antun, 
ohne zumindest mal in einem Forum zu Fragen, ob es nicht eine 
vernünftige alternative gibt.

Ach ja rate mal, ob ich in diesem Beitrag geschimpft habe. (Die Antwort 
ist nein. Ich habe nur Feststellungen gemacht und Fragen gestellt. 
Völlig neutral. Wie auch in allen Beiträgen zuvor.)

Lies doch bitte meine Beiträge noch einmal mit dieser Information im 
Hinterkopf.

von Veit D. (devil-elec)


Lesenswert?

Hallo,

> Es ist auch nicht so, dass ich den Code nicht hätte verstehen können, es
> ist nur so, dass der Code die reinste Zumutung ist. Das wird dir jeder
> Softwareentwickler betätigen.

Naja, mach mal sachte. Jeder wird dir das nicht bestätigen. Soviel weiß 
ich ganz sicher. Die müssen auch auf gewisse Abhängigkeiten im Framework 
achten. Was du sicherlich nicht machen musst. Die Arduino Codevorlage 
ist dir scheinbar die derzeit Einzigste die du öffentlich einsehen 
kannst. Und die knapp 900 Zeilen sind, wenn das alles ist, nun auch 
nicht der Hit. Also nimm dir das Controller Manual, daneben das 
Controller Headerfile und kommentiere den Code. Dann weißte was gemacht 
wurde. Danach stellste das online so wie das Arduino.cc auch gemacht 
hat. Das ist Open Source.

: Bearbeitet durch User
von Irgend W. (Firma: egal) (irgendwer)


Lesenswert?

Nop I. schrieb:
> Die Libraries mit denen das USB-Protokoll abgebildet wird, sind Teil des
> "C/C++ Standards"? ... Das wage ich aber mal stark zu bezweifeln.
> Kann es sein, dass wir aneinander vorbeireden?
Kann gut sein. Weiter oben schreibst du allgemein von Funktionen die in 
dem Beispielen von Atmel vorkommen aber nicht beschrieben sind. Und da 
es keine standardisierten USB-Funktionen gibt bin ich davon ausgegangen 
das du eher die in C/C++ definierten Funktionen gemeint hast. Ansonsten 
nenne mal konktrete Beispiele.

Nop I. schrieb:
> Low-level USB-Library bedeutet, das eine Abstaktion bis zur untersten
> Schicht des USB Protokolls gegeben ist und nicht, dass ich auf
> irgendwelche Register zugreifen will.
Also eher ein HAL (hardware abstraction layer) als ein API (application 
programming interface).

Hier wird dir wohl nicht viel anderes überig bleiben als Selberschreiben 
oder eins der duzenden von Projekten nehmen die im Internet rumschwirren 
(einige interessante wurden dir weiter oben schon genannt) und nach 
deinen Vorstellungen anpassen. Oder zu einem Hersteller wechseln der 
sowas hat (von Hardware-Hersteller Seite ist die Unterstützung bei sowas 
meist aber eher etwas mau).

ST versucht sowas mit seiner HAL Librarie schon seit längerem für ihre 
eigenen Controller. Über deren Qualität kann man vorzüglich streiten...

Das wäre aber vermutlich sowas wie du suchst, nur halt für die 
"falschen" µC.

https://www.st.com/en/embedded-software/stm32cubef4.html

von Andre (Gast)


Lesenswert?

Nop I. schrieb:
> die Bibliotheken

Wer sind denn "die"?

Also das wäre zumindest ein Anfang. Von Microchip direkt kommt 
hauptsächlich ein Chip & eine PDF mit Register Beschreibungen. Daraus 
dann ein Programm zu machen ist dein Job, du musst dir überlegen was 
wann & wo geschrieben/gelesen werden muss um eine Aufgabe zu erfüllen.

Welche Bibliothek möchtest du dafür jetzt verwenden? Wie kommst du 
darauf, dass es überhaupt eine gibt die deine Anforderungen erfüllt?

Also gerade bei so kleinen 8 Bit Controllern ist es eigentlich eher 
unüblich dass man mit vielen Bibliotheken um sich wirft. Das (und die 
grottenschlechte Doku) hat sich erst mit Arduino in den Köpfen fest 
gesetzt.

von M. K. (sylaina)


Lesenswert?

Nop I. schrieb:
> Was ist der offizielle Weg einen Atmega32u4 zu programmieren? Gibt es da
> ein SDK oder wie läuft das?

Also ich benutze einen normalen Texteditor (BBEdit) und lasse mittels 
AVR-GCC das Hexfile erstellen welches ich dann mit AVRDUDE in den 
Mikrocontroller lade.

Nop I. schrieb:
> Ich habe bisher immer nur zur Arduino IDE und den zugehörigen Libraries
> gegriffen, aber ich komme so nicht weiter, weil diese sehr schlecht bis
> gar nicht dokumentiert sind.

Eigentlich ist bei Arduino alles sehr gut dokumentiert ;)

Nop I. schrieb:
> Zumindest nicht die low-level USB-Libraries
> die ich brauche.

USB ist auch nicht grade ein Anfänger-Level.

Nop I. schrieb:
> Vom Hersteller des Chips muss es doch eigentlich einen offiziellen, gut
> dokumentierten Weg geben für den den Mikrocontroller zu programmieren.

Nennt sich Datenblatt.

Dein Post erscheint mir schwer nach Anfänger. Du hast offenbar auch 
schon andere Mikrocontroller-Projekte mit Hilfe von der Arduino-IDE 
umgesetzt. Mein Tipp: Schnapp dir eines dieser Projekte und setze es mal 
mit einer anderen IDE bzw. mit anderen Mitteln um, z.B. dem Atmel Studio 
um. ;)

von Ich (Gast)


Lesenswert?

Atmel Software Framework

von Stefan F. (Gast)


Lesenswert?

Nop I. schrieb:
> Eine High-Level Implementierung bringt mir nichts

Dachte ich mir schon, sonst hättest du hier nicht gefragt.

Nop I. schrieb:
> Die Libraries mit denen das USB-Protokoll abgebildet wird

Weche Bilbiliotehekn genau meist du denn mit
> Arduino IDE und den zugehörigen Libraries gegriffen
und
> Die Libraries mit denen das USB-Protokoll abgebildet wird
? Die ASF sind es offenbar nicht, und die avr-libc auch nicht.

Wenn du sie mal benennen würdest, kann dir vielleicht jemand mit einem 
Link zur Doku oder einem Buchtipp helfen.

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.