Forum: Mikrocontroller und Digitale Elektronik Problem Atmega 644P Programmierung


von Ralf R. (ralf02)


Lesenswert?

Hallo,

ich habe ein Problem mit der Programmierung eines ATMega644P.

Ich verwende als Software avrdude 5.11 mit der Benutzeroberfläche AVR 
Burn-O-Mat 2.1.1.

Als Programmieradapter habe ich den Diamex AVR USB-ISP Programmer, die 5 
Volt für den Atmega werden durch den ISP-Programmer bereit gestellt.

Im Burn-O-Mat habe ich als AVR Typ den ATmega644 eingestellt (der 644P 
ist nicht in der Auswahl).
Für avrdude habe ich als Protokoll stk500v2 eingestellt.
Der virtuelle com-port wird erkannt.

Der Atmega sitzt bereits in der Schaltung, in der er nach der 
Programmierung arbeiten soll.
Die 6 Leitungen des ISP-Steckers (MOSI, MISO, Reset, SCK, 5V und GND) 
habe ich an die entsprechenden Pins des 644P gelegt.

Wenn ich nun mit dem AVR Burn-O-Mat die fuses auslesen will, kommt 
folgende Meldung:

C:\avrdude\avrdude.exe -C C:\avrdude\avrdude.conf -p m644 -P com12 -c 
stk500v2  -U efuse:r:C:\....

avrdude.exe: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 
0.00s

avrdude.exe: Device signature = 0x1e01ff
avrdude.exe: Expected signature for ATMEGA644 is 1E 96 09
             Double check chip, or use -F to override this check.

avrdude.exe done.  Thank you.

Die gelesene Device Signatur ändert sich bei jedem Versuch, irgendwann 
scheitert dann bereits die Initialisierung.

Wo könnte das Problem liegen ?

Grüße,
Ralf

von holger (Gast)


Lesenswert?

>Wo könnte das Problem liegen ?

1) Du hast nicht alle GND angeschlossen.
2) AVCC nicht angeschlossen.
3) Keine Abblockkondensatoren an VCC GND.
4) ISP Takt zu hoch.
5) 5m oder mehr ISP Kabel.

An irgendwas von dem da oben wirds schon liegen.

von Ralf R. (ralf02)


Lesenswert?

Hi,

Danke für die Hinweise.
- Pins 11, 31 des 644P liegen auf GND
- An AVCC (Pin30) liegen 5 Volt
- 0,1 uF Abblockkondensatoren habe ich eingebaut
- das ISP-Kabel ist 15 cm lang

Den ISP-Takt weiß ich nicht. Wo stellt man den ein, wie hoch darf er 
sein ?

Grüße,
Ralf

von Hans J. (step_up_mosfet)


Lesenswert?

Ich nutze auch die ATmega644P und den AVR8-burn-o-Mat

Er versucht einen ATmega644 (ohne P) zu brennen, da deiner aber ein "P" 
hat (also einen zweiten UART) stimmt die Signatur nicht überein.
Das schöne ist dass das nichts macht, nutze einfach die -F Option und du 
kannst deinen Chip ohne Probleme flashen.

Also geh auf "Settings" -> AVRDude -> und trage unter "additional 
Options" ein "-F" ein. (ohne die Anführungsstriche)

von Ralf R. (ralf02)


Lesenswert?

Hallo,

mit der -F Option konnte ich jetzt die Fuses auslesen.

Was mich wundert, ist, dass bei jedem Auslesen der Fuses eine andere
Device signature, z.B. 0xffff2c oder 0xffffff angezeigt wird.

Sollte nicht immer die gleiche Signatur des 644P ausgelesen werden oder 
kann ich das ignorieren ?

Grüße,
Ralf

von holger (Gast)


Lesenswert?

>Also geh auf "Settings" -> AVRDude -> und trage unter "additional
>Options" ein "-F" ein. (ohne die Anführungsstriche)

Von -F sollte man die Finger lassen. Bringt überhaupt nichts
und ist sogar gefährlich. Wenn dann würde ich mal ein -B10
versuchen um den ISP Takt zu verringern.

von Ralf R. (ralf02)


Lesenswert?

Hallo,

ich habe jetzt mit -B10 den Takt verringert. Jetzt erhalte ich bei jedem 
Fuse-Auslesen die Signatur 0x1e960a. Der Burn-O-Mat bricht dann 
natürlich mit der o.a. Fehlermeldung ab, weil die erwartete 
Device-Signatur ja 0x1e9609 ist.

Kann ich bei den Additional Options die beiden Befehle

-B10 -F

einfach kombinieren ?

Grüße,
Ralf

von Hans J. (step_up_mosfet)


Lesenswert?

Ralf R. schrieb:
> -B10 -F
>
> einfach kombinieren ?

Ja.

Also dass er dir bei jedem auslesen eine andere Device-Signatur 
ausgegeben hat ist natürlich falsch und wird mit dem zu hohen Takt 
zusammen gehangen haben.
Wenn der Programmer nicht die richtige Signatur ausliest (egal ob er sie 
nun kennt oder nicht) hat er keinen richtigen Zugriff auf den Chip.

Wenn ich mit Eclipse + AVR-Plugin + AVRDude meine 644P Chips beschreibe 
benötige ich die -F Option nicht.

von Ralf R. (ralf02)


Lesenswert?

So jetzt habe ich mal versucht, die Fuses nach dem Einlesen verändert zu 
schreiben, es gab jedoch einen Write-Error.

Die Tabelle zeigt die Programmierten (x) Fuses (Bit = 0) im 
Auslieferungszustand und die Änderungen, die ich versucht habe zu 
schreiben:

Name            Default    Änderung
--------------------------------------------------
Unused_E7
Unused_E6
Unused_E5
Unused_E4
Unused_E3
--------------------------------------------------
Bodlevel2
Bodlevel1                     x
Bodlevel0
--------------------------------------------------
OCDEN
JTAGEN              x         x
SPIEN               x         x
WDTON
--------------------------------------------------
EESAVE                        x
BOOTSZ1             x         x
BOOTSZ0             x
BOOTRST                       x
---------------------------------------------------
CKDIV8              x
CKOUT
SUT1
SUT0                x         x
---------------------------------------------------
CKSEL3              x
CKSEL2              x
CKSEL1
CKSEL0              x

In der späteren Anwendung wird der Atmega mit einem externen 8 MHz Quarz
betrieben.

Der Burn-O-Mat hat bei den Fuses-Einstellungen noch weitere 
Einstellungsoptionen:
Brown-out-Detection, wo man Spannungsbereiche auswählen kann
Oszillator/Clock Options, wo ich bei Low-Power Crystal Oszillator den 
Bereich 3-8 MHz angeklickt habe.

Wo könnte das Problem liegen ?

Grüße,
Ralf

von Stefanus (Gast)


Lesenswert?

Benutze avrdude auf der Kommandozeile ohne Burn-O-Mat. Dann hast Du 
schonmal eine mögliche Fehlerquelle weniger.
Benutze den Parameter -B10, um die Taktrate herabzusetzen.
Benutze den Low-Power Oszillator nur, wenn Du sicher bist, dass dein 
Quartz damit funktioniert.
Wenn avrdude den Atmega644P nicht unterstützt, brauchst Du ein Update 
für die avrdude.cfg Datei.

von spess53 (Gast)


Lesenswert?

Hi

>Jetzt erhalte ich bei jedem
>Fuse-Auslesen die Signatur 0x1e960a. Der Burn-O-Mat bricht dann
>natürlich mit der o.a. Fehlermeldung ab, weil die erwartete
>Device-Signatur ja 0x1e9609 ist.

0x1e9609 -> ATMega644 und ATMega644A
0x1e960a -> ATMega644P und ATMega644PA

Was steht denn auf deinem ATMega nun wirklich drauf.

MfG Spess

von Ralf R. (ralf02)


Lesenswert?

Hallo,

auf dem Atmega steht 644P.

Das Kommando -B10 zum Setzen des ISP-Taktes auf 1 MHz habe ich gegeben.
Eine conf-Datei für avrdude, die den 644P enthält, konnte ich nirgendwo 
finden. Ich habe aber gelesen, dass der 644P abwärtskompatibel zum 644 
sein soll und darüber hinaus werden die besonderen Features des 644P in 
der vorgesehenen Anwendung nicht benötigt.

Hier mal das Protokoll vom Fuses-Schreiben:

C:\avrdude\avrdude.exe -C C:\avrdude\avrdude.conf -p m644 -P com12 -c 
stk500v2 -B10 -F -u -U efuse:w:0xFD:m -U hfuse:w:0x92:m -U 
lfuse:w:0xEF:m

avrdude.exe: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 
0.00s

avrdude.exe: Device signature = 0x1e960a
avrdude.exe: Expected signature for ATMEGA644 is 1E 96 09
avrdude.exe: reading input file "0xFD"
avrdude.exe: writing efuse (1 bytes):

Writing |  ***failed;
################################################## | 100% 0.11s

avrdude.exe: 1 bytes of efuse written
avrdude.exe: verifying efuse memory against 0xFD:
avrdude.exe: load data efuse data from input file 0xFD:
avrdude.exe: input file 0xFD contains 1 bytes
avrdude.exe: reading on-chip efuse data:

Reading | ################################################## | 100% 
0.00s

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

avrdude.exe done.  Thank you.

Habe ich da vielleicht bei der Fuses - Programmierung einen Fehler 
gemacht ?
Habe die Fueses ausgelesen, dann die Häkchen entsprechend der Anleitung 
gesetzt / Gelöscht und mit "write" zurückgeschrieben.

Wenn ich die Fuses erneut einlese, sind sie wieder wie im Neuzustand.

Grüße,
Ralf

von Ralf R. (ralf02)


Lesenswert?

Nun habe ich die Lösung gefunden. Es musste erst der Bootloader in den 
Flash-Speicher geladen werden, und dann die Fuses geändert werden. Jetzt 
funktioniert alles wie es soll.

Danke nochmals für die Hilfe.

Grüße,
Ralf

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.