PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Meine ersten Schritte mit einem Atmega auf Steckbrett ...



knuspel
20.03.2016, 22:56
Hallo! Ich bin Anfänger und hab eine Grundschaltung mit Atmega32U4-AU auf einem Steckbrett, die soweit auch funktioniert. Meine Frage ist, wie bringe ich die Grundschaltung dazu, von meinem Betriebsystem als eigenständiges USB Gerät erkannt zu werden? Ich kann das Steckbrett zwar mit dem ISP programmer flashen, möchte nun aber ohne den ISP programmer das Steckbrett direkt flashen (mit Atmel FLIP). Wie geht das? Ich habe nichts verändert, alle fuses auf den default settings, und schreibe den Code in Bascom. Zum flashen benutze ich Avrdude bzw. Atmel Flip.

VG, knuspel

i_make_it
21.03.2016, 09:24
http://www.mikrocontroller.net/topic/333177

Vieleicht hilft Dir das weiter.

knuspel
21.03.2016, 13:33
Hallo i_make_it. Danke, aber meine Frage ist eine andere. Damit ich die USB-Schnittstelle des Atmega32u4 nutzen kann, muß er ja erst einmal vom Betriebsystem als Gerät erkannt werden. Aber das wird er nicht. Ich habe diverse Schaltungen und nie wird er erkannt. Ich verstehe das nicht, wo liegt da die Ursache? Soweit ich weiß wird er mit einem bootloader geliefert.

i_make_it
21.03.2016, 15:57
Hast Du den Bootloader aktiviert?
http://www.atmel.com/Images/doc7618.pdf
(ab Seite 3)
Also entweder im Programm oder per Fuse.

knuspel
21.03.2016, 16:05
Hallo i_make_it, ja, hier weiß ich nicht weiter. Wenn ich HWB (mit 1k) und RST nach Masse ziehe, dann müßte ich den Bootloader aktivieren, oder? Leider passiert da nichts! Was muß ich denn konkret tun?

Nachdem ich das hier gelesen habe:

The Boot Reset Fuse (BOOTRST) can be programmed so that the Reset
Vector points to the Boot Flash section start address after reset.
habe ich auch versucht mit dem Befehl avrdude -c USBasp -p m32u4 -U hfuse:w:0x98:m das BOOTRST bit (Select Reset Vector) zu setzen. Das macht avrdude brav. Und sobald ich RST gg. Masse ziehe resettet er normal. Aber das Betriebsystem denkt immer noch nicht daran den Atmega als USB-Gerät zu entdecken.

Kann ich zumindest auf irgendeine einfache Weise prüfen, ob auf meinem Atmega überhaupt ein Bootloader drauf is?

knuspel
22.03.2016, 15:47
Was kann ich jetzt tun?

i_make_it
22.03.2016, 20:06
Ich sag mal jetzt kommen wir in den Bereich wo Bilder und Schaltpläne von Deinem Aufbau nützlich werden.
Hast Du z.B. an D+ und D- je einen 22Ω Wiederstand zwichen den Ports (3 & 4) und der USB Buchse (2 & 3)?

knuspel
22.03.2016, 22:02
Hallo, ja diese 22 Ohm Dataline Widerstände habe ich, hier der Schaltplan:

31453

Ich hab den Bootloader jetzt auch nochmal als Datei von Atmel heruntergeladen und auf den Chip geschrieben. Hat alles geklappt. Sogar Programmcode läuft tadellos. Nur komme ich immer noch nicht in den bootloader mode. Warum!? Ich drücke den Reset-Knopf und es passiert nichts. HWB ist permanent mit 1k nach GND gezogen. Was mache ich falsch? Eigentlich sollte das Ding schon vom Betriebssystem als neues Gerät erkannt werden wenn man es bloß in den USB-port steckt .., so berichten es mir jedenfalls andere Leute, die den Atmega32u4 benutzen.

i_make_it
23.03.2016, 11:25
Hm, was für ein OS hast Du denn?
Bei Windows könnte man mal den Gerätemanager starten und da USB-Controller aufklappen.
Dann mal anstecken und sehen ob sich überhaupt was tut.
Dann gibt es für Windows noch MUTT (Microsoft USB Test Tool)
https://msdn.microsoft.com/en-us/library/windows/hardware/dn376877%28v=vs.85%29.aspx
Damit kann man (zumindest bei Windows) mal Rechnerseitig testen ob da überhaupt eine Kommunikation möglich ist.

knuspel
23.03.2016, 16:30
Hallo, habe Windows 7. Ich hab es mal mit dem LPM Tool (was im MUTT Paket enthalten ist) versucht. Wenn ich irgendein USB-Gerät, z.B. den ISP Programmer, in einen USB-Port stecke dann wird es auch erkannt, was das LPM Tool bestätigt, hier das Bild dazu http://imgur.com/wjm3N7v Soweit alles in Ordnung. Wenn ich nun in denselben Port das Steckbrett anschliesse, dann wird nichts erkannt! Warum? Die Steckbrett-Schaltung funktioniert zumindest kann ich problemlos einen Code ausführen (LED blinking). Warum wird das Steckbrett dann nicht als USB GErät erkannt?

Und was sind die Voraussetzungen, damit ein Gerät als USB-Gerät erkannt wird? Ich fange mal mit dem an, was ich weiss:
1. Voraussetzung: das Gerät hat eine funktionierende Schaltung, die außerdem ausreichend mit Spannung versorgt ist
2. Voraussetzung: das Gerät sollte zumindest über die Datalines D- und D+ mit einem USB-Port verbunden sein.
3. Voraussetzung: zwischen beiden Datalines sollte sich in der Schaltung jeweils ein 22Ohm Widerstand befinden
4. Voraussetzung: im Mikrocontroller sollte sich ein Programm oder Bootloader befinden, der einen USB-handshake mit dem PC macht
5. Voraussetzung: der USB-handshake muss irgendwie getriggert werden. Beim Atmega in der Regel indem man in den bootloader mode geht.
6. Voraussetzung: .. noch irgendwas?

Vielleicht ist irgendein Problem mit den Datalines? Gibt es einen Code mit dem ich die Datalines auf Funktionsfähigkeit überprüfen kann?

knuspel
23.03.2016, 21:42
Update: Habs jetzt gelöst :rolleyes:, es war ein fehlender 1µF Kondensator am Pin UCAP. Den hatte ich auf dem Steckbrett nicht und der muß anscheinend unbedingt sein, damit USB funktioniert!

i_make_it
24.03.2016, 08:00
Schön das Du es lösen konntest.
im Datenblatt
http://www.atmel.com/images/atmel-7766-8-bit-avr-atmega16u4-32u4_datasheet.pdf
auf Seite 6 (2.2.12).
Steht tatsächlich "nur" sollte (Should) und nicht muß.
Man könnte also auf die Idee kommen das man den auch sparen kann.
Gut zu wissen.

knuspel
24.03.2016, 13:01
Ja, dieser Satz im Datenblatt
Ucap capacitor should be 1μF (±10%) for correct operation
ist mißverständlich. Vielleicht meint Atmel damit, daß der Wert auch anders sein kann. Aber daß da überhaupt ein Kondensator vorhanden ist, ist für das Funktionieren der USB-Schnittstelle kein Kann sondern ein Muß. Ich meine Datenblätter sind ja an sich schon maulfaul, aber wenn dann auch noch die paar Worte mißverständlich sind, die es abgibt, ist das suboptimal.