Forum: Mikrocontroller und Digitale Elektronik Fuses mega 128 HILFE!


von Der Grosse (Gast)


Lesenswert?

Hallo alle zusammen.

Habe folgendes Problem. Ich weiß das es viele schon nevt aber ich hoffe 
ihr könnt mir trotdem helfen.

Ich habe die füses an meinem Display 300 geändert komme jetzt nicht mehr 
dran...

meine frage ist an welchen pin muss ich den den externen takt geber 
anschliessen? damit ich die fuses wieder zurück setzen kann?


bedanke mich im vorraus

von Der Grosse (Gast)


Lesenswert?

Noch etwas

Ich habe einen Quarz von meinem mega8 8Mhz. ist es ausreichend?

von Falk B. (falk)


Lesenswert?


von Der Grosse (Gast)


Lesenswert?

Ich habe an XTAL1 den 14 MHz quarz hängen das ist also nicht richtig. er 
geht ja trotzdem nicht.

von Holger K. (krulli) Benutzerseite


Lesenswert?

und was ist an XTAL2?

von Compy (Gast)


Lesenswert?

Der Quartz gehört meines Wissens nach an XTAL1 UND XTAL2...?
Jeweils mit 22pf oder so gegen Masse geblockt. --> Datenblatt <--

von Der Grosse (Gast)


Lesenswert?

an XTAL2 ist das andere beinhen vom quarz.

Es hat so auch funktioniert, befor ich mit de fuses rum gespielt habe

von Der Grosse (Gast)


Lesenswert?

Leider weiß ich nicht welche einstellungen ich vorgenommen habe aber 
welche möglichkeiten gibt es den noch wo ich meinen 8 Mhz quarz 
anschliessen kann?

von Der Grosse (Gast)


Lesenswert?

Also vorher war bei mir CKSEL3-1 deaktiviert(AVR studio kein hacken), 
Dann habe ich Sie aktiviert und von SUT 0 auf SUT1 umgestellt und jetzt 
kann ich nicht mehr darauf zugreifen.

von Der Grosse (Gast)


Lesenswert?

Kann das der fehler sein?

"Für einen externen Quarz ist die Einstellung External Crystal/Ceramic 
Resonator notwendig, also eine Einstellung von 1111. Unglücklicherweise 
ist bei den vielen Fusebit Einstellprogrammen nicht auf den ersten Blick 
offensichtlich, ob ein gesetztes Häkchen nun eine 1 oder eine 0 
bedeutet. Anstatt auf 1111 werden die Fusebits auf 0000 gesetzt und 
damit ein External Clock eingestellt. Ein External Clock ist aber ein 
Quarzoszillator. Ein Quarz wird an so einer Einstellung nicht ins 
Schwingen kommen. "

Also dass mein mega8 quarz nicht ins schwingen kommt? und ich an XTAL 1 
einen anderen taktgeber anschliessen muss?

von Holger K. (krulli) Benutzerseite


Lesenswert?

>Kann das der fehler sein?
Ja

Leg eine externe Taktquelle an XTAL1 an und stell dann die Fuses auf 
Ext. Crystal

Siehe auch: 
http://www.klaus-leidinger.de/mp/Mikrocontroller/meinetools.html#Preserver

von Der Grosse (Gast)


Lesenswert?

int main()
{
  DDRD = 0xFF;
  while(1)
  {

    PORTD |= (1 << MEINBIT);    /* setzt Bit 2 an PortA auf 1 */
    for(i=0;i<=60000;i++);
    PORTD &= ~(1 << MEINBIT);   /* loescht Bit 2 an PortA */
  }
  return(0);
}

Dieses Programm habe ich geschrieben um meinen mega 8 als externen takt 
geber zu nutzen aber er funktioniert nicht kann mir wer sagen warum?Es 
Blinkt noch nicht einmal die angeschlossene Diode.

von jens (Gast)


Lesenswert?

Dein Auge oder die Diode ist nicht schnell genug.

Wie lange dauert der Zustand 1 an MEINBIT? Okay, 60000 x i++

Wie lange dauer der Zustand 0 an MeinBit? ....

Gruß

Jens

von Johannes M. (johnny-m)


Lesenswert?

jens wrote:
> Wie lange dauert der Zustand 1 an MEINBIT? Okay, 60000 x i++
Aber nur bei ausgeschalteter Optimierung oder wenn i volatile ist...

Ansonsten hast Du völlig recht.

von Der Grosse (Gast)


Lesenswert?

Geht leider immer noch nicht...:-((

von jens (Gast)


Lesenswert?

Hm, auch auf die Gefahr jetzt OffTopic zu werden.  Warum sollte die 
Optimierung eine Rolle spielen. i wird inkrementiert, da kann der Code 
doch nicht einfach wegoptimiert werden, es ändert sich ja was, oder 
doch?

Jens

von Der Grosse (Gast)


Lesenswert?

Habe jetzt folgendes


#include <avr/io.h>

#define MEINBIT 2
volatile int i;
int main()
{
  DDRD = 0xFF;
  while(1)
  {

      PORTD |= (1 << MEINBIT);    /* setzt Bit 2 an PortA auf 1 */
      for(i=0;i<=60000;i++);
      PORTD &= ~(1 << MEINBIT);   /* loescht Bit 2 an PortA */
      for(i=0;i<=60000;i++);
  }
  return(0);
}

von Der Grosse (Gast)


Lesenswert?

und es geht nicht

von jens (Gast)


Lesenswert?

Man kann über die Fuses noch RC-Oszialtor einstellen. Kenne einen der 
hat das vor kurzem versehentlich geschaft. Dann musst du eine RC 
Kombination anschließen. Für die Werte und Beschaltung müsstest du halt 
ins Datenblatt schauen.

Gruß

Jens

von Der Grosse (Gast)


Lesenswert?

Ich komme an den microkontroller nicht mehr dran ich muss einen TAKT 
geber anschliessen. und mein mega 8 den ich da habe will nicht 
misssbraucht werden. er macht kein takt.

aber um an die Fuses vom mega 128 zu kommen brauche ich halt einen takt 
geber.

Hat jemand son blink.c oder so? weil wie gesagt mein funkzt nicht warum 
auch immer

#include <avr/io.h>

#define MEINBIT 8
volatile int i;
int main()
{
  DDRD = 0xFF;
  while(1)
  {

    PORTD |= (1 << MEINBIT);    /* setzt Bit 2 an PortA auf 1 */
    for(i=0;i<=60000;i++);
    PORTD &= ~(1 << MEINBIT);   /* loescht Bit 2 an PortA */
    for(i=0;i<=60000;i++);
  }
  return(0);
}

von Johannes M. (johnny-m)


Lesenswert?

jens wrote:
> Hm, auch auf die Gefahr jetzt OffTopic zu werden.  Warum sollte die
> Optimierung eine Rolle spielen. i wird inkrementiert, da kann der Code
> doch nicht einfach wegoptimiert werden, es ändert sich ja was, oder
> doch?
Es ändert sich nur etwas, das im Programm an keiner anderen Stelle 
verwendet wird. Also betrachtet der Optimizer das Inkrementieren von i 
schon als unsinnigen Vorgang und schmeißt ihn raus.

@OP:
Verwende bitte die fertigen Funktionen aus der util/delay.h. Die sind 
für sowas da.

Für nen Takt nimmste aber besser gleich nen Timer.

Und selbst wenn das mit der selbstgebauten Schleife funktionier und ein 
Durchlauf 4-5 Takte braucht, dann hast Du immer noch ein paar zig Hz 
(bei 14 MHz), und das gibt kein Blinken, sondern höchstens ein Flimmern.

von Der Grosse (Gast)


Lesenswert?

Habe jetzt folgendes Programm geschrieben und es funktioniert.


#include <avr/io.h>
#define F_CPU 1000000UL
#include <util/delay.h>


#define MEINBIT3 3
#define MEINBIT2 2
volatile int i;
int main()
{
  DDRD = 0xFF;
  while(1)
  {
    PORTD |= (1 << MEINBIT3);    /* setzt Bit 2 an PortA auf 1 */
    PORTD &= ~(1 << MEINBIT3);   /* loescht Bit 2 an PortA */
  }
  return(0);
}


habe meinen Mega128 erfolgreich retten können

von Der Grosse (Gast)


Lesenswert?

Danke an alle die mir 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.