Hallo, habe mal eine kleine Frage. Wenn ich im AVR Studio auf den AVR-Button(Connect to AVR Programmer) klicke, dann gelange ich ja in die Einstellungen für den AVR. Nun möchte ich dort gerne einen externen Takt festlegen und zwar "genau" 1 MHz. Was muss ich dazu alles tun? Ich habe bis jetzt die Fusebits auf Ext.Clock gestellt(Startup-Time 6CK +0ms),dann in "Advanced" den Oszillator auf 1 MHz calibriert. Außerdem habe ich die Jumper auf dem STK500 folgendermaßen gesetzt: XTAL1 mounted und Oscsel auf PIN 1 und 2. Ist das auch richtig, wenn man eine externe 1 MHz Frequenz benutzen möchte? Nun meine anderen Fragen: 1.Muss ich den Value vom Oszillator Calibration Byte in eine bestimmte Adresse schreiben, wenn ja in welche und Flash oder Eeprom? 2.Muss ich auf "Board" auch noch etwas umstellen? Ich verstehe nämlich noch nicht ganz wofür dort nochmal die STK500 Oszillatorfrequenz geändert werden kann. Ich hoffe, daß mir jemand weiterhelfen kann. Nach lesen des Manuals und des Datenblattes bin ich nur noch verwirrter und weiß nicht genau was ich nun wie tun muss um die Frequenz zu erzeugen. Freue mich auf eure Antworten! Hoffe habe meine Fragen verständlich ausgedrückt. Gruß Marian
Wenn du am AVR etwas "verstellen" willst, dann geschieht das über die Fuse-Bits. Stell dir diese als einen Satz "DIP-Schalter" vor, die du nur mit der Programmiersoftware über Programmiergerät erreichst (also nicht aus deinem Programm im AVR-Flash). Um diese sinnvoll einstellen zu können, hilft nur, im Datenblatt des jeweiligen AVRs das Kapitel über die Fusebits zu lesen und zu verstehen. Rätselraten hilft da nicht, konzentriere dich auf das, was du ändern willst und lass alles Andere so wie es ist. Denke immer daran, dass eine "programmed Fuse" 0 ist und eine "unprogrammed Fuse" eine 1 ist. Das hat technische und historische Gründe und wird wegen der nachwachsenden Generation nicht verändert werden, es lohnt sich also nicht, dagegen zu protestieren. Du fragst nach dem Calibrieren des RC-Oszillators. Das Problem dabei ist, dass die Calibrationsbytes vom Hersteller dauerhaft in den Signaturebereich (H-Bytes) des AVRs geschrieben sind und da nur ein "Programmiergerät" mit seiner (PC-) Software heran kommt. Um den Oszillator zu calibrieren, muss aber die im Flash des AVRs befindliche AVR-Software (alsi dein selbstgeschriebenes Programm) das Byte in das Register OSCCAL schreiben. Dein USER-Programm kann aber den Signature-Bereich nicht auslesen... Bei neuen AVRs ist das Signature-Byte zusätzlich in der letzten Flash-Zelle (L und H) gespeichert, geht aber beim ersten Löschen verloren. Ich benutze auch die letzte Flash-Zelle (L-Byte) und schreibe das vom Programmer ermittelte Calibrationsbyte in diese letzte Zelle. Das AVR-Programm ruft dann in der Reset-Routine (Initialisierung) die Calibrationsroutine (Anhang) auf, wodurch das Byte aus dem Flash geholt wird, auf Plausiblität geprüft wird und (falls gültig) in das OSCCAL-Register geschrieben wird. Es gibt auch andere Lösungen, aber da ATMEL die letzte Flash-Zelle nutzt, mach' ich das auch so... Beim Brennprogramm des AVR-Studio muss man leider bei jedem Typwechsel die Flash-Adresse neu ausrechnen (blöd gemacht, zu diesem Brennprogramm hätte ich sowiso schon eine lange Liste mit Verbesserungsvorschlägen!), meine Eigenbau ISP-Software (in QBASIC) macht das automatisch bei jedem Löschen. ...
Danke für deine Antwort. Leider kann ich kein Assambler und programmiere nur in C. Deshalb verstehe ich deinen Code nicht so ganz und kann ihn auch nicht in C umwandeln...d.h. ich weiß immernoch nicht, wie ich mein Oscsel-wert in das Oscal-Register schreibe, damit mein AVR endlich mit 1 MHz betrieben wird. Nochmal zum Verständnis: D.h ich muss im AVR-Studio nichts weiter umstellen außer die Fusebits auf Externe Clock zu stellen und den Oscsel-Wert ins Oscal-Registerschreiben um dann einen extern generierten Takt von 1 MHz zu bekommen?
Wenn du einen externen Takt benutzt, nützen dir die Kalibrierungsbits gar nichts. Die sind nur für den ansonsten recht ungenauen internen Oszillator. Bei einem externen Clock mußt du schon die Quelle dieser Clock so einstellen, daß du die gewünschte Frequenz hast.
Genau das ist mein Problem! Ich weiß nicht wie ich mit dem AVR Studio dem STK500 klar mache, das er dem µC einen 1 MHz Takt gibt. Ich versuche halt mit Uart ein paar Zeichen an meinen PC zu senden, aber da kommt immer nur wirres Zeug an und ich denke das es an dem Takt liegt!
Hi Marian, "extern" setzt einen externen Quarz vorraus, wichtig!!! Die Genauigkeit kommt also vom Quarz, die verschiedenen Einstellungsmöglichkeiten dienen also vermutlich der Grobanpassung im AVR (Filter etc.). Wozu die verschiedenen "Startuptimes" sind weiss ich nicht, hab schon alle möglichen probiert, gab nie Probleme. Vielleicht weiss dazu jemand mehr!? Nochmal: wenn du auf extern umstellst MUSS ein Quarz montiert sein, sonst kommst nach dem Setzen nicht mehr an den Chip!!! lg Ralf
aha...aber es gibt doch einen software generierten Takt oder nicht? Was ist denn sonst "Onboard software clock signal"? Es gibt ja 3 verschieden möglichkeiten einen externen Takt zu nutzen(mit dem Oscsel Jumper): 1.Das oben genannte, 2.Onboard crystal signal und 3. Onboard XTAL1. Wenn ich den XTAL1 Jumper disconnecte müsste ich den internen Takt nutzen, was aber irgendwie nicht geht, da ich dann keine Verbindung mehr zum Board bekomme. Also wollte ich den externen softwaregenerierten takt nutzen, da ich noch keinen Quarz habe. Der kommt erst noch ;)...wollte mich halt in mein Uart reinarbeiten. Habe ich mich jetzt etwa schon ausgesperrt? ich kann mich aber noch mit dem STK verbinden und auch den µC flashen! Nur beim Uart kommt totaler müll raus und ich weiß nicht mehr weiter! Ich finde das alles ganz schön schwierig.
DE nexternen Takt kannst du nicht beeinflussen. Habe ledier kein STK500 sonst würde ich mal nachsehen, was du da einstellen mußt. (Es gibt aber hier im Forum ein deutsches Handbuch,d as sollte die Fragen beantworten). Die Startuptime ist die Zeit, die der Controller nach einem Reset (evtl. auch nur PowerOn Reset) wartet, bis er mit der Programm abarbeitung anfängt. Ist dafür da, falls die Versorgungsspannung noch etwas schwankt.
Sorry, aber mit dem OnBoard Software Clock habe ich noch nicht gearbeitet. Denke, dass der Takt ähnlich "genau" wie der interne ist. OSCSEL Jumper überprüfen, XTAL1 muss dann raus. Willst alle Probleme ausschliessen, führt kein Weg an einem Quarz vorbei. lg Ralf
Bitte bitte bitte das Handbuch zum STK500 lesen, meinetwegen auch in der Übersetzung. Und auch die Datenblätter zu den Prozessoren. Da steht alles drin, auch der Unterschied zwischen internen und externen Oszillatoren.... Es muß doch ´nen Grund geben, daß Handbücher mitgeliefert werden und warum meins schon Eselsohren hat. Keiner kann was dafür, wenn man mal was vergißt, aber wenn man gar nicht erst ´reinguckt....
Nicht reinguckt??? Ich habe das schon 20000mal durchgelesen aber schlauer werde ich daraus auch nicht! Wenn man sich das erste mal mit diesem Thema beschäftigt ist es ziemlich schwer alles was im Handbuch steht auch eindeutig zu interpretieren und umzusetzen. Danke für alle die mir versucht haben zu helfen, leider bin ich immernoch nicht weiter aber die Erleuchtung wird bestimmt noch kommen. Gruß Marian
Die Hilfe des AVRStudios ist auch hilfreich, allerdinsg auch ziemlich Englisch...
Marian, schau mal im Handbuch S.3-19, da ist es erklärt. Fuses auf "external". XTAL1 Jumper ist egal, also rein oder raus. OSCSEL Jumper auf Pin 1 und 2 (die zählen von rechts). Nur...geht das jetzt schief, ist die Tür zu ;-) Daher würde ich erstmal mit den internen Takten rumspielen bis nen Quarz hast. Auch mit internem Takt muss (z.b. auf 8Mhz) das UART laufen, sonst hast nen anderen Fehler.
Lesen alleine nützt nix, du musst es auch verstehen. Kannst du es nicht verstehen, dann fehlen dir weitere Grundlagen, dann musst du eben damit anfangen. Sollte dir das zu mühsam sein, dann wäre vielleicht "Malen nach Zahlen" auch ein schönes Hobby. ;-) Solltest du mich jetzt für arrogant halten, dann muss ich wohl oder übel damit leben... ...
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.