Forum: Mikrocontroller und Digitale Elektronik AVR Studio und STK500


von Marian (Gast)


Lesenswert?

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

von Hannes L. (hannes)


Angehängte Dateien:

Lesenswert?

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.

...

von Marian (Gast)


Lesenswert?

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?

von Mike (Gast)


Lesenswert?

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.

von Marian (Gast)


Lesenswert?

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!

von Togger (Gast)


Lesenswert?

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

von Marian (Gast)


Lesenswert?

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.

von Mike (Gast)


Lesenswert?

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.

von Togger (Gast)


Lesenswert?

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

von TravelRec. (Gast)


Lesenswert?

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....

von Marian (Gast)


Lesenswert?

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

von Rahul (Gast)


Lesenswert?

Die Hilfe des AVRStudios ist auch hilfreich, allerdinsg auch ziemlich
Englisch...

von Togger (Gast)


Lesenswert?

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.

von Hannes L. (hannes)


Lesenswert?

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...

...

von Rahul (Gast)


Lesenswert?

Ich hätte noch ne Strickliesel abzugeben...

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.