Forum: Mikrocontroller und Digitale Elektronik ISP funktioniert nur beim ersten Mal


von David G. (dgschwend)


Lesenswert?

Hallo zusammen!

Ich habe ein eigenartiges Problem beim Programmieren meines ATmega8. Ich 
verwende einen AVR Dragon im ISP-Modus, dieser ist mit meinem 
selbstgebauten Testboard verbunden. Dort drin sitzt ein ATmega8.

Das Problem: Das ISP funktioniert nicht richtig. Der erste ISP Befehl 
nach einem Reset wird korrekt ausgeführt und liefert das richtige 
Resultat. Danach kommt aber nur noch 0x00 zurück, alle weiteren ISP 
Befehle liefern nur noch 0x00 bis ich den Controller wieder resette 
(Reset Pin Low setzen oder Spannungsversorgung abtrennen).

Beispiel: Ich schliesse das Board an, lese die Device Signature aus, 
diese kommt korrekt als 0x1E 0x93 0x07 zurück. Dann klicke ich nochmals 
auf <Read Signature>, diesmal kommt nur 0x00 0x01 0x02 retour. Ab jetzt 
kommt nur noch 0x00 0x01 0x02 zurück.
Das gleiche bei den Fuses, das erste Mal lesen ist korrekt, ab dann nur 
noch 0x00 0x00. Auch das Schreiben der Fuses funktioniert, aber nur beim 
ersten Mal.

Was ich schon versucht habe:
- ATmega8 durch anderen ATmega8 und einen ATmega8A ersetzt, Resultat 
bleibt gleich.
- MCU direkt in ZIF-Sockel auf dem Dragon programmiert, Resultat bleibt 
gleich.
- Firmware im AVRDragon neu uploaded, Resultat bleibt gleich.

Es scheint fast, als ob es an meinem Dragon liegt. Ich habe allerdings 
sonst nur noch ein JTAGICE mkII zum Testen, und dieser unterstützt den 
ATmega8 nicht.

Kann mir jemand weiterhelfen? Hat jemand eine Idee was hier los sein 
könnte?

Herzlichen Dank!
David Gschwend

von Lowtzow .. (lowtzow)


Lesenswert?

so ein ähnliches problem hatte ich auch mal, mach mal ein erase vorm 
programmieren. bei mir lags damals am avrisp mit so nen stk200 
programmer und nen atmega328, hab mir dann den avrisp mkII geholt und 
mit avrstudio keine probleme.

eventuell mal anderes programm tool testen.

von David G. (dgschwend)


Lesenswert?

Hmm... wie gesagt, habe leider sonst nur das JTAGICE mkII, was ja 
blöderweise ISP nicht richtig unterstützt...
Und jetzt extra noch nen USBISP bauen finde ich auch etwas übertrieben. 
Fällt da niemandem spontan etwas ein? Muss es denn wirklich am Dragon 
liegen?

von Lowtzow .. (lowtzow)


Lesenswert?

hast du das mit dem chip erease probiert vorm programmieren?

von David G. (dgschwend)


Lesenswert?

Ja, Chip Erase habe ich gemacht. Die Situation bleibt genau gleich. Ich 
werde heute versuchen, den ATmega88 mit dem JTAGICE zu flashen. Wenn das 
geht, liegt's definitiv am Dragon. Dann muss ich wohl mal bei Atmel 
anklopfen...

von Detlev T. (detlevt)


Lesenswert?

Hallo David,

mit welcher Geschwindigkeit betreibst du denn die ISP-Schnittstelle? 
Fabrikfrische ATMEGA8 haben nur einen Systemtakt von 1MHz, deshalb darf 
die ISP-Schnittstelle da nicht mit mehr als 250kHz betrieben werden.

Gruß, DetlevT

von Joe (Gast)


Lesenswert?

Prüfe mal, ob der Reset-Pin nach dem Programmieren auf "1" gesetzt ist ?

Oder bau dir ein sehr einfaches ISP-Kabel für eine parallele 
Schnittstelle.

von David G. (dgschwend)


Lesenswert?

Die ISP Frequenz stimmt schon, an der kanns ja auch nicht wirklich 
liegen wenn der erste Befehl jeweils funktioniert.
ABER: Am Reset-Pin habe ich komischerweise nur 0.9V, sobald der 
ISP-Stecker eingesteckt wird!? Am Reset-Pin hängt sonst nur noch ein 
10k-Pullup nach 3.3V. Also doch die Reset-Schaltung vom AVR Dragon 
defekt? Oder zu schwach um den 10k-Pullup nach unten zu ziehen?

von David G. (dgschwend)


Lesenswert?

Hmm... mit 30k und mit 4.7k von Reset nach Vcc gehts auch nicht. Am ISP 
RESET Pin des Dragons messe ich genau diese 0.9V wenn nichts 
angeschlossen ist. Na super, dann hat's mir wohl die Hardware irgendwie 
gebraten...

von David G. (dgschwend)


Lesenswert?

Ich bin scheinbar nicht der einzige mit diesem Problem, habe den Thread 
gerade erst gefunden. Beitrag "AVR Dragon: Nur 1. Aktion geht nach Start vom AVR-Studio"
Werde es dann auch nochmal mit AVRStudio 4.17 versuchen wenn ich wieder 
zu Hause bin.

von Hase (Gast)


Lesenswert?

Hi,

ich habe hier bei einer Serienprüfung das gl. Phänomen mit dem Mega32.

Etwa jeder 5. Controller lässt sich nur einmal auslesen und dann meldet 
er als Signatur 0x00 0x01 0x02. Nach wegnahme und wiederanlegen der 
Spannung funktioniert wieder ein einziges mal das auslesen der Fuses und 
dann ist wieder Schicht im Schacht.. :-(

Irgendwelche Ideen?

Programmiert wird über AVRISPMKII und WinAVR - beides in altuellen 
Softwareständen.

von Hase (Gast)


Lesenswert?

So..

Nach herabsetzen der ISP-Frequenz auf 6,xxkHz und >1000 Mega32 später, 
ist die Ausfallrate auf unter 2% gefallen..

Hat hierfür jemand eine sinnvolle Erklärung? :-/

Bin gespannt, was die Chipanalyse bei Atmel ergibt.. ;-)

von Andreas H. (andreas_h16)


Lesenswert?

Hallo,

hat inzwischen einer eine Lösung für o.g. Problem gefunden, oder war das 
der Tod des Dragon ? Meiner zeigt inzwischen auf allen meinen Testboard 
mit unterschiedlichsten AVR Typen das gleiche Symptom. DieReset Leitung 
blaubt dauerhaft unten. Firmwareupdate hat nix geholfen :-(

SW: AVR Studio 4.18 und 5

MfG,
Andreas

von David G. (dgschwend)


Lesenswert?

Hallo!

Ich hab nach einiger Zeit aufgegeben und benutze jetzt meinen Dragon nur 
noch für JTAG auf den grösseren Controllern. Was vielleicht helfen 
könnte: http://www.aplomb.nl/TechStuff/Dragon/Dragon.html scheint genau 
dieses Problem zu behandeln. Ganz unten auf der Seite hat es einen Fix, 
ich hab es jedoch nicht probiert.
Für ISP hab ich mir inzwischen einen USBASP gebaut 
(http://www.bastli.ethz.ch/index.php?page=bausaetze%2FuJTAG). 
Funktioniert tadellos, wenn auch leider ohne DebugWire.

Grüsse
David

von Schaltungswächter (Gast)


Lesenswert?

Andreas H. schrieb:
> hat inzwischen einer eine Lösung für o.g. Problem gefunden, oder war das
> der Tod des Dragon ?

Ja, scheinbar sterben die von Unterspannung. (!!!)

Wie sieht denn Dein Chip aus?

Auch geschmort? (voltage stabilizer has puffed its magic smoke)

http://www.aplomb.nl/TechStuff/Dragon/stabilizer2.jpg

von David G. (dgschwend)


Lesenswert?

Optisch hab ich gar nichts bemerkt... Auslöten übrigens unbedingt 
(vorsichtig!) mit dem Heissluftföhn, sonst sieht deine Platine nachher 
auch aus als wär ein Meteorit eingeschlagen. Der Chip hat ein exposed 
thermal pad auf der Unterseite;-)

von Schaltungswächter (Gast)


Lesenswert?

Da er eh hin ist, kommt der Dachrinnenlötkolben mit Spezialspitze dran.
Direkt auf das Gehäuse etwa 400°C mit hoher Wärmekapatität.

Mit Heissluft föne ich mir sonst das Hünerfutter davon.
Das ist mir zu gefährlich. 0206 wieder anlöten oder auch nur 
wiederfinden wenn davongeflogen, klappt eher nicht.

von Andreas H. (andreas_h16)


Lesenswert?

Hi,

vielen Dank für die Tipps. Da ich jetzt eh schon einen Tag versucht hab, 
durch FW-Updates, neues AVR dem Fehler auf die Spur zu kommen, hab ich 
mal den Dragonlair-Tip versucht.

Leider ohne Erfolg. Verhalten wie vorher.


Übrigens geht das Auslöten ganz einfach mit einem kleinen Trick: 
Vorsichtig mit einer scharfen Knipszange den oberen Teil des 
Chipgehäuses abzwicken um eine gute Wärmeleitung zum Thermalpad zu 
haben. Dann einen Tropfen Lötzinn auf den freigelegten Chip und die 
Beinchen und mit Absauger das Tierchen mit einem Saug entfernen.

Wie gesagt, mir hats leider nix gebracht, außer, daß die 
Referenzspannung vom Target nun 0.1V weniger angezeigt wird.

Ich hab wohl 50€ in den Sand gesetzt. Ich würde ja sogar zu einem 
teureren JTAG/ISP Programmer greifen, weiß aber nicht ob die genau so 
empfindlich sind.

MfG,
Andreas

von Michael H. (michael_h74)


Lesenswert?

So, ich bin jetzt auch "stolzer" Besitzer eines Dragon...

Die Gänsefüßchen, weil ich dasselbe Problem habe (der Drache is keine 5 
h alt...).

Zur Sache:
Ich habe im Pollin-Eval-Board v2.01 (noch ohne die Entprell-Mod) mal die 
Spannung von Reset - GND nachgeschaut, wenn er die falsche (0x00 0x01 
0x02) Signatur über ISP liest, liegt sie zwischen -0,3..-0,4 V.
Wenn er die richtige Signatur liest, sind es ca. 0,4..0,6 V.

Das komische dabei ist, wenn ich die Target-Spannung (geht auf dem Board 
nur bis max 4,6 V) auf 4,0 V oder niedriger senke, kann ich durch Druck 
auf einen der drei Taster unten die richtige Spannung zw. Reset und GND 
wiederherstellen.
Somit muss ich nur nach jedem Mausklick, bei dem etwas auf dem ISP 
geschieht, einen Taster drücken und kann weiter machen.

Das ganze ist reproduzierbar bei Target-Spannungen <= 4,0 V.
Getestet habe ich das mit nem ATmega16-16 und nem ATtiny2313-20.

JTAG funzt jedoch ohne Probleme bei 2 MHz.

Meine Kabel sind ca. 50 cm lang.

Die Dragon-Revision scheint A08-0396.D zu sein.
Auf dem Aufkleber mit der Seriennummer steht jedoch A09-0062/10.

//edith:
Spontan fallen mir 2 Fragen dazu ein:
Kann ich das mit nem Widerstand auf der Reset-Leitung am ISP-Kabel 
reparieren?
Kann ich das sonstwie schaltungstechnisch nutzen um den Drachen wieder 
zur korrekten Funktion zu überreden?

von spess53 (Gast)


Lesenswert?

Hi

>Das ganze ist reproduzierbar bei Target-Spannungen <= 4,0 V.

Was ist jetzt bei dir 'Targetspannung'? Der Dragon liefert keine 
Spannung. Du kannst nur die Spannung vom Board messen. Aber nicht mit 
dem Dragon einstellen. Damit der Dragon funktioniert muss dein Board mit 
Spannung versorgt werden und die Spannung vom Board muss am 
ISP-Anschluss anliegen.

MfG Spess

von Michael H. (michael_h74)


Lesenswert?

Ist mir klar.
Sorry wenns verquer ausgedrückt ist.

Target-Spannung ist die Spannung, die ich am Pollin-Board einspeise und 
die der Dragon ans AVR Studio zurückliefert.

Ich schalte an J5 des Pollin-Boards mein Netzteil 0..30 V DC.
Damit stelle ich Spannungen von 3..12 V ein, der LM7805 schraubt die ja 
auf 5 V runter und die nachgerichtete Gleichrichtung (zwar zwecklos, 
aber naja) knapst sich nochmals 0,4 V ab.
Deshalb bekomme ich maximal 4,6 V.

Stelle ich am Netzteil eine Spannung ein, bei der der LM7805 geringere 
Spannungen als 4 V nach der Gleichrichtung erzeugt, kann ich mit der 
"superduper"-Hardware-Entprellung scheinbar irgendwas machen, was die 
negative Spannung zw. Reset und GND wieder umdreht.

Somit kann ich über ISP wieder 1x etwas tun und muss dann wieder einen 
Taster drücken.

von Wichtel (Gast)


Lesenswert?

Offenbar liegt die Masse deines ISP-Anschlusses nicht auf der Masse des 
AVR sondern an Eingang wo dein Gleichrichter nachgeschaltet ist. 
Ansonsten können dort keine negativen Spannungen auftreten.

Wie wäre es mal mit einer vernünftigen Spannungsversorgung bzw. wieso um 
alles in der Welt hängt da ein Gleichrichter hinter dem 7805?

Dem 7805 weniger als 7 V am Eingang zu geben setzt ihn natürlich auch 
völlig ausser Gefecht, er kann nichts mehr regeln.

von spess53 (Gast)


Lesenswert?

Hi

Ehrlich gesagt würde ich auf einen Fehler auf dem Pollin Board tippen. 
Der Dragon zieht RST nur während der Programmierung nach GND. Ansonsten 
muss RST High sein.
Den von dir gemessenen -0,3..-0,4 V bzw. 0,4..0,6 V wurde ich nur sehr 
bedingt eine Bedeutung zumessen. Das ist beides Low und liegt innerhalb 
des erlaubten Bereichs. An einem anderen Messpunkt für GND kann das 
schon anders aussehen. Ich habe mir mal schnell das Schaltbild deines 
(mir ansonsten nur vom Hörensagen bekannten) Boards angesehen. An deiner 
Stelle würde ich mal T1 auslöten. Damit hast du an der Resetleitung nur 
noch den 10k-PullUp. Und überprüfe noch mal dein Kabel 6Pin -> 10Pin 
ISP.

MfG Spess

von Michael H. (michael_h74)


Lesenswert?

*D'OH*
VOR dem 7805...
Mein Fehler...

Das könnte also bedeuten, dass der Dragon garnicht kaputt ist und ich 
einfach nur aus demselben USB-Hub in der der Dragon steckt, die 5 V fürs 
Pollin-Board ziehen muss?

Das ist doch Quatsch, das würde den Sinn von ISP doch ad absurdum 
führen, wenn ich das Target mit derselben Spannung wie den Dragon 
versorgen muss.

von Wichtel (Gast)


Lesenswert?

Das Board muss bzw. sollte nicht aus einem USB-Hub gespeist werden 
(Ansonsten kannst du auch direkt am Dragon die Targetversorgung per 
Steckbrücke aktivieren).

Das Pollin-Board muss auch nicht mit 5V versorgt werden, es hat 
schliesslich seinen 7805 drauf und braucht mindestens 8V (da noch der 
Gleichrichter drauf ist).
Hauptsache die Massen von Board und Dragon sind über den ISP-Stecker 
verbunden und er AVR korrekt mit Spannung versorgt.

Gehe erstmal den Hinweisen von spess53 nach, was die Spannung am 
Reset-Pin betrifft.

von Michael H. (michael_h74)


Lesenswert?

Ook.

Transi rausgerissen, Messpunkte vom Tansi genommen -> selbes Prob.

Habe meinen ZIF in den Dragon eingelötet und aufm Dragon ISP 
verkabelt...
geht *NARF*

Wird wohl echt das Pollin-Board sein...
Werde im Laufe der Woche ein Lochraster mit Sockel für ISP aufbauen um 
zu sehen obs am Kabel liegt.
Melde mich wieder.

Ansonsten noch einen schönen Sonntag und danke für die Tipps!

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.