PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : "Entering programming mode.. FAILED"; AVRISP MKII



GandalfX86
12.11.2006, 14:33
Ich habe ein kleines Problem mit meinem neuen AVRISP MKII.

Auf einem Steckbrett habe ich die Standardschaltung aufgebaut, und wollte ein einfaches Programm auf einen ATMEGA32 übertragen. Als ich aber im AVR-Studio den AVRISP verbunden hatte bekam ich in der kleinen Konsole des Dialogs diese Meldungen:

Setting mode and device parameters.. OK!
Entering programming mode.. FAILED!
Leaving programming mode.. OK!

Und folgende Fehlermeldung:
http://www.raschen.org/Elektronik/Fehler.JPG

Woran kann das liegen?

chr-mt
12.11.2006, 14:57
Hi,
die Fehlermeldung besagt ja, daß die "programming frequency" evntuell zu hoch ist und maximal 1/4 der Taktfrequenz sein soll.
Wenn du einen AVR mit 1MHz Takt hast, solltest du also nur mit max. 250 KHz programmieren.

Gruß
Christopher

tobimc
12.11.2006, 19:33
Hi

Bei mir tritt dieser Fehler auch neuerdings auf (allerdings mit dem alten ISP).
Bei mir hilft den ISP ausstecken, einstecken ; und wenn das nicht hilft, einfach das AVRstudio neu starten.

VLG Tobi

GandalfX86
12.11.2006, 20:31
Frequenz habe ich schon kontrolliert, der ISP läuft mit 1MHz, der ATMEGA32 mit 8MHz(interner Oszillator).

Mit ein- und ausstecken bzw. Neustart habe ich es auch schon versucht, aber es ändert nichts. Firmware ist auch die aktuellste drauf.
Könnte das evtl. an dem AVR liegen? Der ist jedenfalls fabrikneu, und noch nie beschrieben worden.

Es kann natürlich bei mir auch ein Anfängerfehler sein. Ich habe jedenfalls nur ein neues Projekt erstellt (auswahl Simulation, Atmega32), ein paar Zeilen Assembler verfasst(die fehlerfrei kompiliert werden, und in der Simulation auch laufen), und dann über den Connect Dialog versucht das Programm auf den AVR zu schreiben, wo jedoch diese Fehlermeldung auftaucht. Das einzige, was ich da noch umgestellt hatte war die ISP Frequenz (von irgendeinem Krummen wert um 1MHz auf exakt 1MHz, und den AVR über 'Fuses' auf 8MHz intern konfiguriert)

Ach ja; ich glaub ja kaum das der Assembler-Code etwas mit dem Fehler zu tun haben kann, aber trotzdem:

.NOLIST
.INCLUDE "m32def.inc"
.LIST
.CSEG


MAIN:
LDI R16,0b11111111
OUT DDRC,R16

LOOP:
LDI R16,0x00
OUT PORTC,R16
LDI R16,0xFF
OUT PORTC,R16
RJMP LOOP

RJMP MAIN


Ich weiß, ziemlich sinnlos, aber es sollte ja auch nur durch eine an einem PIN von PortC angeschlossene flakernde LED gezeigt werden, dass der AVR funktioniert.

chr-mt
12.11.2006, 20:44
und den AVR über 'Fuses' auf 8MHz intern konfiguriert
?
Also ging der MK II schon mal ?
Sonst hättest du ja die Fuses nicht umstellen können..
Bist du denn sicher, daß die auch wirklich gesetzt sind ?

Eventuell werden die Fuses ja falsch ausgelesen.
Das kommt leider bei zu hoher ISP Frequenz vor.

Probiere doch mal mit einer ganz niedrigen Frequenz zu programmieren.


Gruß
Christopher

GandalfX86
12.11.2006, 20:49
Ich hatte den MKII noch nicht am laufen; ausgelesen hatte der 16MHz extern(wobei ich noch nichteinmal weiß, ob der AVR wirklich ausgelesen wurde, oder ob das einfach Standardeinstellungen von AVR-Studio waren).
Ich hatte dann versucht umzustellen(auf 8MHz intern), aber ich glaube kaum, dass der das übertragen hat, da immer wieder diese Fehlermeldung auftauchte.

Die Idee mit der ganz niedrigen Frequenz war mir auch schon gekommen, aber führte leider zu dem gleichen Ergebnis.

GandalfX86
15.11.2006, 22:16
Hat wirklich niemand eine Idee woran das sonst liegen kann? Eigentlich kann ich mir nicht vorstellen, das mein AVRISP defekt ist.

Ich kenne mich zwar sonst im Bereich Elektronik ein wenig aus (studiere E-Technik im 3. Semester, und hab sonst auch schon ein paar Dinge zusammengelötet), aber da der Bereich Microcontroller und speziell AVR für mich noch recht neu ist habe ich leider keine Ahnung wie ich dieses Problem lösen kann. Ich werde am Wochenende nochmal alles systematisch aufbauen und testen, und falls das nicht hilft, bleibt wohl nur noch der ATMEL Support.

m.a.r.v.i.n
16.11.2006, 08:04
Hi,

Das Problem könnte an der Chip Revision liegen.
Im ct-Bot Forum (http://www.ctbot.de/forum/wechsel-von-atmega32-0546-auf-0609b-t509.html) hatten wir dasselbe Problem.

Problem ist wohl, dass sich die Fuses bei fabrikfrischen Chip mit 06xxx Revision nicht korrekt lesen lassen.
Probier mal:
* ISP Frequenz so niedrig wie möglich einstellen (max. 250kHz).
* Danach einen Chip Erase ausführen
* Dann kann man die Fuses setzen und die ISP Frequenz wieder hochsetzen und alles ist OK.

Gruß m.a.r.v.i.n

ogni42
16.11.2006, 08:15
Bist Du sicher, dass der Chip nicht mit 1MHz läft. Hab meinen ISP auf 250kHz stehen und damit keine Probleme.

GandalfX86
17.11.2006, 07:51
* ISP Frequenz so niedrig wie möglich einstellen (max. 250kHz).

hab ich gemacht: minimal 6.478 kHz waren möglich, alles darunter wurde mit einem Fehler quittiert



* Danach einen Chip Erase ausführen

habe bei "Auto" ein Häckchen bei "Erase Device" gesetzt und bin auf "Start" gegangen. Alledings gab es wieder den bekannten Fehler:

Setting mode and device parameters.. OK!
Entering programming mode.. FAILED!
Leaving programming mode.. OK!


Irgendetwas scheint ja bei der Kommunikation zwischen AVR und ISP nicht zu funktionieren. Könnte das evtl. einfach an der (zugegebenermaßen etwas hingemurksten) Kabelverbindung liegen? Ich hatte mir nämlich einen Adapter zusammengelötet, um von der 6 Poligen Verbindung des AVRISP auf den bekannten 10 Poligen Stecker zu kommen.

Cluni
17.11.2006, 08:53
Bist du sicher, dass beim AVR nicht die externe Clock ausgewählt ist, extern aber kein Quarz-/Oszillator dran ist? Dann müsstest du der Schaltung entweder eine externe Clock geben oder aber den µController austauschen...

Hast du nicht mal eine andere µController-Schaltung, bei der du mal testen kannst, ob du Kontakt bekommst!?

m.a.r.v.i.n
17.11.2006, 09:02
Hi,


habe bei "Auto" ein Häckchen bei "Erase Device" gesetzt

nein, so wird das nichts. Einfach bei 'Program' auf 'Erase Device' klicken.

Gruß m.a.r.v.i.n

GandalfX86
17.11.2006, 18:55
Ach so.

Aber leider ändert das nichts an dem Problem: Immer noch die gleiche Fehlermeldung.

Cluni
18.11.2006, 00:02
Du hast jetzt aber nur auf den letzten Post geantwortet, oder?!

GandalfX86
18.11.2006, 11:02
Oh, sorry ich hatte dich glatt übersehen.

Also ich habe einfach die Grundschaltung ohne externen Oszillator aufgebaut:
https://www.roboternetz.de/wissen/images/thumb/c/cf/Avrtutorial_grundschaltung_mitisp.gif/500px-Avrtutorial_grundschaltung_mitisp.gif
Wobei ich natürlich die Pinbelegung des Steckers angepasst habe.

Eigentlich sollte das doch laufen, da der AVR doch (soweit ich weiß) von der Fabrik her auf den internen Oszillator mit 1MHz eingestellt ist. Und umstellen kann ich den Controller ja erst garnicht, denn der will ja noch nichteinmal die Fuses auslesen.

Ich hab jetzt auch ein ganz neues Kabel gebastelt, aber das ändert auch nichts an dem Problem. Langsam fürchte ich, dass der AVRISP einfach defekt ist. Denn der AVR ist fabrikneu und sollte deshalb ja wenigstens erkannt werden, der ISP hat die neueste Firmware, und die Kontroll-LEDs leuchten auch beide grün.

Übrigends: Ich habe gerade einfach mal den AVR aus der Schaltung rausgenommen. Die Fehlermeldung war exakt die gleiche, wie die als der AVR noch in der Schaltung war. Das heißt für mich: Der ISP hat erst garnicht gemerkt, dass da überhaupt ein Controller angeklemmt war.

Dummerweise habe ich keinen zweiten AVR hier, sonst könnte ich ja Testen, ob der erkannt wird. Falls nein müsste nämlich - was auch meine Vermutung ist - der ISP defekt sein.

GandalfX86
06.07.2007, 22:35
Nach langer Zeit habe ich nochmal versucht meinen ISP ans laufen zu bekommen. Diesmal mit einem neuen mega32. Die Fehlermeldung taucht nicht mehr auf, und ich kann den Controller programmieren. Jedenfalls erhalte ich folgende Meldungen:

Reading FLASH input file.. OK
Setting mode and device parameters.. OK!
Entering programming mode.. OK!
Erasing device.. OK!
Programming FLASH .. OK!
Reading FLASH .. OK!
FLASH contents is equal to file.. OK
Leaving programming mode.. OK!

Sieht also alles nach einem erfolgreichen Vorgang aus.

Das einzige Problem, dass ich jetzt habe, ist das das oben genannte Programm nicht zu laufen scheint. Jedenfalls kann ich kein Flackern bei der LED feststellen. Ich habe dann mal nachgemessen (mit dem Multimeter, habe leider kein Oszilloskop) und nur feststellen können dass an allen Ports eine Ausgangsspannung von 3,8V anliegt. Ich hab dann auch mal versucht einen Port konstant auf 0xFF oder 0x00 zu legen, mit dem gleichen Ergebnis. Ich nehme an, dass das Programm erst garnicht gestartet wird, aber was mache ich falsch? Ist der Code nicht in Ordnung?

Gucky
07.07.2007, 07:15
Hallo Gandalfx86

dein Programm schaltet sehr schnell dein Port C ein- und aus, weil du keine (Zeit)Schleife eingebaut hast. Den Wechsel wirst du mit einem Multimeter nicht erfassen können.
Natürlich müsste das Programm dann auch auf dein Controller übertragen werden können. Probiere doch auch nochmal die Fuses auszulesen um zu sehen, ob du mit den Controller kommunizieren kannst.

Gruß Gucky. O:)

GandalfX86
07.07.2007, 16:04
Die Kommunikation mit dem Controller läuft ohne Probleme. Nur der Controller scheint das Programm, dass ich in den Flash lade nicht zu starten. Die Einstellung der Fuses habe ich mal angehangen.

Ich habe jetzt mal dieses Programm verwendet:


.NOLIST
.INCLUDE "m32def.inc"
.LIST
.CSEG


MAIN:
LDI R16,0b11111111
OUT DDRA,R16
OUT DDRB,R16
OUT DDRC,R16

LOOP:
LDI R16,0x00
OUT PORTA,R16
OUT PORTB,R16
LDI R16,0xFF
OUT PORTC,R16
RJMP LOOP

RJMP MAIN

Nun sollte man ja eigentlich annehmen, dass nach dem Verbinden mit dem Netzteil an den Pins von Port A und B Low-Pegel anliegen, und an Port C High-Pegel. Das Ergebnis ist aber das selbe wie vorhin: überall (nach Anzeige des Multimeters) 3,84V. Mir ist schon klar, dass ein Multimeter nicht das richtige Werkzeug dafür ist, aber da ja hier konstante Ausgangssignale anliegen sollten müsste man ja wenigstens einen Unterschied bei den B Ports und C feststellen können, was aber nicht so ist.
Als Schaltung verwende ich im übrigen einfach die Minimalbeschaltung mit 100nF Abblockkondensator und 1K Widerstand auf einem Steckbrett aufgebaut. An der Schaltung dürfte es ja eigentlich nicht liegen.

Gucky
09.07.2007, 16:06
Hallo Gandalfx86

Dein AVRISP MKII kenne ich zwar nicht aber es wird sich hierbei auch um einen ISP-Programmieradapter handel. Ich selber benutze einen selbstgebauten, den ich mit Ponyprog2000 bediene, was aber vom Programierablauf das gleiche sein dürfte.
Nur mit einem Multimeter an einem Prozessor zu messen ist zwar nicht so das gelbe vom Ei, aber vieleicht kann ich dir ein paar Tips geben, damit du die mögliche Fehlerquelle etwas einkreisen kannst.
Hierzu kannst du mit dem Multimeter an den Anschlüssen 6 (MOSI), 7 (MISO), 8 (SCK) und 9 (Reset) den Pegel jeweils gegen GND messen und merken. Während der Programmübertragung sollten sich diese Pegel verändern. Besser kann man das ganze mit LED's beobachten. Hierzu habe ich die Kathode einer LED an den jeweiligen Ausgang des Controllers und die Anode über einen 1K-Widerstand nach VCC(+5V) angeschlossen.
Nach der Programmübertragung sollte der Reset/-Pin (9) auf +5V liegen. Möglicherweise muß hier für den Normalbetrieb noch die ISP-Schnittstelle von deiner Anwendung abgezogen werden.
Sollte alles so sein könnte es an dem Controller liegen, aber der ist ja glaube ich neu. (ATMEGA32-DIP?)
Melde dich nochmal, auch wenn ich dir nicht weiterhelfen konnte.

Gruß Gucky. O:)

GandalfX86
09.07.2007, 19:07
Dein AVRISP MKII kenne ich zwar nicht aber es wird sich hierbei auch um einen ISP-Programmieradapter handel.

ganz genau



Hierzu kannst du mit dem Multimeter an den Anschlüssen 6 (MOSI), 7 (MISO), 8 (SCK) und 9 (Reset) den Pegel jeweils gegen GND messen und merken. Während der Programmübertragung sollten sich diese Pegel verändern. Besser kann man das ganze mit LED's beobachten. Hierzu habe ich die Kathode einer LED an den jeweiligen Ausgang des Controllers und die Anode über einen 1K-Widerstand nach VCC(+5V) angeschlossen.
Nach der Programmübertragung sollte der Reset/-Pin (9) auf +5V liegen


werde ich am Wochenende mal versuchen, falls ich zwischen dem Klausur-Lernen noch dazu komme(bin leider grad nicht zuhause, und kann das also nicht ausprobieren)



Möglicherweise muß hier für den Normalbetrieb noch die ISP-Schnittstelle von deiner Anwendung abgezogen werden.


habe ich sowieso immer gemacht, und dann von der Stromversorgung getrennt und neu verbunden



Sollte alles so sein könnte es an dem Controller liegen, aber der ist ja glaube ich neu. (ATMEGA32-DIP?)

fabrikneu von Reichelt (der erste, den ich verwendet hatte war ebenfalls fabrikneu, lässt sich mit meinem ISP aber erst garnicht ansprechen)



Melde dich nochmal, auch wenn ich dir nicht weiterhelfen konnte.

werde ich machen; vielen Dank schonmal für die Hilfe

Wie sieht eigentlich der Flash nach den Programmieren aus? Ich hatte nämlich den Flash nach dem Programmieren mal ausgelesen, und mit der hex-Datei verglichen. Dabei kann man im oberen Teil der ausgelesenen Datei irgendwie ein paar Bruchstücke aus der Datei die vom Assembler erstellt wurde erkennen. Es kann natürlich sein dass das nur Standardcode ist der da immer steht, aber vielleicht kann man ja an der Datei sehen, ob das Programm richtig übertragen wurde. Ich habe die Dateien mal angehangen.

Gucky
10.07.2007, 07:50
Hallo Gandalfx86
Moglicherweise ist auch dein AVRISP MKII defekt.
Siehe hierzu den Artikel aus nachfolgendem Link direkt auf der ersten Seite unter Motivation.

http://www.ullihome.de/index.php/USBAVR-ISP/de

Gruß Gucky. :?

m.a.r.v.i.n
10.07.2007, 08:53
Hallo Gandalfx86,

das ausgelesene Hex-File stimmt genau mit dem von AVRStudio erzeugten Hex-File überein. Also ist der ISP wohl i.O. Der Fehler liegt vieleicht doch in deinem Programm. Bin aber kein Assembler Experte.
Schau dir mal die AVR Assembler Einführung im RN-Wissen an.
https://www.roboternetz.de/wissen/index.php/AVR_Assembler_Einf%C3%BChrung

Vieleicht geht es nicht ohne Reset Funktion und Platzhalter für die Interrupt Vektoren.

JonnyP
11.07.2007, 04:01
Ich sehe in deinem Programm nicht, das du den Stackpointer initialisierst.

GandalfX86
11.07.2007, 23:12
So ich habe gerade mal die Schaltung auf einer Lochrasterplatine aufgelötet (genauso wie auf dem Steckboard), und dann folgenden Code in den Flash geschrieben


.NOLIST
.INCLUDE <m32def.inc>
.LIST
.CSEG

RESET:
jmp INIT

.ORG INT_VECTORS_SIZE
INIT:
ldi r24,high(RAMEND)
out SPH,r24
ldi r24,low(RAMEND)
out SPL,r24


MAIN:
LDI R16,0b11111111
OUT DDRA,R16
OUT DDRB,R16
OUT DDRC,R16

LOOP:
LDI R16,0x00
OUT PORTA,R16
OUT PORTB,R16
LDI R16,0xFF
OUT PORTC,R16
RJMP LOOP

RJMP MAIN

Ende:
rjmp Ende


und was soll ich sagen: an PortC 4,8V und PortA und B auf 0V.
Ich kann es kaum glauben, es läuft.

Wo das Problem lag kann ich nicht so genau sagen, aber ich vermute, dass mein Steckboard-Aufbau nicht sauber war.
Ich bedanke mich für alle Bemühungen hier im Forum mir beim ARV-Start zu helfen.
Wenn ich alle Klausuren in der Uni geschrieben habe werde ich mich dann mal etwas intensiver mit AVR-Assembler beschäftigen und vielleicht kann ich ja auch bald mein erstes Roboter-Projekt starten.