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
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.
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 | 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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.