Forum: Mikrocontroller und Digitale Elektronik [ATMEGA168] ISP - Fuses falsch gesetzt


von Tobias G. (kubax)


Lesenswert?

Moin moin,

ich hab leider gerade beim testen eines neuen versuch Aufbaus, zum 
testen des ISP einen kleinen Fehler gemacht.

Ich habe zum testen die V-USB Generic hid Firmware hoch geladen, und 
damit die Fuses neu gesetzt.

und zwar auf:
{code]
FUSE_L  = 0xdf
FUSE_H  = 0xde
[/code]

Nach ein bisschen Recherchieren ist mir aufgefallen das ich damit auf 
externen Kristall umgestellt habe, also hab ich den atmega auf mein 
anderes board gesteckt (das mit der v-usb Schaltung) und konnte es 
wieder ansprechen und programmieren.

Nach diesem Glücks Erlebnis dachte ich, gut dann setz ich einfach die 
fuses wieder zurück. kurz google bemüht, nichts gefunden, also in die 
makefile von v-usb geguckt und versucht den fuses teil zu verstehen.

Laut comment in der Makefile, ist der letzte teil von FUSE_L (f) für die 
MHZ des Kristalls zuständig, den hab ich jetzt (dummerweise) mal auf 0 
gesetzt (also 0xd0). Jetzt komme ich (vermutlich logischerweise) mit 
keinem der beiden boards an den atmega ran.

Besteht die Möglichkeit das noch irgendwie rückgängig zu machen?

Ich hoffe jemand kann mir helfen, und ich muss nicht los ziehen mir 
einen neuen atmega holen...

Gruß,
Kubax

von Krapao (Gast)


Lesenswert?

Wertvolle Tipps dazu stehen im Artikel AVR Fuses.

von Krapao (Gast)


Lesenswert?

Dort ist auch der Link zum Fuserechner. Schau mal nach was die jetzige 
Einstellung bedeutet, wie die Werkseinstellung wäre und lies im Artikel, 
ob bei der jetzigen Einstellung Rettuung wie möglich ist.

von Tobias G. (kubax)


Lesenswert?

Ich studiere grad fleißig, danke für den Tipp, ich teste grad eine 
Anleitung die ich gefunden hatte, aber mit dem weiteren Hintergrund 
wissen von hier, komm hab ich große Hoffnung ihn wieder ans laufen zu 
kriegen.. ist mein letzter atmega den ich zur Verfügung hab.. ansonsten 
hab ich jetz nur noch den attiny2313 den ich hoffe für diesen Zweck 
nutzen zu können...

Danke schon mal, ich melde mich wenn es funktioniert hat. :)

von Krapao (Gast)


Lesenswert?

Behandele den Attiny2313 gut, eventuell kannst du den mit entsprechendem 
Programm benutzen, um den Rettungstakt am Atmega168 anzulegen.

von Tobias G. (kubax)


Lesenswert?

Genau das war was ich versucht hatte.

leider ohne erfolg. Scheint so, als ob ich mich doch nach einem neuen 
umsehen müsste..

:/

von Rolle Z. (rolle-z)


Lesenswert?

So wie es assieht will der Mega einen externen Takt. Notfalls mit nem 
einfachen NE555 in Datenblattbeschaltung erzeugen. Normalerweise muss 
das gehen, ist am Takteingang eventuell eine Beschaltung die den Eingang 
runterzieht, so das der Mega nix bekommt von der einspeisung?

Das gleiche ist mir mal vor längerer Zeit mit nem Mega8 passiert, 
natürlich Wochenende und keinen zweiten Chip mehr da. Habe mir dann mit 
der besagten NE55 Schaltung beholfen. :-) Seit diesem Vorfall habe ich 
Ponyprog auf den Müllhaufen der Geschichte geworfen (da gehörte es schon 
damals lange hin) und mir nen "richtigen" Programmer (MKII) gekauft.

Das AVR Dragon ist eine gute investition wenn du nen guten Progger 
suchst, der kann auch HV-Proggen, somit ist das mit den Fuses wenn man 
die mal zerschossen hat kein Problem mehr. Soooo teuer ist der auch 
nicht mehr.

Grüße
Rolle

von Tobias G. (kubax)


Lesenswert?

Danke für den Tipp, leider hab ich auch keinen NE555 hier..
Mein Elektronik "Park" ist eh generell recht klein, da er sich auf 2 
Reichelt Bestellungen um insgesamt ca. 100€ beschränkt.

Wie oben beschrieben hab ich es auch schon mit dem ATTINY2313 versucht, 
aber leider ohne Erfolg. Das verwendete Programm ist dieses.
1
#define F_CPU 1000000UL /* 1 MHz CPU clock */
2
3
#include <avr/io.h>
4
5
int main (void)
6
{
7
DDRC = _BV (PC0); /* PC0 is digital output */
8
9
while (1) /* loop forever */
10
{
11
/* set PC0 on PORTC (digital high) */
12
PORTC &= ~_BV(PC0);
13
14
}
15
16
return (0);
17
}

Dann hab ich den ATTINY CLKOUT mit dem ATMEGA XAL1 verbunden, bekam aber 
leider auch keine Verbindung.

Ich schätze das es in diesem Fall daran liegt, das ich den ATMEGA mit 
FUSE_H = 0xD0 versucht hab zu retten, war wohl nicht die intelligenteste 
Idee die ich hatte.. Mittlerweile hab ich mit für AVR-Dude den 
Burn-O-Mat runter geladen, und kenn jetzt zumindest die Standard fuse 
Einstellungen.

Als programmer hab ich übrigens einen STK500v2 kompatiblen von Reichelt.
Den Diamex-AVR usb.

Ich hab auch mal probiert meinen 16Mhz Kristall zwischen XAL1 und XAL2 
zu setzten, leider auch ohne sehenswerten Erfolg. Ich hätte noch den 20 
MHZ Kristall probieren können, aber hab mir da dann auch wenig Chancen 
ausgerechnet...

von Tobias G. (kubax)


Lesenswert?

Sorry für den Doppelpost.

Besteht evtl. die Möglichkeit mit Hilfe des Arduinos Uno den ich hier 
rumfliegen hab, Lösung zu erarbeiten?

von ... (Gast)


Lesenswert?

Warum tooglest du nicht den PC0 und verwendest den als Takt?
PORTC ^= _BV(PC0);

von Tobias G. (kubax)


Lesenswert?

Need more Input please ^^

Ich bin mir auch garnicht mal so sicher, ob der ATTINY überhaupt nen PC0 
hat, hab schon probiert auf PD2 umzuschreiben, weil das beim ATTINY der 
CKOUT ist.. scheint aber auch nicht zu helfen...

von Krapao (Gast)


Lesenswert?

Dein Rettungsprogramm im 
Beitrag "Re: [ATMEGA168] ISP - Fuses falsch gesetzt" gibt ein Dauer-LOW 
auf PORTC.0 aus. Das ist nicht was du willst. Toggeln geht z.B. so 
(Bitmanipulation) oder wie ...(Gast) geschrieben hat:

1
#define F_CPU 1000000UL /* 1 MHz CPU clock */
2
#include <avr/io.h>
3
4
int main (void)
5
{
6
  DDRC |= (1<<PC0);
7
  while(1)
8
  {
9
    PORTC ^= (1<<PC0);
10
  }
11
  return 0;
12
}

1 MHz und Softwaretoggeln ergibt keinen besonders hohen Takt. Wenn du so 
den Atmega versorgst, stelle den ISP Programmer auf die niedrigst 
mögliche ISP-Geschwindigkeit.

von Tobias G. (kubax)


Lesenswert?

Ok, das probiere ich gleich mal aus.

Das mit dem ISP Programmer Takt hab ich auch noch nicht so wirklich 
raus..

Nach ein wenig googeln glaube ich das es im avr-dude über den befehlt -B 
x geht. leider weiß ich nicht wie der wert dann einzustellen ist.

vllt. noch einen kleinen Hint in diese Richtung? :)

Sorry für diese geballt Unwissenheit :/

von Krapao (Gast)


Lesenswert?

-B ist schon gut. Es fehlt noch eine Zahl dahinter. Welche Zahl? da gibt 
Lady Ada Tipps:

http://www.ladyada.net/make/usbtinyisp/avrdude.html

"You can use the -B option to specify the ISP speed. By default the 
value is 10 which means 100KHz clock, this is good for target clock 
speeds > 500KHz. If you want the high speed clockrate (400KHz) for 
target frequencies > 4MHz you can use "-B 1" to speed up programming
To calculate the SPI frequency from the delay value, use this formula:

SPI clock frequency in KHz = 1000/(1.5+B) where B is the delay value

In general, the clock frequency should be at least 4 times larger than 
the target clock frequency. Try "-B 32" if you're having clocking 
issues, that should handle even 128khz clocks."

Ich würde -B 32 probieren.

von Krapao (Gast)


Lesenswert?

BTW. Den Satz "In general, the clock frequency should be at least 4 
times larger than the target clock frequency." verstehe ich nicht bzw. 
halte ihn für falsch.

Sinn macht der Satz für mich, wenn man larger durch smaller ersetzt:
ISP clock frequency < 1/4 * target clock frequency

von Achim M. (minifloat)


Lesenswert?

Wenn man sich bei dem ganzen Hexzahlen-Fuse-Gefummel gar nicht mehr 
sicher ist, kann man auch http://www.engbedded.com/fusecalc/ benutzen.
mfg mf

von Tobias G. (kubax)


Lesenswert?

Oh man... das ist jetzt nicht wahr...

Nach einem weiteren Schub von experimentier- Wahnsinn funktioniert nun 
wieder alles ordnungsgemäß...

Mein Problem war offensichtlich, das ich auf dem ATTINY die CKOUT fuse 
nicht gesetzt hatte.

Nachdem ich das getan hatte, hat mein Aufbau ohne Probleme geklappt, und 
ich konnte die fuses am atmega wieder zurücksetzten...

Danke an alle die mit geholfen haben.

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.