Ich habe ein Projekt zusammengebastelt, das von einem Atmega324P-20AU gesteuert werden soll. Bevor ich alle Teile gekauft und zusammengelötet habe, suchte ich natürlich nach Möglichkeiten, später einen Bootlader darauf zu brennen und das ganze Teil in Betrieb zu nehmen, doch natürlich funktioniert es nicht...
Für das Programmieren benutze ich die Arduino IDE auf einem Mac und ein Arduino UNO Board als Programmer.
Auf meiner Suche nach Bootloadern und so bin ich bei Alternate CORE files for Arduino fündig geworden. Die dort verlinkte Zip Datei enthält die Dateien für ein Board von Rugged Circuits, das mit einem Atmega324p bestückt ist. Also hab ich alles benötigte in meine Arduino.app gepackt und versucht, mit meinem Controller zu "reden".
Wenn ich versuche einen Bootloader zu installieren, erhalte ich folgende Fehlermeldung:
avrdude: verification error, first mismatch at byte 0x0000
0xff != 0x3f
Auf der Suche danach, was das bedeuten solle, habe ich folgendes gefunden:
If you are trying to write something to the chip and you get an error that ends in a similar fasion to:
avrdude.exe: verification error, first mismatch at byte 0x0000
0xff != 0x3f
This means that you will need to click the Erase Chip box before you can write whatever you were writing.
(<--- genau meine Fehlermeldung) Doch wie kann man in der Arduino IDE den Chip löschen? Wahrscheinlich gar nicht.
Das Hochladen eines Sketches funktioniert ohne Fehlermeldung, allerdings passiert auf dem Board nichts.
Hat jemand von euch einen Rat? Ich bin sicher nicht der einzige, der diesen coolen Chip benützen will und keine Ahnung hat von AVR Dude und zusätzlichen Programmierteilen
Hat jemand von euch einen Rat? Ich bin sicher nicht der einzige, der diesen coolen Chip benützen will und keine Ahnung hat von AVR Dude und zusätzlichen Programmierteilen
Du brauchst keinen Leidensgenossen der in der gleichen Situation steckt sondern jemanden der weiß wie tun.
Mir scheint die genannte Version nicht für den ATmega324 kompatibel zu sein. Dieser wird nirgens genannt.
uwefed:
Du brauchst keinen Leidensgenossen der in der gleichen Situation steckt sondern jemanden der weiß wie tun.
Da hast du wohl recht
uwefed:
Mir scheint die genannte Version nicht für den ATmega324 kompatibel zu sein. Dieser wird nirgens genannt.
Teil des Pakets ist das Gator+ Board von Rugged Circuits (http://www.ruggedcircuits.com/html/mb324p.html) das eben mit einem solchen Atmega324p bestückt ist. In der boards.txt sieht der Eintrag folgendermassen aus:
Die Fuses überprüfe ich jeweils mit dem Programm AVR Fuses, da lassen sich die Fuses eingeben und danach anschauen, was für Einstellungen dies bewirkt - und das sieht korrekt aus. Müsste ich eventuell den Eintrag für das Lock oder Unlock bit ändern? Was hätte das für Auswirkungen?
Dieser Eintrag müßte für den Uplaud aus dem IDE zuständig sein (bitte bestätigt mir das noch jemand) aber nicht für die Programmierung des Bootloaders.
Welchen ISP-Programmierer benutzt Du?
Grüße Uwe
This means that you will need to click the Erase Chip box before you can write whatever you were writing
Soll wohl heissen, dass der flash erst gelöscht werden muss, bevor er beschrieben werden kann.
Das ist allerdings der Normalfall.
Die Aduino IDE enthält und verwendet übrigens dafür avrdude ( sicher auch auf ApfelRechnern )
Dort gibt es die Option -D explizit, mit der das Löschen des Flash verhindert werden könnte und die
-e Option, mit der der komplette Flash gelöscht wird.
Am einfachsten machst du dich mit avrdude vertraut, indem du
a) In der Arduino IDE "Ausführliche Anzeige während Upload" aktivierst und dir ansiehst, was passiert.
b) Einfache Kommandos von Hand ausführst: avrdude -C .\etc\avrdude.conf -P COM4 -p m324p -vvv -U signature:r::m
liest z.B. (auf einem Windows-Rechner) nur die Signatur, und zeigt, ob du mit dem Chip überhaupt reden kannst.
Oder ob du
[color=red] avrdude: stk500_getsync(): not in sync: resp=0x00[/color]
bekommst, wenn gar kein Arduino an der seriellen Schnittstelle hängt.
Den bootloader kannst du auch mit avrdude direkt brennen, wenn du die .hex Datei hast.
Vorsicht !! Kleiner Fehler, großer Ärger.
Ich habe gerade diesem Aufruf ohne die Parameter :r::m aufgerufen. Damit habe ich gerade meinen Bootloader gelöscht.
avrdude -p atmega328p -P /dev/ttyUSB0 -c stk500v2 -vv -U signature
avrdude: Version 5.11.1, compiled on Oct 30 2011 at 10:41:10
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2009 Joerg Wunsch
System wide configuration file is "/etc/avrdude.conf"
User configuration file is "/home/reinhard/.avrduderc"
User configuration file does not exist or is not a regular file, skipping
Using Port : /dev/ttyUSB0
Using Programmer : stk500v2
AVR Part : ATMEGA328P
Chip Erase delay : 9000 us
PAGEL : PD7
BS2 : PC2
RESET disposition : dedicated
RETRY pulse : SCK
serial program mode : yes
parallel program mode : yes
Timeout : 200
StabDelay : 100
CmdexeDelay : 25
SyncLoops : 32
ByteDelay : 0
PollIndex : 3
PollValue : 0x53
Memory Detail :
Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
eeprom 65 20 4 0 no 1024 4 0 3600 3600 0xff 0xff
flash 65 6 128 0 yes 32768 128 256 4500 4500 0xff 0xff
lfuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
hfuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
efuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
lock 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
calibration 0 0 0 0 no 1 0 0 0 0 0x00 0x00
signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00
Programmer Type : STK500V2
Description : Atmel STK500 Version 2.x firmware
Programmer Model: STK500
Hardware Version: 3
Firmware Version Master : 2.10
Topcard : Unknown
Vtarget : 0.0 V
SCK period : 3.3 us
Varef : 0.0 V
Oscillator : Off
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.01s
avrdude: Device signature = 0x1e950f
avrdude: safemode: lfuse reads as FF
avrdude: safemode: hfuse reads as D6
avrdude: safemode: efuse reads as 5
avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed
To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "signature"
avrdude: error opening signature: No such file or directory
avrdude: input file signature auto detected as invalid format
avrdude: can't open input file signature: No such file or directory
avrdude: read from file 'signature' failed
avrdude: safemode: lfuse reads as FF
avrdude: safemode: hfuse reads as D6
avrdude: safemode: efuse reads as 5
avrdude: safemode: Fuses OK
avrdude done. Thank you.
Dazu müsste ich dann aber einen anderen Programmer haben oder? AVR Fuses, das man auch zum Fuses brennen und .hex Dateien hochladen benutzen könnte und das auch auf den avrdude zugreift, erkennt den Arduino UNO nämlich nicht als Programmer. Ausserdem bin ich furchtbar schlecht mit Terminal Anwendungen und hatte nur schon eine ziemlich schwierige Geburt, avrdude zu installieren. Ginge das nicht irgendwie auch über die Arduino IDE und den UNO als Programmer?
Ginge das nicht irgendwie auch über die Arduino IDE und den UNO als Programmer?
Ich denke, davon reden wir hier:
avrdude erkennt an einer seriellen Schnittstelle einen Programmer: das ist dein UNO mit dem entsprechenden ArduinoISP Sketch. Der ist mit den SPI-Pins eines anderen Chip ( dein 324p ) verbunden und kann dessen Flash löschen und hoffentlich auch wieder beschreiben:
mit dem hex file für einen bootloader für 324p, damit der danach über die serielle Schnittstelle
und die Arduino IDE andere sketche dazulädt.
oder direkt mit einem sketch für den 324p
Der kann natürlich auch die fusebits deines m324p lesen und schreiben.
Ok, dann werd ich wohl aufhören müssen, mich wie ein Mädchen gegen das Terminal zu sträuben und mir ein AVR-Dude Tutorial reinziehen
Melde mich dann wieder, wenns entweder (hoffentlich) geklappt hat oder ich wieder stecken bleibe. Auf jeden Fall vielen Dank für die Antworten!
avrdude: Device signature = 0x000000
avrdude: Yikes! Invalid device signature.
Double check connections and try again, or use -F to override
this check.
Werde also mal die Verbindungen durchmessen, ob alles recht verkabelt ist. Dabei kann ich den Controller aber nicht beschädigen, oder? Hab nur ein gewöhnlich popeliges Multimeter, das piepst, wenn die Messstecker verbunden werden...
ok. Verbindungen durchgemessen. kommt alles auf den richtigen Pins an.
heisst das der Controler ist kaputt? Wie könnte das geschehen sein? Zu heiss hat er sicher nicht gehabt.
auch wenn ich mir immer wieder selber antworte: hab noch was gefunden. werde das morgen ausprobieren. jetzt ist erstmal zeit für ein bier!
Here is another MAJOR step. This shouldn't really be a problem with a low power chip such as the AtTiny or anything with a power requirement below 2 to 3 volts, HOWEVER what I have found that people are doing (including me. I am not out of this loop) is that they are trying to feed the power off of the 5v of the Arduino board to power the chip that they are programming. THIS WILL NOT WORK! I don't know how much power it is actually feeding to the chip from that 5v output, but it can't be enough for a chip (like the Atmega32) that requires at least 4.5v which funny enough, I am using the Atmega32L which only requires 2.7v because what fixed all the problems I had with the device signature being wrong and random signatures, is to just go out, buy the 5v regulator and two 10uF capacitors to use it with, and make a power pack out of 4x AA batteries or a 9v and snap. After that it showed up fine without ANY issues whatsoever. It wont add much to your project (batteries are more expensive than anything. I bought the 5v regulator and the two capacitors yesterday from Radio Shack for > $4.00. You will need it anyway for your project so just go get it. I can't stress this one enough because this was my problem all along and I am a newb. Heck even some advanced strict avr (non arduino) folks have struggled with this.
Na, das wird es kaum sein, fürchte ich.
Den Ziel - 324p Chip solltest du schon mit den 5V des Programmier-Uno betreiben können,
die wiederum aus der USB-Versorgung des Uno kommen,
... wenn du ihn denn richtig angeschlossen hast ...
Wollte aber nicht ganz ohne Hoffnung ins Bett gehen gestern... Andere Erklärungen? Oder ist das Teil kaputt? Wäre ziemlich aufwändig, den auszutauschen und die Gefahr gross, dass ein Pad abreisst
Hast du irgendeinen anderen atmega, den du als Vergleich nehmen könntest ?
Stimmt -cstk500v1 für deinen Uno als Programmer ?
Hat Nick Gammon nicht einen alternativen ArduinoISP sketch ?
ok Leute. Teilerfolg! Irgendwie schräg, aber urteilt selbst:
Hab nochmals etwas an den Pins rumgelötet, denke aber nicht, dass ich da gross was verändert hab. Jedenfalls häng ich das Ding dann nochmals an und will gerade einen erneuten Uploadversuch starten, als ich bemerke, dass der Kondensator am UNO statt von Reset zu GND von 3.3V zu GND geht. Also eins verrutscht irgendwann. facepalm
Als ich mit der IDE dann den Bootloader installieren will erscheint die selbe Meldung wie bis anhin.
Als ich mit avrdude den signature-check machen will, heisst es, der Programmer sei "not in sync". Wenn ich den Kondensator entferne, erscheint jeweils die Meldung von der falschen Signatur.
Einfach mal so kopierte ich dann den avrdude-Befehl von der Arduino IED ins Terminal und liess so also den avr-dude den Befehl ausführen, den die IDE ausgab, um den Bootloader zu installieren. Es erschien eine ziemlich lange Ausgabe, an dessen Ende sich avrdude bedankte - klingt gut, dachte ich! Beim genaueren Durchschauen der Ausgabe bemerkte ich einerseits, dass irgendwo die Signatur gecheckt wurde und korrekt war, andererseits aber entdeckte ich die selbe Fehlermeldung, wie sie die IDE ausgab. Allerdings brach avrdude an dieser Stelle nicht ab, sondern zog das Ding scheinbar einfach durch!
Stand ist nun, dass ich Sketches über die IDE hochladen kann. Zu Beginn hatte ich etwas Mühe, die richtige Pinbelegung heraus zu finden und versuchte mittels verschiedener Skripte der Sache auf den Grund zu gehen. Bei diesen Versuchen schienen die Geschehnisse auf dem Board ziemlich random, was mir Kummer bereitete Allerdings fand ich dann eine Übersicht auf der Rugged Circuits Seite, mit der ich tatsächlich meine 8 Leds durch das Shift-Register ansteuern konnte. Allerdings fiel mir auf, dass das delay von 500 Milisekunden mehrere Sekunden andauerte.
Meine Erklärungsversuche:
Es hat nicht gleich geklappt, weil die IDE zu blöd ist, das so hinzukriegen, wie es sich gehört
Device Signature war ungültig (=0), weil der Programmer nicht recht funktionierte, da der Reset nicht richtig deaktiviert war
not in sync Fehler bei avrdude, weil ich den Teil mit der baudrate aus den Kommandos gestrichen hatte für den signaturcheck
avr-dude hats gerichtet weil -> he's the dude!
delay ist viel zu langsam, weil ich was mit den Fuses verkackt habe
Was haltet ihr von den Erklärungsversuchen? und was noch viel wichtiger ist: Wie wären die Fuses für einen externen Kristall mit 20MHz und separaten Kondensatoren korrekt zu setzen? Habe nach Konsultation des Datenblatts folgende Option für gut befunden:
-Uefuse:w:0x05:m -Uhfuse:w:0xD2:m -Ulfuse:w:0xF7:m -> Full Swing Oscillator; Start-up time: 16K CK + 65ms; Crystal Osc. slowly rising power.
Hab versucht die Fuses folgendermassen zu setzen: -Uefuse:w:0x05:m -Uhfuse:w:0xD2:m -Ulfuse:w:0xFF:m
leider laufen die Testlichter immer noch ca. 40 mal weniger schnell als sie sollten.
Ich bin gar nicht wirklich überzeugt, ob das Verändern der Fuses wirklich geklappt hat, also versuchte ich mal mittels AVR Dude die aktuellen Fuses auszulesen und in eine Datei zu schreiben. Dabei habe ich folgendes erhalten, was ich nicht so wirklich zu interpretieren weiss:
low fuse :
:01000000629D
:00000001FF
high fuse:
:010000009966
:00000001FF
extended fuse:
:01000000FF00
:00000001FF
Irgendwie scheint mir das Neusetzen der Fuses nicht ganz zu klappen. Könnte dies mit der Fehlermeldung vom Anfang zusammenhängen? Und was noch viel wichtiger ist: wie kriege ich nun meinen Controller auf meine 20MHz?