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
>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.
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
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)
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
>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.
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
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.
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
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.
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.