PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mega168 mit STK200 und GCC programmieren



Razer
26.03.2006, 13:47
Hallo an alle

Da mein Mega 8 nun kaoutt ist :( muss ich mir einen neuen µC besorgen. ICh werd natürlich wieder ein Mega 8 nehmen.

Ich will jedoch auch noch einen Mega168 mitkaufen da er Pinkompatibel ist und sehr interessante Daten hat.

Nun meine Frage. Kann man den Mega 168 mit dem STK 200/ STK 300 Programmmer (LPT mit IC 78HCT244) mit WinAvr programmieren?

Wenn ja, wie?

Kann mir das wer erkären?

Unter AvrDude hab ich ihn ncht gefunden

Danke im Voraus

Gruß Robert

linux_80
26.03.2006, 15:43
Hallo,
Hardwaremässig läuft das für beide vom programmieren her gesehen gleich, ich hab meinen bis jetzt nur unter Bascom programmiert, Pony kennt den M168 auch nicht, kommt darauf an ob AvrDude die ID des M168 kennt.
Oder ist das genau das Problem ?
Dei neueste Version sollte die 168er aber kennen/können !

linux_80
26.03.2006, 17:01
Hallo,
also ich hab etwas rumprobiert mit AVRDude,
mit der Version die bei WinAVR-20050214 dabei ist geht es von Haus aus nicht (AVRDude 4.4.0),
Welche bei WinAVR-20060125 dabei ist weiss ich nicht, denn da gibts auch Probleme mit AVRStudio, weshalb ich das nicht installiert habe.
AVRDude 5.0 kann das auch nicht,
aber AVRDude 5.1 könnte das, gibts aber nur als Source, da ich aber keine Lust hatte irgendwas zu kompilieren, hab ich einfach die Teile aus der Config kopiert und ein wenig angepasst,
wenn man die 5.0 verwendet muss man nix anpassen, einfach reinkopieren,
bei einer älteren hab ich auch erstmal reinkopiert, und dann solange aufgerufen und die Fehlerhaften Zeilen gelöscht, bis es geklappt hat :-)

Wenn man das AVRDude-GUI verwendet gibts noch das Problem, das man den M168 nicht per Dropdown auswählen kann,
dazu kann man aber einfach unten bei "Command-Line" die option -p ändern.
Klappte bei mir jetzt wunderbar mit AVRDdude 5.0 und einem M168
\:D/

dieser Teil muss mit in die avrdude.conf (passend für AVRDude 5.0)


#------------------------------------------------------------
# ATmega168
#------------------------------------------------------------

part
id = "m168";
desc = "ATMEGA168";
stk500_devcode = 0x86;
# avr910_devcode = 0x;
pagel = 0xd7;
bs2 = 0xc2;
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 = 1;

memory "eeprom"
size = 512;
min_write_delay = 3600;
max_write_delay = 3600;
readback_p1 = 0xff;
readback_p2 = 0xff;
read = " 1 0 1 0 0 0 0 0",
" 0 0 0 x x x x 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 0 x x x x a8",
" a7 a6 a5 a4 a3 a2 a1 a0",
" i i i i i i i i";
;

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 0 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 0 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 0 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 0 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 0 a12 a11 a10 a9 a8",
" a7 a6 x x x x x x",
" x x x x x x x x";

mode = 0x41;
delay = 6;
blocksize = 128;
readsize = 256;

;

memory "lfuse"
size = 1;
min_write_delay = 4500;
max_write_delay = 4500;
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";
;

memory "hfuse"
size = 1;
min_write_delay = 4500;
max_write_delay = 4500;
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";
;

memory "efuse"
size = 1;
min_write_delay = 4500;
max_write_delay = 4500;
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 x x x x x 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 x x x x x i i i";
;

memory "lock"
size = 1;
min_write_delay = 4500;
max_write_delay = 4500;
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";
;

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";
;

memory "signature"
size = 3;
read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x",
"x x x x x x a1 a0 o o o o o o o o";
;
;



Die Binary zu AVRdude 5.0 kann man sich hier ziehen:
http://download.savannah.gnu.org/releases/avr/

Eine AVRdude-GUI (für Windose) gibts nur eine, die 0.2.0:
http://sourceforge.net/project/showfiles.php?group_id=125549&package_id=139089&release_id=291782
Ist auch schon in allen WinAVR Paketen enthalten.

Razer
26.03.2006, 17:44
Hallo an alle

Dank für die Konfigurationen für den M168. Wie genau funktioniert das mit der Kommandozeile??

zb so?:

"C:\WinAVR\bin\avrdude.exe" -p m168 -c stk200 -P lpt1 -U flash:r:"<PFAD>":a

Stimmt das so? jetzt steht beim pull down Menü Mega8 aber das m8 hab ich in der Kommandozeile in m168 geändert.

Kann das so funktionieren??

Und wie kann ich dann direkt aus WinAvr flashen? Muss ich da dann was im Makefile änderen?

Danke im Voraus

Gruß Robert

linux_80
26.03.2006, 18:12
Ja, bei mir gehts auch so,
im Makefile wird sowieso angegeben für welchen AVR compiliert werden soll, dieser Wert wird auch an AVRDude übergeben, sollte somit passen,
der Rest ist schon im Makefile vordefiniert für das schreiben,
wenns jetzt schon mit dem Mega8 geht, gehts auch mit dem M168.

Razer
26.03.2006, 18:15
Ok, super
Danke

Razer
27.03.2006, 10:19
Hallo

Gibt es auch so einen Code für den Mega 88??

Danke im Voraus

Gruß Robert

cumi
27.03.2006, 12:41
Mit uisp geht es problemlos, unter Linux. Weiss jedoch nicht, obs den für Windows auch gibt, denke aber eher nicht.

Razer
27.03.2006, 15:20
Ich hab leider nur Windows.

SprinterSB
27.03.2006, 16:01
ATmega88 ist zwar pinkompatibel zu ATmega8, aber in den Innereien hat sich einiges geändert und von Atmel ist er nicht als Ersatz für ATmega8 gedacht.

So wird z.B. der EEPROM anders angesprochen, was bei avr-gcc Probleme machen kann, weil nur Mega8 unterstützt wird. Du müsstest dann also ein paars Sachen von Hand machen. Gleiches gilt natürlich für ATmega168.

Razer
27.03.2006, 17:20
Hallo

Aber mit den Konfiguration sollte SvrDude mit dem Mega 168 umgehen können, oderß?

Gleiches gilt auch für den Mega88, oder?

Gruß Robert

linux_80
27.03.2006, 19:45
der Mega88 ist doch schon dabei in der Liste im GUI, sollte somit gehen.

@SprinterSB,
wie meinst du das mit den Problemen ? während des Programmablaufs ?
hab ich noch nicht probiert,
Ausnahmsweise hab ich unter Bascom Programmiert und mit AVRDude geflasht, mit der modifizierten conf (M168) gibts keine Probleme Flash oder EEprom zu schreiben und lesen.
Alles unter Windose.

SprinterSB
27.03.2006, 20:04
Ja, was daran liegt, daß auf den EEPROM anders zugegriffen werden muss, aber dies noch nicht in avr-gcc implementiert ist (zumindest nicht in der 3.x).
Wenn man dann die Routinen aus <avr/eeprom.h> nimmt, funzt das net.

Razer
27.03.2006, 20:29
Hallo an alle

Das hab ich glatt übersehen...
Sorry.

Für den EEprom werd ih mir dann was eigenes zusammenstricken wenn ichs brauch

Gruß Robebrt

linux_80
27.03.2006, 21:01
Aja,
steht auch unübersehbar in der eeprom.h drin für welche AVRs es nicht geht, und es sollte ein Compilerwarning geben wenn man es doch versucht.

Hab ich aber auch noch nicht verwendet, ich will immer alles selber bauen. :-b