Forum: Mikrocontroller und Digitale Elektronik Fusebits & AtMega8 & PonnyProg


von Thomas (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Leute,

nachdem ich nun schon den zweiten Mega8 auf Grund falscher Fusebits 
zerstört habe, wollte ich, bevor ich diese Bits beim dritten einstelle, 
auf Nummer Sicher gehen und euch vorher fragen.
Die Bits sind momentan noch auf Standarteinstellung. Ich hab noch nichts 
drann verändert.

Nun möcht ich aber anstatt des internen Oszilators einen externen Quarz 
von 8 Mhz verwenden. Das Datenblatt ist ein wenig irreführend. Dort 
steht: External Crystal/Ceramic Resonator 1111 - 1010

Wie darf ich das verstehen? Im Anhang hab ich mal ein Screenshot von den 
aktuellen Einstellungen (mit Ponnyprog!). Was muss ich abändern, damit 
der externe Quarz verwendet wird?

Vielen Danke!

Grüße Thomas

von John S. (linux_80)


Lesenswert?

Hallo,

eine gute Seite dafür ist diese:
http://palmavr.sourceforge.net/cgi-bin/fc.cgi?P_PREV=&P=ATmega8
Auf der linken Seite auswählen, und dann die Fusebits auf der rechten 
Seite abschreiben.

von Johannes M. (johnny-m)


Lesenswert?

Dann musst Du im Datenblatt mal ein bisschen weiterlesen. Im Abschnitt 
zum Thema "Crystal Oscillator" steht ziemlich detailliert, bei welchen 
Quarzfrequenzen welche Einstellungen zu machen sind. Und immer dran 
denken: In PonyProg sind die Fuses invertiert dargestellt. Ein Häkchen 
bedeutet "0"!

von Thomas (Gast)


Lesenswert?

Gut, dem Datenblatt entnehme ich folgende Einstellungen:


CKSEL 3...1: 111, da 8 Mhz Quarz
CKOPT: auf 1
CKSEL 0: auf 1
SUT 1...0: auf 10

Bei Ponnyprog kommen dann, da bei diesem Programm ja alles invertiert 
ist, bei den 0'en ein Häkchen rein und bei den 1'en keins.

Ist das so korrekt? Ich möchte es wirklich vermeiden, auch noch den 
dritten Mega8 zu zerstören.

Vielen Dank!

Grüße

von M. W. (blomquist)


Lesenswert?

Wieso hängst du nicht einfach einen externen Quarzoszillator an den Mega 
an und programmierst die Fuses wieder richtig... Hat bei mir wunderbar 
funktioniert (Pollin Eval-board, Ponyprog). Wäre ja schade um die 
Dinger.

von Karl H. (kbuchegg)


Lesenswert?

Thomas wrote:
> Gut, dem Datenblatt entnehme ich folgende Einstellungen:
>
>
> CKSEL 3...1: 111, da 8 Mhz Quarz
> CKOPT: auf 1
> CKSEL 0: auf 1
> SUT 1...0: auf 10
>
> Bei Ponnyprog kommen dann, da bei diesem Programm ja alles invertiert
> ist, bei den 0'en ein Häkchen rein und bei den 1'en keins.
>
> Ist das so korrekt? Ich möchte es wirklich vermeiden, auch noch den
> dritten Mega8 zu zerstören.

Als allererstes würde ich mal die anderen beiden reaktivieren.

Mit 99% Wahrscheinlichkeit hast du bei CKSEL 1-3 im Pony
überall Häkchen gesetzt. Dadurch läufen die Prozessoren
auf externem Takt, der aber nicht da ist.

Nimm deinen 3.ten Prozessor her und programmiere mal eine
Schleife rein, in der du einen Pin immer wieder von 0 auf 1
und wieder auf 0 setzt:
1
#include <avr/io.h>
2
3
int main()
4
{
5
  DDRB = 0xFF;
6
7
  while( 1 ) {
8
    PORTB = 0x00;
9
    PORTB = 0xFF;
10
  }
11
}

Dieses Programm lässt du laufen und hängst das Signal von
PB0 auf den XTAL1 Eingang eines deiner verfusten Prozessoren.
Der sollte sich daraufhin wieder melden und du kannst die
Fuses korrigieren.

Im Pony müssen bei CKSEL 1 - 3  keine Häkchen sein. Dann läuft
der Prozessor auf Quarzbetrieb. Wenn diese 3 Fuses richtig stehen,
dann sollte der Prozessor eigentlich mit dem Quarz funktionieren.
Die anderen Fuses sollten zwar auch stimmen, sind aber nicht gar
so kritisch.

Bevor du deinen 3. Prozessor momentan unbrauchbar machst:
Aktiviere auf jeden Fall die anderen beiden wieder, solange
dein 3.ter Prozessor noch läuft!

Anstelle deines 3.ten Prozessors kannst du auch irgendeinen
anderen Takt nehmen. Spielt keine grosse Rolle, solange es nur
schnell genug ist. Wenn du einen Frequenzgenerator hast, dann
stelle ihn mal auf 800kHz oder 1Mhz ein. Wenn du aber nichts
hast, dann kannst du immer noch deinen verbleibenden Prozessor
benutzten um dir so einen Takt zu erzeugen. Wichtig ist nur,
dass deine anderen beiden Prozessoren im Moment einen Takt
am XTAL1 Eingang haben möchten. Gib ihnen einen, und sie werden
sich wieder melden.

von Thomas (Gast)


Lesenswert?

Also soweit ich mich noch daran erinnern kann, hab ich bei den Anderen 
beiden Megas den Takt betreffend nur bei CKSEL0 ein Häkchen rein 
gemacht. CKSEL 3...1 waren ohne Häkchen, standen somit auf 1.
Laut Datenblatt würde das bedeuten, dass ich einen keramischen Oszilator 
eingestellt habe. Nur leider hab ich zurzeit keinen zur Hand. Würde es 
trotzdem klappen, von Außen einen Takt anzulegen?

Ich hatte gestern Abend übrigens noch die Einstellungen am 3. Mega8 so 
vorgenommen, wie ich es noch geschildert hatte. Hat zum Glück 
funktioniert.

Nun heißt es, die anderen Beiden IC's wieder in Gang zu bringen.

Danke für eure Hilfe!

Grüße Thomas

von Johannes M. (johnny-m)


Lesenswert?

Keramik-Resonator und Quarz sind von den Fuse-Settings her identisch. 
Die von Dir genannten Einstellungen entsprechen einem Quarz/Resonator 
mit 3-8 MHz. CKSEL0 bestimmt auch nur die Startup-Zeit und hat im 
Prinzip nichts mit den Oszillatortyp-Einstellungen an sich zu tun. Was 
passiert sein könnte, ist, dass Du die RSTDISBL-Fuse programmiert und 
damit den RESET-Pin deaktiviert hast. Dann hilft tatsächlich nichts mehr 
außer einem High-Voltage-Programmer.

Deshalb auch der allgemeingültige Rat, damit sowas nicht passiert: Immer 
zuerst den aktuellen Zustand der Fuses auslesen und dann erst die 
nötigen Änderungen durchführen.

von Thomas (Gast)


Lesenswert?

Ja, so könnte es gewesen sein. Ich muss heut Nachmittag noch einmal 
genau nachschauen, was ich für Fuses gesetzt hatte. Hab ein Screenshot 
davon gemacht.
Ich werd es sicherheitshalber noch einmal mit einem externen Takt 
versuchen, aber mach mir da eher weniger Hoffnung.

Was hat es eigentlich mit der Startup-Zeit auf sich?

Grüße Thomas

von Johannes M. (johnny-m)


Lesenswert?

Thomas wrote:
> Was hat es eigentlich mit der Startup-Zeit auf sich?
Damit kannst Du einstellen, wie schnell bzw. langsam Deine 
Versorgungsspannung beim Einschalten ansteigt und damit, wie lange die 
Spannung braucht, um in den Bereich zu gelangen, in dem der µC stabil 
läuft. Dazu wird, je nach FUse-Einstellung, nach dem Start des 
Oszillators eine Weile gewartet, bevor der Controller mit seiner 
eigentlichen Arbeit anfängt, damit in dem Moment auch sichergestellt 
ist, dass die Spannung ausreichend hoch ist und nicht durch 
Schaltvorgänge sofort wieder zusammenbricht.

von Gast (Gast)


Lesenswert?

Mit meinem Programm + avrdude geht das viel bequemer...

Pulldown-Menüs...

eine 1 im Datenblatt ist bei mir ein Kreuz im Kästchen...

schau es dir mal an:

http://janhbade.ja.funpic.de/ (unter Java)

von Thomas (Gast)


Lesenswert?

So, jetzt ist es amtlich: Ich hab das Bit RSTDISBL programmiert. Also 
sind die Controller unbrauchbar. Sehr schade.

Da hatte mich Ponnyprog mit seiner invertierten Darstellung wohl 
ziemlich irretiert.

Werd mir avrdude mal anschauen.

Grüße

von Johannes M. (johnny-m)


Lesenswert?

Naja, die Bits sind zwar invertiert, aber "0" heißt ja auch 
"programmed", während "1" (kein Häkchen) "unprogrammed" ist. Ist alles 
ne Sache der Betrachtungsweise... Das eigentliche Problem ist, dass die 
einen es so machen und andere eben anders.

von Visitor (Gast)


Lesenswert?

Zitat aus dem Datenblatt des ATmega8 ,Kapitel "Fuse Bits":

"Note that the fuses are read as logical zero, "0" if they are 
programmed"

PonyProg orientiert sich also an der AVR-Sichtweise.

von Michael U. (amiga)


Lesenswert?

Hallo,

@Visitor: richtig. Liegt einfach daran, daß eine gelöschte 
(E)EPROM/Flash-Zelle eine 1 enthält und nur auf 0 programmiert werden 
kann.

Sozusagen "das war schon immer so" ;-)

PS: wenn man gute Augen hat, entdeckt man soagr im Pony-Fenster den 
entsprechenden Hinweis (leider geghostet...).


@Thomas: such Dir jemanden mit einem STK500 oder einem anderen 
HV-Programmer in Deiner Nähe oder opfere das Portp und laß die Fuses 
wieder richtig setzen.
Zerstört sind sie schließlich noch lange nicht...

Gruß aus Berlin
Michael

von Visitor (Gast)


Lesenswert?

@Michael,

ich wollte nur dem in der Luft liegenden PonyProg-Bashing vorbeugen. Mir 
ist es selbst als low-level MC-Bitschubser nicht gelungen einen MC mit 
PonyProg zu zerfusen.

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.