Forum: Mikrocontroller und Digitale Elektronik Erster Programmierversuch von atmega32u2 funktioniert nicht


von Teddy M. (teddych) Benutzerseite


Lesenswert?

Hallo zusammen

Ich bin gerade dabei meinen ersten zu programmieren. Versuche es 
zumindest.

Voraussetzungen:
atmega32u2
AVR ISP MKII
AVR Studio 6

Dabei erhalte ich von AVR Studio 6 folgenden Fehler:
23:20:23: [ERROR] Failed to enter programming mode. ispEnterProgMode: 
Error status received: Got 0xc0, expected 0x00, ModuleName: TCF (TCF 
command: Device:startSession failed.)

Als AVR-Neuling habe ich folgende Vermutung:
Entweder ich habe den atmega falsch an den MKII angeschlossen.
Oder der atmega ist futsch, noch bevor er das erste Mal gearbeitet hat.

Was muss ich am atmega/MKII alles anschliessen/verbinden, damit es 
klappt (Eine wirklich simples Schema dazu habe ich nirgends gefunden, 
und das was ich gefunden habe widerspricht sich teilweise?!?)?

Muss ich davon ausgehen, dass der atmega defekt ist?

AVcc und UVcc habe ich im Moment an Vcc angeschlossen. Ist das sinnvoll, 
bzw. nötig (um das teil zu programmieren)?

Danke und Gruss
Teddy

von Peter R. (pnu)


Lesenswert?

Da der atmega32U2 mitsamt USB-bootloader ausgeliefert wird, der zu 
atmel-Flip passt, wird er normalerweise per USB-Anschluss mithilfe von 
Flip programmiert, ein MKII ist da nicht nötig. anstatt des 
ISP-Anschlusses muss dann halt die USB-Beschaltung vorhanden sein.

Fürs erste Programmieren per ISP braucht man:
alle Gnd-Anschlüsse, alle VCC und AVCC (komplette Spannungsversorgung)
Stützkondensator(en)
(ISP-Stecker):reset, mo, mi, sck,gnd

Mehr eigentlich nicht, da im Auslieferungszustand der interne 
RC-Oszillator läuft.

Aber, Vorsicht: beim Beschreiben per ISP wird im Allgemeinen der 
komplette Chip gelöscht. Dabei geht der auf dem Chip mitgelieferte 
USB-Bootloader verloren.

von Granatenvoll (Gast)


Lesenswert?

Du hast es bestimmt falsch angeschlossen.

von Teddy M. (teddych) Benutzerseite


Lesenswert?

Peter R. schrieb:
> Da der atmega32U2 mitsamt USB-bootloader ausgeliefert wird, der zu
> atmel-Flip passt, wird er normalerweise per USB-Anschluss mithilfe von
> Flip programmiert, ein MKII ist da nicht nötig. anstatt des
> ISP-Anschlusses muss dann halt die USB-Beschaltung vorhanden sein.

Ach so. Das gibt bei mir ein paar Folgefragen:

Sind denn die Fuses so gesetzt, dass per ISP gar nicht programmiert 
werden kann?

Kann Flip ins Atmel Studio integriert werden?

Muss ich bei der Programmierung etwas beachten, wenn ein Boot Loader 
schon auf dem Chip ist?

Kann man einen Boot Loader nachträglich wieder auf den Chip pflanzen, 
falls man diesen gelöscht haben sollte?

Ich habe irgendwie den Eindruck, dass ich die Grundlagen zu Boot Loadern 
noch nicht ganz kappiert habe. Gibt es hier gute 
Beschreibungen/Einführungen/Howtos?

Danke und Gruss
Teddy

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Peter R. schrieb:
> Mehr eigentlich nicht, da im Auslieferungszustand der interne
> RC-Oszillator läuft.

Falsch.

Der RC-Oszillator ist zu ungenau für die USB-Taktrate.  Da aber
gewollt ist, dass man ihn per USB und Bootloader betreiben kann,
kommen diese Controller voreingestellt auf externen Quarz daher.
Man muss also einen 8-MHz-Quarz (und die Lastkondensatoren) oder
ggf. einen entsprechenden Keramikresonator anschließen, wobei die
Genauigkeit der üblichen Keramikresonatoren eigentlich auch schon
zu schlecht ist für Fullspeed-USB.

Außerdem kommt er mit gesetzten Lockbits daher, damit man den
Bootloader nicht auslesen kann.  Man sollte also nicht erwarten,
dass man per ISP mehr als die Fuses und die Signature gelesen
bekommt, bevor man das erste chip erase ausgeführt hat.

Steht natürlich alles im Datenblatt …

Teddy M. schrieb:
> Kann man einen Boot Loader nachträglich wieder auf den Chip pflanzen,
> falls man diesen gelöscht haben sollte?

Ja, so man denn ein Hexfile dafür hat.  Der originale Atmel-Bootloader
ist meines Wissens nicht separat zu bekommen.  Allerdings gibt's bei
LUFA einen Rewrite dafür.

von Andreas K. (hammerhead)


Lesenswert?

Jörg Wunsch schrieb:
> Der RC-Oszillator ist zu ungenau für die USB-Taktrate.  Da aber
> gewollt ist, dass man ihn per USB und Bootloader betreiben kann,
> kommen diese Controller voreingestellt auf externen Quarz daher.
> Man muss also einen 8-MHz-Quarz (und die Lastkondensatoren) oder
> ggf. einen entsprechenden Keramikresonator anschließen, wobei die
> Genauigkeit der üblichen Keramikresonatoren eigentlich auch schon
> zu schlecht ist für Fullspeed-USB.

Fast richtig.

8 oder 16MHz als Taktquelle.


> Sind denn die Fuses so gesetzt, dass per ISP gar nicht programmiert
> werden kann?

Nein, aber wenn du auch nur einmal per ISP programmierst oder auch nur 
die Fuses setzt, löscht er den Flash, also auch den Bootloader.
Der Atmel Bootloader ist closed source, die alternativen sind LUFA oder 
der vom Teensy (Soweit ich mich erinnere, ist da nicht der Atmel-loader 
drauf)

> Kann Flip ins Atmel Studio integriert werden?

Nicht wirklich, es ist ne eigenständige Applikation.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Andreas Kist schrieb:
>> Man muss also einen 8-MHz-Quarz (und die Lastkondensatoren) oder
>> ggf. einen entsprechenden Keramikresonator anschließen, ...
>
> Fast richtig.
>
> 8 oder 16MHz als Taktquelle.

Hatte ich auf die Schnelle nicht gefunden.  Gibt's da eine automatische
Erkennung?

von Teddy M. (teddych) Benutzerseite


Lesenswert?

Ich bin nun dabei die USB-Schnittstelle zu verkabeln. Dabei bin ich auf 
folgendes Hinderniss gestossen:

Ich habe vor die Schaltung wie in Figure 20-3 zu verwenden (Datenblatt 
atmega32u2, Seite 186).

UVss und Vss interpretiere ich noch als UGND und GND.

Bei UDM und UDP werde ich jedoch langsam stutzig. UDM interpretiere ich 
als D- und UDP als D+. Dann ist aber gegenüber dem controller das + und 
- vertauscht. Muss das so sein?

Danke und Gruss
Teddy

von Andreas K. (hammerhead)


Lesenswert?

Jörg Wunsch schrieb:
>> 8 oder 16MHz als Taktquelle.
>
> Hatte ich auf die Schnelle nicht gefunden. Gibt's da eine automatische
> Erkennung?

Eeh, ich hab mich da etwas verlesen, das sind die maximalangaben.
Im Datenblatt steht bei 8.1.4, dass der USB-Teil nen eigenen PLL hat der 
bei 48 MHz rennt. Der Quarz, den man anschließt, ist nur für den Kern, 
da ists "egal", was du nimmst, es muss nur einer ran.

Teddy M. schrieb:
> Bei UDM und UDP werde ich jedoch langsam stutzig. UDM interpretiere ich
> als D- und UDP als D+. Dann ist aber gegenüber dem controller das + und
> - vertauscht. Muss das so sein?

Uff...Also ich hab mir damals einfach die Pinbelegung von einer USB-Mini 
Buchse angeguckt und dort dann D- an D- und D+ an D+ verkabelt.
Um das genauer sagen zu können, müsste ich mir meine Schaltpläne und 
Layouts angucken.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Andreas Kist schrieb:
> Der Quarz, den man anschließt, ist nur für den Kern,
> da ists "egal", was du nimmst, es muss nur einer ran.

Und womit wird dann die PLL gesteuert?

Ich weiß, dass bei ARMs durchaus eine Logik vorhanden ist, die beim
Start den Takt des angeschlossenen Quarzes bewertet und dann die
PLL-Einstellungen entsprechend vornimmt, sodass man wirklich mit
zwei verschiedenen Quarzfrequenzen arbeiten kann.  Mir ist aber
nichts bekannt, dass die kleinen AVRs ein ähnliches Feature hätten.

Prinzipiell könnte der DFU-Bootloader sowas natürlich implementieren,
aber das scheint alles nicht sehr gut dokumentiert.  Bis zum Beweis
des Gegenteils würde ich daher davon ausgehen, dass der Bootloader
nur mit einem angeschlossenen 8-MHz-Quarz läuft.

von Teddy M. (teddych) Benutzerseite


Lesenswert?

Andreas Kist schrieb:
> Uff...Also ich hab mir damals einfach die Pinbelegung von einer USB-Mini
> Buchse angeguckt und dort dann D- an D- und D+ an D+ verkabelt.
> Um das genauer sagen zu können, müsste ich mir meine Schaltpläne und
> Layouts angucken.

Ich wäre dir dankbar, wenn du schnell einen Blick auf deine Pläne werfen 
könntest.

Danke und Gruss
Teddy

von Rene (Gast)


Lesenswert?

Sali Teddy,

ich denke, dass sollte Deine Frage beantworten:

http://electronics.stackexchange.com/questions/21423/newbie-atmega32u2-usb-powered-application-which-variant

Grüsse,
R.

von Rene (Gast)


Lesenswert?

Wenn Du Deinen µC über die USB Schnittstelle versorgen möchtest gelten 
die beiden Schemas unter 20.3.1 im Datenblatt. Möchtest Du den µC von 
extern versorgen gelten die Schemas 20.3.2, je nach dem wie hoch Deine 
Versorgungsspannung ist.

Grüsse,
R.

von Teddy M. (teddych) Benutzerseite


Lesenswert?

Rene schrieb:
> ich denke, dass sollte Deine Frage beantworten:

Nö, hilft mir nicht weiter. Mir geht es nicht um die Stromversorgung des 
uC, sondern um den Anschluss von D+ und D- (bzw. was ist mit UDM und UDP 
gemeint?).

von Rene H. (Gast)


Lesenswert?

D+ = UDP
D- = UDM

Bei externer Versorgung.

Grüsse,
R.

von amateur (Gast)


Lesenswert?

>Muss ich bei der Programmierung etwas beachten, wenn ein Boot Loader
>schon auf dem Chip ist?

Es gibt ein paar Bibliotheken, die bei Verwendung eines Bootloaders mit 
eingebunden werden sollten. Sind beim Studio 6 bzw. ASF mit dabei.
Irgendwas mit trampoline_xx.h bzw .asm.
Was für spezielle Parameter hier benötigt werden weiß ich nicht. Hängt 
vom Bootloader bzw. dessen Größe ab.

von Andreas K. (hammerhead)


Lesenswert?

amateur schrieb:
> Es gibt ein paar Bibliotheken, die bei Verwendung eines Bootloaders mit
> eingebunden werden sollten. Sind beim Studio 6 bzw. ASF mit dabei.
> Irgendwas mit trampoline_xx.h bzw .asm.
> Was für spezielle Parameter hier benötigt werden weiß ich nicht. Hängt
> vom Bootloader bzw. dessen Größe ab.

Wenn ich mich gerade nicht irre, braucht man die nur, wenn man aus dem 
eigenen Code in den Bootloader hopsen will, aber wer braucht sowas 
schon?


Für den normalen Betrieb braucht man nur die üblichen(avr/io.h, 
util/delay.h, eventuell avr/interrupt.h). Zusätzlich noch avr/power.h, 
dann kann man z.B. den Prescaler von der Clock im laufenden Betrieb 
umstellen.

von amateur (Gast)


Lesenswert?

@Andreas
Wieder was gelernt.

Ich habe die Teile, weil ich dachte der Compiler benötigt sie, um dem 
Bootloader nicht in die Quere zu kommen, mit eingebunden.
Habe zum Schaufeln immer den FLIP verwendet.

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.