Forum: Compiler & IDEs STK200 ATMEGA16


von Markus Rinio (Gast)


Lesenswert?

Hallo,

ich würde gerne Assembler-Programme für den Mega16 schreiben und diese
mit meinem STK 200 Entwicklungsboard ausprobieren.

Die Software, die ich bisher zur Programmierung des AT90S8515 benutzt
habe (wavrasm1.3 und AVRISP2.4) unterstützen den Mega16 aber nicht.

Wer kann mir sagen, welche Programme unter Win NT 4 dies ermöglichen?

(WinAVR habe ich gerade downgeloaded. Wegen fehlender
Entwicklungsumgebung und einer unübersichtlichen Menge an
DOS-Programmen konnte ich damit aber nichts anfangen.)

Markus

von Matthias (Gast)


Lesenswert?

Hi

Ponyprog wenns klicki-bunti sein soll, avrdude wenns komfortabel sein
darf ;-)

Matthias

von Joerg Wunsch (Gast)


Lesenswert?

WinAVR hat übrigens keine DOS-Programme, das sind allesamt Win32
Programme. ;-)  Auch Windows führt im Untergrund einfach nur Programme
aus, ob man diese nun von einem cmd.exe aus oder vom Explorer mittels
klickedicklick startet...  Am Ende steht eine ausführbare Datei.

Das Zusammenspiel dieser Programme wird normalerweise über ein
Makefile
und das Tool »make«[.exe] arrangiert.  Beginnend beim README gibt es
hinreichend Dokumentation dafür, so daß es Tausende Programmierer
vor Dir geschafft haben, damit klarzukommen.

von Markus Rinio (Gast)


Lesenswert?

Vielen Dank für die Tips. Avrdude macht einen sehr guten Eindruck auf
mich!

Bei den ersten Tests tritt aber folgendes Verhalten auf:
- Der 8515 laesst sich fehlerfrei programmieren mit
  avrdude -p 8515 -c stk200 -y -e -v -f i -i filename.hex

- Beim Mega16, der in meinem STK200 im 40 Pin-"Analog Parts"-Sockel
steckt, meldet Avrdude Fehler beim Verifizieren. Die Parameter sind
obigen identisch (allerdings -p m16, statt -p 8515).

Die Meldung sieht etwa folgendermassen aus:
_________________________________________________________


    400

    407
avrdude: verifying ...
avrdude: verification error, first mismatch at byte 0x0000
     0x03 != 0xff
avrdude: verification error; content mismatch

avrdude done. Thank you.
_________________________________________________________


Die erste fehlerhafte Stelle ist nicht immer mit dem Programmanfang
identisch. Je nachdem an welche Stelle man es schreibt (.ORG XXXX) kann
diese Position auch spaeter kommen. Der Code kommt definitiv fehlerhaft
im Chip an. Wenn man ihn mehrmals nacheinander an dieselbe Position
uebertraegt, verhaelt sich das Testprogramm unterschiedlich (mal geht
es, mal nicht). In jedem Fall gibt es aber eine solche
Fehlermeldung.

Das Verbindungskabel vom Computer zum STK200 ist mit grosser
Wahrscheinlichkeit in Ordnung und sicher eingesteckt. (Der 8515 laesst
sich immer noch korrekt programmieren.)

Mir fiel von Anfang an auf, dass derselbe Code im Mega16 deutlich
langsamer laeuft als im 8515.

Kurzum: Ist mein Mega16 defekt oder kann es noch an etwas anderem
liegen (Timing, etc.)?

von Joerg Wunsch (Gast)


Lesenswert?

Was denn fürn Windows?  Es gab da offensichtlich versions- und
tagesformabhängig einige Timing-Probleme, von denen ich auf der
avrdude-Liste mitbekommen habe, daß die inzwischen repariert
worden sind.  Allerdings ist die aktuelle Version im Moment nur
im CVS.  Kannst aber auf der Liste mal fragen, ob Dir einer ein
Windows-Binary zukommen läßt.

Eins fällt mir spontan ein: der ATmega16 dürfte aus der Kiste raus
erstmal mit dem 1 MHz RC-Oszillator laufen, das ist dann sicher ein
Unterschied zu Deinem AT90S8515.  Eventuell würde Umschalten auf
den Quarz ja die Timing-Probleme lösen?  Ach ja, das würde sicher
auch die geringere Ausführungsgeschwindigkeit erklären... (ich hatte
oben noch nicht bis zu Ende gelesen).

von Markus Rinio (Gast)


Lesenswert?

Wie schaltet man auf den Quarz um?

von Joerg Wunsch (Gast)


Lesenswert?

Fuse bits.

von Markus Rinio (Gast)


Lesenswert?

Es ist tatsächlich ein Timing-Problem und kann gelöst werden durch
Verwendung des Programmier-Programms SP12. Dieses arbeitet sehr
effektiv und man kann die Übertragungsgeschwindigkeit an die
Taktfrequenz des AVR anpassen. Ausserdem erkennt es den AVR-Typ
selbst.

Für den Mega 16 braucht man einen Eintrag in der Device-Datei _sp12dev,
welchen ich mir auf die Schnelle folgendermaßen zusammengestellt habe.
Bisher schien es zu funktionieren, allerdings ist es möglich, dass noch
Fehler in diesem Eintrag sind. Daher übernehme ich keine Garantie für
die Richtigkeit dieses Eintrages.


begin 0394
-i394
-iM16
DEVICENAME = ATmega16
FLASHSIZE = 8192
EEPROMSIZE = 512
PAGEMODE = 1
PAGESIZE = 64
READ_LOCK = lhlh hlll llll llll xxxx xxxx xxoo oooo
WRITE_LOCK = hlhl hhll hhhx xxxx xxxx xxxx hhii iiii
LOCK_MESSAGE = xxxx11 - no lock
LOCK_MESSAGE = xxxx10 - write protected
LOCK_MESSAGE = xxxx00 - read/write protected
LOCK_MESSAGE = BTLKxx - Boot lock
READ_FUSES = lhlh llll llll llll xxxx xxxx oooo oooo
WRITE_FUSES = hlhl hhll hlhl llll xxxx xxxx iiii iiii
FUSES_MESSAGE = 0xxxxxxx - BODLEVEL 4V (default 2.7V)
FUSES_MESSAGE = x0xxxxxx - brownout detection enabled
FUSES_MESSAGE = xxSUxxxx - reset delay
FUSES_MESSAGE = xxxxCKSE - clock select
WRITE_HIGH_FUSES = hlhl hhll hlhl hlll xxxx xxxx hili iiii
READ_HIGH_FUSES = lhlh hlll llll hlll xxxx xxxx oooo oooo
HIGH_FUSES_MESSAGE = 1xxxxxxx - OCD disabled
HIGH_FUSES_MESSAGE = x0xxxxxx - JTAG enabled
HIGH_FUSES_MESSAGE = xx0xxxxx - serial programming enabled
HIGH_FUSES_MESSAGE = xxx0xxxx - CKOPT max
HIGH_FUSES_MESSAGE = xxxx0xxx - eeprom not erased
HIGH_FUSES_MESSAGE = xxxxxBZx - boot size
HIGH_FUSES_MESSAGE = xxxxxxx0 - reset at boot loader
WRITE_EXTD_FUSES =
READ_EXTD_FUSES =
EXTD_FUSES_MESSAGE =
READ_CALIBRATION = llhh hlll llxx xxxx llll llll oooo oooo
CALIB_MESSAGE = four calibration bytes

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.