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
Noch etwas Ich habe einen Quarz von meinem mega8 8Mhz. ist es ausreichend?
Ich habe an XTAL1 den 14 MHz quarz hängen das ist also nicht richtig. er geht ja trotzdem nicht.
Der Quartz gehört meines Wissens nach an XTAL1 UND XTAL2...? Jeweils mit 22pf oder so gegen Masse geblockt. --> Datenblatt <--
an XTAL2 ist das andere beinhen vom quarz. Es hat so auch funktioniert, befor ich mit de fuses rum gespielt habe
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?
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.
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?
>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
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.
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
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.
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
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); }
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
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); }
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.
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
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.