Hi @ all, seit einigen Wochen versuche ich vergeblich meinen ATmega16 auf externen Quarz einzustellen. Bin momentan auf den Atmega16L umgestiegen, weil ich von dem Anderen keine mehr hatte. Ich weiß das Thema Fuse-Bist kommt hier regelmäßig und viele werden vermutl. genervt wenn ich schon wieder damit anfange, aber ich habe folgendes Problem: Ich möchte meinen µC mit externen Quarz laufenlassen, die Fusebits habe ich mir anhand des Datenblattes ermittelt und mit dem Fuse Calculator hier aus dem Forum bestätigt. Zum Proggen benutze ich Ponyprog. Das auslesen der Fusebits funktioniert, sobald ich diese entsprechend schreiben möchte kommt die bekannte Fehlermeldung: "Device missing or unknown device (-24)" Danach kann ich weder die Fusebits auslesen noch den Quellcode aufspielen, jedes mal kommt die selbe Fehlermeldung. Zum Testen habe ich den µC mal mit dem internen RC Oscillator laufen lassen, die Fusebits dafür konnte ich entsprechend einstellen! Aus anderen Berichten zu dem Thema habe ich erfahren, dass es teilweise Problem gab wenn man einen Quarz > 8 MHz verwendet hat, aber das habe ich auch schon ausprobiert, ohne Erfolg. Jetzt weiß ich nicht mehr weiter was ich noch versuchen könnte. Ich brauche den externen Takt, da beim Senden und Empfangen über UART am Hyperterminal nur blödsinn ankommt, sofern ich den µC mit dem internen Oscialltor laufen lasse. Ich hoffe ihr könnt mir weiterhelfen.
Welche Frequenz hat denn der Quarz? Ist es eine baudrate-Frequenz oder eine mit ganzzahligen MHz? sind die USART-Register auf diese Frequenz eingestellt? (siehe Datenblatt) Ist die Bedingung fISP < 1/4 ftakt beim Programieren erfüllt, dabei auch den prescaler des Oszillators beachten? über 8MHz sind halt für den Kontroller schon "high frequency". Wenn dann die Oszillatorbeschaltung so am Rande des Dimensionierungsbereichs liegt, kanns schon soweit kommen, dass die Schaltung nicht schwingt. Man sollte daher die fuse für "full swing" (CKOPT) setzen, um den Oszillator auf volle Schwingfreudigkeit zu bringen. Es ist auch möglich, den internen RC-Oszillator so zu adjustieren, dass die Übertragung mit RS232 klappt (Da muss fsoll bis auf wenige Prozent genau sein). Dass sich ein verfuster atmega16 mit Fremdtakt wieder zugänglich machen lässt, ist Dir bekannt?
Mit diesen Quarzen: 11.0592 MHz; 9.216 MHz und 7.3725 MHz habe ich es jeweils probiert. Die USART-Register sind folgendermaßen gesetzt: #ifndef F_CPU #define F_CPU 7372800L #endif #define BAUD 9600L #define ubrr ((F_CPU+BAUD*8)/(BAUD*16)-1) //############# Initialisierung der µC-Hardware ####################### static void hardwareInit(void) { //Festlegen der Baud Rate High & Low UBRRH = (unsigned char)(ubrr>>8); UBRRL = (unsigned char)ubrr; //Einschalten Receiver und Transmitter UCSRB = (1<<RXEN)|(1<<TXEN); /* Set frame format: 8data, 1stop bit */ UCSRC = (1<<URSEL)|(3<<UCSZ0); ... } //##################### Empfangen und Senden per USART ################## int receiveData(char Zufallszahl) { //Empfangen der gewuenschten Stimulation while ( !(UCSRA & (1<<RXC)) ); //warte auf daten return UDR; //gibt daten aus buffer wieder } int transmitData(char senden) { while ( !(UCSRA & (1<<UDRE)) ); //warte bis transmit-buffer leer UDR = senden; //daten in transmit-buffer und senden der daten } int main(int argc, char *argv[]) { hardwareInit(); while (1) { receiveData(Zufallszahl); empfangen = atoi (UDR); itoa (empfangen, senden, 10); transmitData(senden); } return 0; } Über 8 MHz hab ich die Fuses als ext.Crystal high freq. eingestellt, bzw. wollte ich. Sowohl mit als auch ohne CKOPT. Aber es kam jedes mal die Fehlermeldung s.o. Ja ich weiß das ich die µC mit Fremdtakt zurück ins Leben holen kann. Das mit fISP habe ich nicht bedacht, werde es aber direkt mal ausprobieren. Hab dafür die Einstellung bei PonyProg: SPIBusSpeed=NORMAL auf LOW gestellt. Was meinst du mit fSoll bis auf wenige % genau sein?
Also fISP < 1/4 fCPU hat auch keinen Erfolg gebracht. Den Code kann ich, wie auch vorher schon, übertragen, aber sobald ich an die Fuses gehe kommt wieder die Fehlermeldung.
Bei PonyProg gibt es eine Kästchen mit Calibrieren und Synchrinisieren glaube ich. Hast du das gemacht? Damit wird der Computer auf den Prozessortakt abgeglichen. Und du kannst deine Verbindung schon vor dem Zugriff auf den Controller testen. Hast du das schon versucht? Gruß
Ich habe jetzt versucht mit ext. Quarzoscillator die µCs zurück ins Leben zu holen. PonyProg erkennt den µC wieder und ich kann die Fuse-bits auslesen. Wenn ich diese allerdings dann auf ext. Quarzoscillator stellen möchte kommt erneut die Fehlermeldung!
Bei PonyProg sind alle Fuses invertiert! Versuch das mal genau anders herum. Das hat mich auch verwirrt!
Flo K. schrieb: > Wenn ich diese allerdings dann auf ext. > Quarzoscillator stellen möchte kommt erneut die Fehlermeldung! Welche Werte für die Fuses schreibst Du denn? An welchen Pins hängt der Quarz, welche Werte haben die beiden Kondensatoren am Quarz? Hast Du die Verbindungen µC -> Quarz -> Kondensatoren geprüft?
Jepp Calibration mache ich jedes mal. Und Probe funzt auch.
Der Quarz hängt an XTAL1&2 mit jeweils 22pF. Das kann man ja direkt so aus dem Datenblatt übernehmen. Die Fuses für ext. Quarz: High: 0110 0110 Low: 0000 0000 Fuses für ext. Oscillator: High: 0110 0110 Low: 0001 1111 [0=unprogrammed; 1=programmed]
und welche nimmst du jetzt? Die für Quarz oder für den Oszillator?
Aktuell den für Oscillator, da ich den auch grad dran hab. Aber ich habe beide ausprobiert und immer das selbe Problem. Mit Quarz und entsprechenden Fuses und auch mit Osicllator
Ich hab grad bei meinem mega16 die Register ausgelesen. bei 16MHz steht: HIGH: 0x19 LOW: 0xFF Versuch die mal!
Flo K. schrieb: > Der Quarz hängt an XTAL1&2 mit jeweils 22pF. Das kann man ja direkt so > aus dem Datenblatt übernehmen. > > Die Fuses für ext. Quarz: > High: 0110 0110 > Low: 0000 0000 > > Fuses für ext. Oscillator: > High: 0110 0110 > Low: 0001 1111 > > [0=unprogrammed; 1=programmed] Und was stellst du im PonyProg ein? Machst du ein Häkchen oder machst du keines bei den CKSEL Bits? Bei PonyProg ist alles invertiert! Wenn du laut Datenblatt also rausbekommst, dass du lauter 0 bei CKSEL einstellen musst, dann heißt das das du im Dialog die Häkchen setzen musst. Und umgekehrt.
Ja ich kenne das Problem von PonyProg. Ich habe mich bevor ich mit den Fuses anfing hab ich mich hier im Forum schlau gemacht. So wie ich das oben angegeben hab entspricht die 1 einem Häkchen und 0 kein Häkchen.
Flo K. schrieb: > Ja ich kenne das Problem von PonyProg. Ich habe mich bevor ich mit den > Fuses anfing hab ich mich hier im Forum schlau gemacht. So wie ich das > oben angegeben hab entspricht die 1 einem Häkchen und 0 kein Häkchen. In der Zeit, in der ich noch mit Pony gebrannt habe, hab ich das so gemacht: Ich hab mir das Datenblatt geschnappt und hab mir angesehen welches 0/1 Muter der Atmel-Einstellung entspricht, so wie der µC geliefert wird. Ich weiß ja, dass der mit 1Mhz internem Oszi daherkommt. Also schau ich mir das im Datenblatt an, lese die Fusebits aus und schau nach, wie sich diese Datenblatt Einstellung im Fusedialog präsentiert (was ist 0, was ist 1). Und erst dann, als ich das entschlüsselt habe, hab ich mir die gewünschte Einstellung zusammengesucht und dann die Häkchen danach gestellt. Ich hab von Anfang an keinen einzigen µC je verfust.
Wieso stimmen meine Werte nicht? Ich hab mich auch sehr intensiv mit dem Datenblatt beschäftigt und anschließend meine Einstellungen noch mit dem Fuse Calculator überprüft und kam auf das selbe
Flo K. schrieb: > Ja ich kenne das Problem von PonyProg. Ich habe mich bevor ich mit den > Fuses anfing hab ich mich hier im Forum schlau gemacht. So wie ich das > oben angegeben hab entspricht die 1 einem Häkchen und 0 kein Häkchen. ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Lies nochmal Beitrag von Karl Heinz: 0 = Häkchen 1 = kein Häkchen Also umgekehrt wie Du das geschrieben hast.
Hallo, richtig, PonyProg macht es so wie es im AVR-Datenblatt steht (stand?). 1 unprogrammed, 0 programmed. Haken -> programmiert -> 0 Es wird eben das übliche Verhalten einer EPROM-/Flashzelle angenommen und da ist gelöscht -> unprogrammiert eben 1 Gruß aus Berlin Michael
Flo K. schrieb: > Wenn ich diese allerdings dann auf ext. > Quarzoscillator stellen möchte kommt erneut die Fehlermeldung Warum versuchst du, das Ding auf ext. Quarzoszillator zu stellen, obwohl du einen Quarz angeschlossen hast?
Also jetzt nochmal ganz langsam: Laut Datenblatt Tabelle 2 gilt: External Clock (Quarzoscillator): 0000 CKSEL3..0 External Crystal (Quarz): 1111 CKSEL3..0 dabei gilt: [1=unprogrammed; 0=programmed] Wie ihr schon sagt ist das bei PonyProg anders, was bedeuten würde: External Clock (Quarzoscillator): 1111 CKSEL3..0 also 4 Häkchen External Crystal (Quarz): 0000 CKSEL3..0 also kein Häkchen Demnach müsste ich es doch richtig gemacht haben oder??? @ Matthias: Ich hab den Quarz abgeklemmt weil ich es mal mit dem Quarzoscillator testen wollte. Aber wie gesagt auch ohne Erfolg.
Ich habe alles nochmals verglichen und bin der Meinung das meine Einstellungen korrekt sind. Und dennoch erscheint die Fehlermeldung. Nur wenn ich auf internal Oscialltor stelle klappt es.
Peter R. schrieb: > Es ist auch möglich, den internen RC-Oszillator so zu adjustieren, dass > die Übertragung mit RS232 klappt (Da muss fsoll bis auf wenige Prozent > genau sein). Wie kann ich denn den internen RC-Oszillator so adjustieren, das die Übertragung funktioniert? Bzw. hat jemand ein Idee warum PonyProg so Probleme mit den Fuses hat?
Zur Programmierung benutze ich das Parallele-Interface für AVR und PonyProg: http://s-huehn.de/elektronik/avr-prog/avr-prog-alt.htm Kann das Problem damit zusammenhängen?
Quarz läuft jetzt endlich, aber ich empfange im HTerm weiterhin nur Blödsinn. Woran kann das denn noch liegen?
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.