Hallo Leutz!
Ich hab hier ein kleine Problem, für mein Projekt hatte ich eigentlich
den atmega644 verwendet weil ich ja 20mhz taktfrequenz brauche.
da ich eine größere stückzahl brauche wurde mir der atmega164A
empfohlen, der ja pingleich ist und auch 20mhz kann.
nun hab ich 50 stück davon da und kann die leider nicht programmieren.
ich verwende den mysmartusb mk2 (myAVR_ProgTool) mit dem pollin atmel
eva. board.
den atmega16 32 644 konnte ich damit immer problemlos beschreiben.
nur leider beim 164A bekomme ich immer diesen fehler:
1
vorbereiten ...
2
brennen ...
3
benutze: mySmartUSB MK2 an COM4 mit ATmega164A
4
USB-Treiber installiert, aktiv (V 6.5.0.0), Port: COM4
5
Prozessor: ATmega164A
6
schreibe 3758 Bytes in Flash-Memory ...
7
Fehler: beim Vergleich der Prüfsumme.
auch das update auf die alte firmware des mysmart usb brachte keine
besserung.
dann wolle ich das gute alte ponyprog zusammen mit der rs232 isp
schnitstelle des pollin boades verwende, aber leider kann das ponyprog
den 164a nicht.
kann mit jemand helfen wie ich den 164a programmieren kann?
ggf. auch mit anderer hardware.
Beste Grüße
TheBassBox
mikro schrieb:> THE BASSBOX schrieb:>> ich verwende den mysmartusb mk2 (myAVR_ProgTool)>>> nimm doch das myAVR ProgTool, da kann man auch den 164a auswählen.>>> http://shop.myavr.de/index.php?sp=download.sp.php&...
wie oben geschrieben verwende ich das tool schon und es kommt eben
dieser fehler, den atmega164a hab ich ausgewählt.
hast schon DUDE versucht?
das kannst du im ProgTool auch auswählen... unten rechts die ListBox
ruft DUDE auf... dort als Protokoll AVR911 für den MK2 asuwählen
Gruß
THE BASSBOX schrieb:> C:\>avrdude -P com4 -c avr911 -p m164 -U flash:w:1.hex -F
hast du den Programmer schon einmal auf langsamer eingestellt? zum
Beispiel so:
C:\>avrdude -P com4 -c avr911 -p m164 -B 100 -U flash:w:1.hex -F
geht's dann?
danke für die antwort, ich hab das mal in der avrdude.conf geändert und
nun wird der A auch richtig erkannt, aber der fehler ist trotzdem noch
immer da.
hat einer von euch den 164A schon erfolgreich beschrieben?
hier mal der ausschnitt aus der avrdude conf datei für den 164A:
#------------------------------------------------------------
# ATmega164A
#------------------------------------------------------------
# close to ATmega16
part
id = "m164a";
desc = "ATMEGA164A";
has_jtag = yes;
stk500_devcode = 0x82; # no STK500v1 support, use the ATmega16 one
avr910_devcode = 0x74;
signature = 0x1e 0x94 0x0f;
pagel = 0xd7;
bs2 = 0xa0;
chip_erase_delay = 9000;
pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1",
"x x x x x x x x x x x x x x x x";
chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x",
"x x x x x x x x x x x x x x x x";
timeout = 200;
stabdelay = 100;
cmdexedelay = 25;
synchloops = 32;
bytedelay = 0;
pollindex = 3;
pollvalue = 0x53;
predelay = 1;
postdelay = 1;
pollmethod = 0;
pp_controlstack =
0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F,
0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F,
0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B,
0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00;
hventerstabdelay = 100;
progmodedelay = 0;
latchcycles = 5;
togglevtg = 1;
poweroffdelay = 15;
resetdelayms = 1;
resetdelayus = 0;
hvleavestabdelay = 15;
chiperasepulsewidth = 0;
chiperasepolltimeout = 10;
programfusepulsewidth = 0;
programfusepolltimeout = 5;
programlockpulsewidth = 0;
programlockpolltimeout = 5;
idr = 0x31;
spmcr = 0x57;
allowfullpagebitstream = no;
memory "eeprom"
paged = no; /* leave this "no" */
page_size = 4; /* for parallel programming */
size = 512;
min_write_delay = 9000;
max_write_delay = 9000;
readback_p1 = 0xff;
readback_p2 = 0xff;
read = " 1 0 1 0 0 0 0 0",
" 0 0 x x x x a9 a8",
" a7 a6 a5 a4 a3 a2 a1 a0",
" o o o o o o o o";
write = " 1 1 0 0 0 0 0 0",
" 0 0 x x x x a9 a8",
" a7 a6 a5 a4 a3 a2 a1 a0",
" i i i i i i i i";
loadpage_lo = " 1 1 0 0 0 0 0 1",
" 0 0 0 0 0 0 0 0",
" 0 0 0 0 0 0 a1 a0",
" i i i i i i i i";
writepage = " 1 1 0 0 0 0 1 0",
" 0 0 x x x x a9 a8",
" a7 a6 a5 a4 a3 a2 0 0",
" x x x x x x x x";
mode = 0x41;
delay = 10;
blocksize = 128;
readsize = 256;
;
memory "flash"
paged = yes;
size = 16384;
page_size = 128;
num_pages = 128;
min_write_delay = 4500;
max_write_delay = 4500;
readback_p1 = 0xff;
readback_p2 = 0xff;
read_lo = " 0 0 1 0 0 0 0 0",
" 0 0 a13 a12 a11 a10 a9 a8",
" a7 a6 a5 a4 a3 a2 a1 a0",
" o o o o o o o o";
read_hi = " 0 0 1 0 1 0 0 0",
" 0 0 a13 a12 a11 a10 a9 a8",
" a7 a6 a5 a4 a3 a2 a1 a0",
" o o o o o o o o";
loadpage_lo = " 0 1 0 0 0 0 0 0",
" 0 0 x x x x x x",
" x x a5 a4 a3 a2 a1 a0",
" i i i i i i i i";
loadpage_hi = " 0 1 0 0 1 0 0 0",
" 0 0 x x x x x x",
" x x a5 a4 a3 a2 a1 a0",
" i i i i i i i i";
writepage = " 0 1 0 0 1 1 0 0",
" 0 0 a13 a12 a11 a10 a9 a8",
" a7 a6 x x x x x x",
" x x x x x x x x";
mode = 0x21;
delay = 6;
blocksize = 128;
readsize = 256;
;
memory "lock"
size = 1;
read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
"x x x x x x x x x x o o o o o o";
write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
"x x x x x x x x 1 1 i i i i i i";
min_write_delay = 9000;
max_write_delay = 9000;
;
memory "lfuse"
size = 1;
read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0",
"x x x x x x x x o o o o o o o o";
write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0",
"x x x x x x x x i i i i i i i i";
min_write_delay = 9000;
max_write_delay = 9000;
;
memory "hfuse"
size = 1;
read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0",
"x x x x x x x x o o o o o o o o";
write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0",
"x x x x x x x x i i i i i i i i";
min_write_delay = 9000;
max_write_delay = 9000;
;
memory "efuse"
size = 1;
read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0",
"x x x x x x x x o o o o o o o o";
write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0",
"x x x x x x x x 1 1 1 1 1 i i i";
min_write_delay = 9000;
max_write_delay = 9000;
;
memory "signature"
size = 3;
read = "0 0 1 1 0 0 0 0 x x x x x x
x x",
"x x x x x x a1 a0 o o o o o o
o o";
;
memory "calibration"
size = 1;
read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x",
"0 0 0 0 0 0 0 0 o o o o o o o o";
;
;
Michi schrieb im Beitrag #3159828:
> THE BASSBOX schrieb:>> ...nun hab ich 50 stück davon da...
Du hast recht, das schrieb er. Ich nehme ja auch an, er hat es mit
mindestens einem anderen getestet.
Aber manchmal passiert es, dass man an komplizierte Probleme denkt und
nur ein ganz einfaches hat...
also ich hab 3 stück getestet und die sind alle gleich.
wenn ich den ic dann wieder auslese dann ist ein teil des programmes
drauf.
Falk Brunner meinte dazu:
Ja, das sieht nach einem Programmierproblem aus, nicht nach einem
Problem mit dem HEX-File. Möglichgerweise ist in den
Beschreibungsdateien für dein 164A ein Fehler drin. Man sieht eindeutig,
dass jeweils die 4. Page komplett exakt geschrieben wird, während die 3
vorhergehenden voller Fehler sind und praktisch keinerlei korrekte Daten
enthalten.
In meinen Beständen ist ein ATmega164P, der die gleiche Kennung wie ein
..164PA (940A) hat.
Beim Programmieren gab es keinerlei Probleme oder Abweichungen in den
Programmierroutinen zu anderen ATmegas.
Ich verwende einen Programmieradapter am LPT-Port. Hast Du einen
LPT-Port am Rechner, dann könntest Du es damit mal probieren?
http://www.mino-elektronik.de/bilder/avrprog/avrprog2.png
M. N. schrieb:> In meinen Beständen ist ein ATmega164P, der die gleiche Kennung wie ein> ..164PA (940A) hat.>> Beim Programmieren gab es keinerlei Probleme oder Abweichungen in den> Programmierroutinen zu anderen ATmegas.> Ich verwende einen Programmieradapter am LPT-Port. Hast Du einen> LPT-Port am Rechner, dann könntest Du es damit mal probieren?> http://www.mino-elektronik.de/bilder/avrprog/avrprog2.png
als lpt programmer hab ich immer diese schaltung vom henne verwendet:
http://www.hoelscher-hi.de/hendrik/light/ressources/an011.pdf
unter: paralleler Programmieradapter (PAR-PROG)
für deine schaltung fehlt mir leider der 74hct126d
was könnte ich alternativ verwenden?
so ich kann euch nun mitteilen das ich es geschafft hab.
das hex file ist auf dem atmega164A drauf.
scheinbar kann man den nur richtig über lpt programmieren, ich hab dann
diese schaltung vom henne verwendet wie ich oben geschrieben hab:
http://www.hoelscher-hi.de/hendrik/light/ressource...
unter paralleler Programmieradapter (PAR-PROG)
dann per avrdude mit meiner angepassten version (siehe oben) geflasht
per:
avrdude -P lpt1 -c pony-stk200 -p m164a -U flash:w:1.hex -F
dann noch die fuse bits angepasst und fertig.
Vielen dank für eure Hilfe!
THE BASSBOX schrieb:> scheinbar kann man den nur richtig über lpt programmieren, ich hab dann> diese schaltung vom henne verwendet wie ich oben geschrieben hab:
Das finde ich insofern bemerkenswert, als dass immer wieder auf
LPT-Prommer geschimpft wird :-)
Bei meiner Schaltung könnte man den HCT126 vermutlich auch weglassen,
was aber bei längeren Kabel nicht so günstig ist. Auch mag ich es
lieber, wenn der µC voll entkoppelt ist, sofern er nicht gerade
programmiert wird.
Glückwunsch, dass Du noch einen LPT-Port hast und dass er Dir geholfen
hat!
@ THE BASSBOX (thebassbox)
>so ich kann euch nun mitteilen das ich es geschafft hab.>das hex file ist auf dem atmega164A drauf.
Gut.
>scheinbar kann man den nur richtig über lpt programmieren,
Sicher nicht. Wollen wir wetten, dass es ein "richtiger"
Programmieradapter ala AVR ISP MK II es softort richtig kann?
>dann per avrdude mit meiner angepassten version (siehe oben) geflasht>per:>avrdude -P lpt1 -c pony-stk200 -p m164a -U flash:w:1.hex -F>dann noch die fuse bits angepasst und fertig.
OK, ein passabler workaround, aber keine Lösung. Ich tippe immer noch
auf ein Softwareproblem, wahrscheinlich im myAVR_ProgTool oder avrdude.
In der config kann ich auf die Schnelle keinen Fehler finden, damit
kenne ich mich aber auch nicht wirklich aus.
Falls das überhaupt noch relevant ist:
Doch da könnte ein Fehler in der Config (es könnten auch noch mehr sein,
hab nicht alles gecheckt)!!!
Ich hatte die gleichen Probleme bei meinem ATmega16U4. Habs am Ende mit
avrdude und selbstgeschriebener config über das mySMARTUSB mk2
hingekriegt (virtuell seriell). Das lustige ist, dass obwohl das myAVR
ProgTool bei avr911 mode den AVRdude nutzt (er entpackt das in einen
temp ordner) und man die config hier auch editieren kann (hab ich
gemacht damit er meinen überhaupt erkennt, hat also funktioniert), läuft
das Aufrufen der AVRdudes über ProgTool weiterhin fehlerhaft, wobei das
direkte aufrufen funktioniert!!! Ich würde sagen vorsicht vor dem Tool.
Zurück zu deinem Problem:
Problem könnte die Adressierung beim SPI flashen sein.
Der kann nur die hälfte der bytes richtig zuordnen, weil sich die Anzahl
der Bytes die der mit den Befehlen "load" und "write" jeweils
mitgeschickt hat geändert hat (im Vergleich zu älteren Modellen wie
mega16).
Beim Datenblatt des 164A sind widersprüche! Deswegen bin ich mir nicht
ganz sicher. Und in meinem Fall (atmega16u4) war der Text auch
widersprüchlich zur Tabelle und nicht richtig (ich brauchte nur 6, im
text stand 7 LSB beim write befehl).
Bei 164A:
Im text (datenblatt seite 313) steht die 7 LSB mit dem write befel und
dann byte 8:15... WO ist byte 7 geblieben? Man fängt doch bei byte 0 an
zu zählen oder? Und anders gezählt wäre 15 auch nicht das letzte, wobei
hier eh 13 nur nötig sind:16k / 15 bei 128k)
Deswegen beides mal ausprobieren (erst 7LSB, dann 7:15 und erst 8LSB
dann 8:15) ...
Der chiperase vor dem flashen setzt alles auf 0xff und weil er einige
Bytes systematisch nicht richtig adressieren kann, bleiben diese so.
Folgendes musst du in der Config oben vermutlich ändern...
memory "flash"
paged = yes;
size = 16384;
page_size = 128;
num_pages = 128;
min_write_delay = 4500;
max_write_delay = 4500;
readback_p1 = 0xff;
readback_p2 = 0xff;
read_lo = " 0 0 1 0 0 0 0 0",
" 0 0 a13 a12 a11 a10 a9 a8",
" a7 a6 a5 a4 a3 a2 a1 a0",
" o o o o o o o o";
read_hi = " 0 0 1 0 1 0 0 0",
" 0 0 a13 a12 a11 a10 a9 a8",
" a7 a6 a5 a4 a3 a2 a1 a0",
" o o o o o o o o";
loadpage_lo = " 0 1 0 0 0 0 0 0",
" 0 0 x x x x x x",
" x a6 a5 a4 a3 a2 a1 a0",
" i i i i i i i i";
loadpage_hi = " 0 1 0 0 1 0 0 0",
" 0 0 x x x x x x",
" x a6 a5 a4 a3 a2 a1 a0",
" i i i i i i i i";
writepage = " 0 1 0 0 1 1 0 0",
" 0 0 a13 a12 a11 a10 a9 a8",
" a7 x x x x x x x",
" x x x x x x x x";r:
eventuell schadet aber auch folgendes nicht, falls das nicht
funktioniert, da die restlichen adressbits vermutlich immer don't cares
(x) sind (so ist es beim atmega16u4 und bei 164a stehts nicht explizit,
aber in der Tablle seite 314 steht quasi alle adressbits immer
schicken)!
memory "flash"
paged = yes;
size = 16384;
page_size = 128;
num_pages = 128;
min_write_delay = 4500;
max_write_delay = 4500;
readback_p1 = 0xff;
readback_p2 = 0xff;
read_lo = " 0 0 1 0 0 0 0 0",
" 0 0 a13 a12 a11 a10 a9 a8",
" a7 a6 a5 a4 a3 a2 a1 a0",
" o o o o o o o o";
read_hi = " 0 0 1 0 1 0 0 0",
" 0 0 a13 a12 a11 a10 a9 a8",
" a7 a6 a5 a4 a3 a2 a1 a0",
" o o o o o o o o";
loadpage_lo = " 0 1 0 0 0 0 0 0",
" 0 0 a13 a12 a11 a10 a9 a8",
" a7 a6 a5 a4 a3 a2 a1 a0",
" i i i i i i i i";
loadpage_hi = " 0 1 0 0 1 0 0 0",
" 0 0 a13 a12 a11 a10 a9 a8",
" a7 a6 a5 a4 a3 a2 a1 a0",
" i i i i i i i i";
writepage = " 0 1 0 0 1 1 0 0",
" 0 0 a13 a12 a11 a10 a9 a8",
" a7 a6 a5 a4 a3 a2 a1 a0",
" x x x x x x x x";r:
Schlechte ATMEL docu und schlechtes myAVRProgTool in kombi. uiuiuiuiui.
Der Programmer sagt doch eindeutig was falsch läuft.
Signatur 1e940f ist der 164A, genau den hat er ja auch gekauft.
Aber der programmer erwartet 1e940a für den 164PA.
-> also den 164A statt 164PA beim Programmieren auswählen...
Oder im conf am Signature Byte rumspielen.
Dem LPT Progger waren die Sigbytes wohl einfach nur egal.
und direkt jetzt liefs wieder! :D
sobald ich das myAVR ProgTool mal laufen hatte, spinnt er, bis ich den
mySMART USB neu connecte!!
So Smart ist das Ding gar nicht.
Martin Wende schrieb:> Der Programmer sagt doch eindeutig was falsch läuft.> Signatur 1e940f ist der 164A, genau den hat er ja auch gekauft.> Aber der programmer erwartet 1e940a für den 164PA.> -> also den 164A statt 164PA beim Programmieren auswählen...> Oder im conf am Signature Byte rumspielen.
jaa, aber wenn du weitergelesen hättest, hättest du gesehen, dass das
problem hier im thread schon mittlerweile gelöst war ...
Auch wenn das Problem schon "geworkarounded" ist, hier mal ein Test.
Sowohl Atmega164A als auch ATmega164PA lassen sich AVR Studio 4.18 + AVR
Dragon problemlos erkennen und beschreiben. AVR ISP MK II hab ich nicht
getestet.
I am not a German speaker. I used Google Translate to hardly understand
what the final answer is, but could not.
I have the same problem, I am using USBASP to program an ATMEGA164A.
But, it fails.
What should I do? changing the config file or the programmer? If config
file, change which part from what to what and use what avrdude command?
If programmer, which programmer?
Thanks.
I found out what the problem was:
I was powering up the circuit by two AA batteries, means 3 volts. When I
changed the circuit power supply to 5 volts, it worked flawlessly. I
think the programmer made the issue.