Forum: Mikrocontroller und Digitale Elektronik Komme nicht in Programming-Mode


von Hannes (Gast)


Lesenswert?

Hallo allerseits!

Erstmal kurz ein Wort zum Forum hier: Ich finds toll, wie viele sich 
hier beteiligen, dieses Forum hat mir schon das ein oder andere Mal 
weitergeholfen! So, jetz aber genug geschleime ;)

So alltäglich das Thema auch klingen mag, ich hab bisher keine Lösung 
dazu gefunden, deshalb muss ich zum ersten Mal eure Hilfe beanspruchen.

Das ganze sieht so aus: Ich hab einem ATmega16 auf nem Steckbrett (im 
Mom einziger IC) per AVR Studio und USB AVR Lab, das ein STK500 
emuliert, ein Test-Programm zum Ansteuern und umschalten eines 
7-Segment-Treibers (per BCD) draufgespielt. Dabei hab ich auch Fuses 
umprogrammiert (verdächtig!), weil der uC ein 4MHz-Quarz verwenden soll. 
Die Fuse-Bytes wurden beide auf 0xFF geschrieben, was eigentlich die 
richtige Einstellung sein sollte. Außerdem hat meine 7-Seg-Anzeige auch 
ein bisschen Stuss angezeigt, am uC müsste also ein Takt anliegen...

Na ja, jedenfalls hab ich aufgrund der verwirrenden Anzeige einen 
Programmfehler ausgebessert, und BÄM!  -  ich kann meinen uC nicht mehr 
erreichen! (Entering Program Mode... FAILED!)

Hab schon mal ein bisschen rumprobiert, z.B. die ISP-Frequenz variiert 
(immerhin funktioniert das noch), oder erfolglos versucht, die 
Signature-Bytes auszulesen. ISP-Freq kann ich ja verwirrenderweise 
auslesen...
Wie siehts mit HW Settings aus? Muss ich da iwas bestimmtes einstellen 
(hier hab ich bisher auch nur erfolglos rumgeschraubt)?

Noch kurz zur Schaltung: Ein Abblockkondensator ist vorhanden, auch der 
Quarz ist mit 2x 22pF gegen Masse abgeblockt.

Also, danke ersmal fürs durchlesen dieser Wall of Text! Mein Problem 
ist, dass ich keinen Schimmer hab, woran das liegen könnte... anfangs 
dachte ich, es wären die Fuses, aber des wär ja auch iwie unlogisch...

LG Hannes

von Frühschichtler (Gast)


Angehängte Dateien:

Lesenswert?

Wenn du das rot markierte Bit auf '1' gesetzt hast, hast du dich 
ausgesperrt.
Da hilft dann nur noch HV-Programming - z.B. mit dem STK500.

von ingo (Gast)


Lesenswert?

> Wenn du das rot markierte Bit auf '1' gesetzt hast, hast du dich
> ausgesperrt.

Meines Wissens nach, kann man dieses Bit im SPI-Modus garnicht 
verändern.
mfG ingo

von Hans Schmitt (Gast)


Lesenswert?

Kann man, und wie Frühschichtler schrieb ist man dann draußen.

von Klaus W. (mfgkw)


Lesenswert?

Hans Schmitt schrieb:
> Kann man, und wie Frühschichtler schrieb ist man dann draußen.

Mag sein, aber dann ist das Datenblatt falsch.
Da steht bei mir unter "26.2 Fuse Bits" (S. 265):
1
SPIEN(1) | 5 |  Enable SPI Serial Program and | 0 (programmed, SPI prog. enabled)
2
         |   |  Data Downloading              |
3
...
4
Notes: 1. The SPIEN Fuse is not accessible in SPI Serial Programming mode.

Irgendwie möchte ich es jetzt aber nicht ausprobieren :-)

von Benjamin U. (utzus)


Lesenswert?

Hannes schrieb:
> Außerdem hat meine 7-Seg-Anzeige auch
> ein bisschen Stuss angezeigt, am uC müsste also ein Takt anliegen...

Kannst du das noch anders Überprüfen? Oder mal ein Bild von der 
Beschaltung geben.

> ISP-Freq kann ich ja verwirrenderweise
> auslesen...

Ist diese Frequenz nicht nur im Programmiergerät verhanden und nicht im 
µC selber?

Grüße,
Benni

von AVR-Fan (Gast)


Lesenswert?

> ISP-Freq kann ich ja verwirrenderweise
> auslesen...
Die steht nur im Programmiergerät.

Wenn wirklich die Fuses auf 0xFF sthen ist SPIEN definitiv abgeschaltet.
Ob sich die SPIEN-Fuse im Serial-Mode tatsächlich umprogrammieren läßt
oder nicht möchte ich momentan nicht ausprobieren.

Ist womöglich die Reset-Leitung disabled worden? Auch per Fuse im
seriellen Modus möglich, dann hast du dich ebenfalls ausgesperrt.

Ich vermute etwas in diser Richtung, weil die Signatur-Bits nicht
ausgelesen werden können.

Wenn das Teil, das den STK500 "emuliert", auch dessen HW-Fähigkeit der
HV-Programmierung kann, läßt sich der ATMEGA16 wiederbeleben.

von Peter R. (pnu)


Lesenswert?

Die üblichen STK500-clones, so auch das USB-lab mit STK500-Firmware, 
verzichten auf das HV-Programmieren, die 12V Spannungsversorgung dazu 
ist zu viel Aufwand.

Allerdings braucht das Lesen von FF aus den fuse-bits nicht unbedingt zu 
heißen, dass die tatsächlich so gesetzt sind. Das kann auch die Folge 
irgendeines hardware-Fehlers sein.

Ich würde auf jeden Fall mit externem Takt versuchen, die Signatur zu 
lesen.

Die ISP-Frequenz ist Sache des "STK500". Es betrifft den zu 
programmierenden Kontroller nur insoweit, dass der Takt des Kontrollers 
4mal so schnell sein muss wie der des ISP.

von Frühschichtler (Gast)


Lesenswert?

Ich weiß, wovon ich weiter oben schrieb, habe mir deshalb den Fusebit 
Doctor nachgebaut (und auch schon benutzen müssen :-):
http://diy.elektroda.eu/atmega-fusebit-doctor-hvpp/

von Hannes (Gast)


Lesenswert?

Whoa, das ging ja mal flott :) Danke soweit!

Hmmm, dass mit den Fuses für SPI, RESET, usw. hab ich mir auch schon 
gedacht. Komisch ist nur, dass SPIEN im AVR Studio gar nicht verändert 
werden kann, um das verfusen durch Tollpatsche wie mich nicht ganz so 
leicht zu machen (das Häkchen ist übrigens nie gesetzt?!) ;) Trotzdem 
steht dann unten bei den Werten der Fuse-Bytes 2 mal 0xFF... Im übrigen 
bin ich mir SICHER, dass ich die Finger von Bits, die das 
Programmierverhalten oder die Funktionsweise von wichtigen Pins 
verändern, gelassen habe, weil ich schon wusste, was man damit anrichten 
kann...

Peter R. schrieb:
> Ich würde auf jeden Fall mit externem Takt versuchen, die Signatur zu
> lesen.

Wie genau muss ich mir das vorstellen? Wenn die Fuses wirklich so 
gesetzt sein sollten, wie es angezeigt wird, müsste der AVR ja auf den 
4MHz Quarz ansprechen.
Was die Fuses angeht, denke ich, dass es an der Software (AVR Studio) 
liegt, denn ich kann sie ja gar nicht auslesen. Wahrscheinlich zeigt der 
nur irgendwas an und nicht das, was ich letztes Mal reingebrannt hab.


Zum Schaltplan:
Da ich gerade kein gscheites Programm hab (nur FreePCB, nicht mal ein 
ATmega verfügbar, werd mir mal EAGLE besorgen), beschreib ichs mal kurz:

Programmier-Pins alle am Prog angeschlossen (ohne Pull-ups oder -downs), 
zum Betrieb verbinde ich Reset mit +5V.
Vcc & AVcc an +5V, alle GND-Pins an Masse, 100nF von Vcc nach Masse.
Vier Ausgangs-Pins zur Ausgabe des BCD Codes und ein Ausgang zum Latchen 
des 7-Segment-Treibers (der ist vorübergehend von der Stromversorgung 
getrennt).
Und ein Taster, der einen Eingangs-Pin auf Masse ziehen kann (pull-up im 
AVR).

von Klaus W. (mfgkw)


Lesenswert?

Hast du ein Eval-Board? Dann setz ihn doch mal da rein.
Sonst kann ja auch der AVR über die Wupper/Jordan/Mississippi
sein.

von Frühschichtler (Gast)


Lesenswert?

> zum Betrieb verbinde ich Reset mit +5V  ???
Beim Programmieren wird dieser Pin aber vom Programmiergerät 
beeinflusst. Er muss über einen Pullup-Widerstand (10k) an 5V, sonst 
funzt das Auslesen/Proggen nicht.

von Its me (Gast)


Lesenswert?

Das Problem hatte ich auch mal, bei mir wars die Reset Leitung, nicht 
richtung angeschlossen, da zeigte mir die AVR Software auch nur 0xFF bei 
den fuses an.

von Hannes (Gast)


Lesenswert?

Achso, ich dachte den Pullup braucht man nur wenn man den AVR in der 
Betriebsschaltung proggen will. Jedenfalls hab ich den Resetpin über 10k 
/ 4k7 an +3,3V (das Programmiergerät verwendet nur 3,3, im Betrieb sinds 
dann 5V) angeschlossen. Hat leider in keinem der beiden Fälle 
funktioniert...

Klaus Wachtler schrieb:
> Sonst kann ja auch der AVR über die Wupper/Jordan/Mississippi
> sein.

Ähm, ich checks net ganz... meinst du, er is im Eimer? ^^

von Klaus W. (mfgkw)


Lesenswert?

Entweder der AVR, oder deine restliche Schaltung.
Deshalb probiere ihn doch mal in einem Eval-Board.
Wenn er da auch nicht geht, gibt es für wenige EUR einen neuen
notfalls (bis du jemanden findest, der HV-Programmierung kann).

von Hannes (Gast)


Lesenswert?

Hm, vielleicht kann ich mir mit nem anderen AVR nen "resetter" bauen, 
der per HV die Fuses auf Werkseinstellungen zurücksetzt und einen Memory 
Reset durchführt. Die HV muss doch nur an den Reset-Pin oder?
Ich bräuchte also nur nen passenden Transistor (oder?), aber mit denen 
kenne ich mich überhaupt nicht aus... was wär denn da denkbar?

von Frühschichtler (Gast)


Lesenswert?

> Hm, vielleicht kann ich mir mit nem anderen AVR nen "resetter" bauen

Liest du auch die Antworten, die man dir hier gibt?

> Ich weiß, wovon ich weiter oben schrieb, habe mir deshalb den Fusebit
> Doctor nachgebaut (und auch schon benutzen müssen :-):
> http://diy.elektroda.eu/atmega-fusebit-doctor-hvpp/

von Hannes (Gast)


Lesenswert?

Danke nochmal für die ganzen Tips! ;)

Hab mir den Doktor vorhin schon mal kurz angesehen, aber für zu 
kompliziert erachtet. Jetz hab ich kapiert, dass man nur den einen 
Controller braucht und der Rest nur verschiedene Sockel sind (umpf^^)
Genauer hinschauen lohnt sich halt doch meistens ;)

Deaktiviert ein nicht gesetztes SPIEN auch den HVSP Mode oder nur ISP? 
Sonst könnte ich das Teil auch auf HVSP beschränken und vlt mit nem 
8-beinigen µC betreiben. Oder gibt es abgesehen von den paar gesparten 
Sekundenbruchteilen noch irgendwelche Vorteile des HVPP?

LG

von Hannes (Gast)


Lesenswert?

Ich könnte das Prog auch probeweise mal auf nen Mega8 laden, nur hab ich 
Angst, diesen zu verfusen (wie evtl. den 16er).

Die Einstellungen
CKSEL 3..0 auf 1111 (also unprogrammiert)
CKOPT      auf 1
SUT 1..0   auf 11
sollten doch eigentlich für nen 4MHz-Quarz stimmen, oder? Oder hab ich 
da irgendwas falsch verstanden?

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.