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
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"!
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
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.
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
intmain()
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.
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
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.
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
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.
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)
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
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.
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.
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
@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.