Fuses mega 128 HILFE!

Gast #720049
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
Gast #720109
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?
Gast #720279
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.
Gast #720296
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
Gast #720298
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);
}
Gast #720305
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
Gast #720306
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);
}
#720308
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.
Gast #720342
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren