PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : AtMega328PU mit Arduino-Bootloader beschreiben - aber wie?



Cysign
29.03.2013, 20:10
Hallo alle miteinander,

ich hab heute einige Stunden damit verbracht, unseren Austausch-AtMega328PU für ein Arduino Uno-Board zu beschreiben - der originale 328er hatte bei ein paar Versuchen was abbekommen...
Leider haben wirs nicht geschafft, den µC zu überreden, Daten zu fressen.

Hierbei haben wir versucht:

-AVRISP MKII übers Breadboard an den 328er ran, Standard-Jungo-Treiber: Arduino-IDE findet den Programmer nicht.
-AVRISP mit alternativen Treibern: Arduino-IDE findet den Programmer nicht.

Allerdings sind die Jungo-Treiber auf meinem Rechner sauber installiert, denn AVR Studio 6 findet den Programmer problemlos.

Dann haben wir versucht von einem zweiten Rechner aus mit alternativen Treibern den 328er über den AVRISP MKII zu beschreiben, was ebenfalls nicht funktioniert hat.
Allerdings hat die Arduino-IDE in diesem Fall zumindest schonmal den MKII gefunden. Allerdings meinte die IDE, dass sie eine "bad connection" hätte.

Unser letzter Versuch war dann über einen Arduino Nano den AtMega328 zu beschreiben. Das scheiterte sowohl auf dem Breadboard als auch auf der Uno-Platine über den ISP-Anschluß.

Bei den ersten Versuchen (MKII über Arduino-IDE) hatten wir an AVCC des 328ers VCC nicht angelegt (ich wusste nicht, dass er zwei VCC-Anschlüsse hat...). Allerdings hat die IDE ja den Programmer schon nicht gefunden.

Der 328er hatte immer 5,15V von einem Handynetzteil anliegen und einen 100nF-Kondensator zur Glättung. Außerdem gabs zwischen VCC und Reset nen 10k-Pullup (das hatte bei meinem AtTiny imemr so funktioniert, in den Anleitungen des 328ers wurden 4,7K vorgeschlagen).
Wie sollten wir die Sache also am besten weiter versuchen?

DanielSan
30.03.2013, 09:29
Hi,

ich versuche gerade auch einen Mega328P mit dem Arduino Bootloader zu verheiraten. Den Bootloader hab ich erfolgreich flashen können. Was ich etwas komisch finde ist, das ich auf meinem USBASP (Ulrich Radig) den Jumper für geringe geschwindigkeit gesteckt haben muss. Der Mega328P hat aber die Fuses auf 8MHz internen takt. Evtl ist das bei euch auch das Problem. Mit den deinen Programmern kenne ich mich nicht aus, aber kann man da die geschwindigkeit irgendwie einstellen?

Da ich den Bootloader erfolgreich flashen konnte, es aber trotzdem nicht funktioniert, vermute ich das ich noch Fuses für die Startsprungaddresse setzen muss. Da muss ich nochmal gucken welche das sind und wie sie gesetzt sein müssen. Das werdet ihr ja möglicherweise auch noch machen müssen.

Gruß Daniel

Hubert.G
30.03.2013, 10:13
Laut Datenblatt und auch meiner Erfahrung wird der Mega328 mit 1MHz Takt ausgeliefert.
The device is shipped with internal RC oscillator at 8.0MHz and with the fuse CKDIV8 programmed,
resulting in 1.0MHz system clock.
Mit einem AVRISP MKII würde ich das AVR-Studio oder AVRDude für das programmieren des Bootloader verwenden.

Cysign
30.03.2013, 11:04
Ja, das ist auch etwa meine Erfahrung beim ATiny2313. Den konnte ich auch nur mit 250kHz(oder weniger?) programmieren.

Dann wirds bei uns wohl genau dran liegen. Denn weder über den Arduino Nano noch über den MKII konnten wir über die Arduino-IDE irgendwo die Geschindigkeit einstellen.

Wie flashe ih denn den Bootloader über da Studio? Ist das eine fertige Projektdatei, die ich mir runterlden kann, die ich lediglich aufspielen muss? Oder müsste ich das irgendwie aus der ArduinoIDE extrahieren?

Hubert.G
30.03.2013, 11:27
Den Bootloader gibt es als *.hex Datei, die braucht man über das AVR-Studio nur einspielen. In den Fuses die Bootgröße und Bootrst einstellen.

DanielSan
30.03.2013, 11:34
Ich habe die Bootloader.hex eingespielt und dann die Fuses eingestellt. Jetzt ist mein Atmega tot... Misst! Hab die Bootgröße auf 2048 gesetzt und den Bootreset enabled.

DanielSan
30.03.2013, 13:47
So habe jetzt nochmal rumprobiert. Der eine Atmega328 ist hin, hab ihn wohl verfust.

Naja gut das ich noch mehr davon habe.

Ich habe den Bootloader jetzt installier, kann den Atmel aber nur ein mal per rs232 flashen. Der Bootloader wird also immer überschrieben. Muss ich dann das Bootrst Fuse setzen?

---------Update----------

habs gesetzt aber beim 2ten Programmieren über die serielle Schnittstelle kommt immer die Fehlermeldung:

avrdude: stk500_getsync(): not in sync: resp=0x00

Hubert.G
30.03.2013, 15:15
Wie sind denn deine Fuse-Einstellungen?
Bootloadergröße für den 328 sollte 256 Words sein.
Hab meinen Uno ausgelesen high 0xde low 0xff

DanielSan
30.03.2013, 16:08
Ich hab 2048 Words Bootloadergröße eingestellt.

Mit 256 funktioniert es aber auch nicht.

Meine Fuses:
High: 0XDE
Low: 0XE2
Ext: 0X07

Ich möchte den internen Oszi mit 8MHz nutzen. Dazu hab ich den passenden 8MHz Bootloader geladen.

Hubert.G
30.03.2013, 16:21
Ändere das mal auf 256 Words, vielleicht geht es dann.

DanielSan
30.03.2013, 17:03
Soo jetzt geht es.

Ich musste noch die Lockbits BLB12 und BLB11 setzen. Also Lockbits 0XCF. Sobald ich den ISP angeschlossen habe und mit der Arduino IDE ein Programm seriell in den Atmel schreibe, sind die Lockbits wieder offen. Also muss folgender maßen vorgegangen werde:

1. Boards.txt öffnen und ein Board hinzufügen. ACHTUNG! Wenn hier die Fuses nicht stimmen und man den Bootloader mit der Arduino IDE installiert kann der Atmega verfust werden! Ich installiere den Bootloader mit AVRDUDE und der GUI AVR-Brenner.
2. Fusebits setzen (für Atmega328P @ 8MHz internal Oszi) ACHTUNG! Fuses überprüfen!
High: 0XDE
Low: 0XE2
Ext: 0X07
3. Passende Bootloader .hex laden (das dauert etwas!)
4. Lockbits setzen. Bei mir 0XCF.
5. ISP abziehen und "nie" wieder anschließen
6. Mit der Arduino IDE seriell Programmieren. Da ich keine Resetleitung habe, clicke ich auf Übertragen und gebe dem Atmel dann Strom.

So funktioniert es bei mir. Achtet bitte auf die richtigen Fuses. Ich übernehme keine Verantwortung wenns bei euch nicht klappt.

Gruß Daniel

Hubert.G
30.03.2013, 17:15
Es ist klar, das bei programmieren über ISP der Bootloader weg ist. Ein Erase löscht alles.

DanielSan
31.03.2013, 09:16
Das hast du falsch verstanden. Natürlich ist der Speicher komplett leer nachdem man ihn mit dem ISP Programmiert hat. Bei mir ist er aber leer wenn der ISP angeschlossen ist, ich aber über die UART Programmiere.
Naja jetzt funktioniert es ja.

Cysign
03.04.2013, 13:12
ALso in unserem Fall hier hat es wohl später noch erfolgreich geklappt, wenn man den AVRISPII mit alternativen Treibern für die Arduino-IDE sichtbar macht und den ISP-Pfostenstecker des Arduino-UNO-Boards direkt nutzt, um den verbauten AtMega238PU zu beschreiben.
Welche Treiber das genau sind, weiß ich nicht, das hab ich an meinen Bastelbuddy abgetreten ;)