www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Frequenzstabilität?


Autor: Thomas (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
Ich möchte einfach einen Ausgang 10ms einschalten und 10ms ausschalten.
Das hab ich auch hinbekommen, doch leider musste ich feststellen, als
ich mit dem Oszi nachgemessen habe, das Ti und Tp länger als 10ms sind.
desweiteren habe ich eine unsaubere negative Flanke dieses
Rechtecksignals. Die ansteigende Flanke ist sauber.
An was kann das liegen? Der Mega8 mit eingeschaltetem internen
Oszillator von 1Mhz, müsste ein Signal mit ti/tp 10ms doch sauber
hinbekommen!

Autor: Thomas (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier noch der Signalverlauf (Bild)

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Quelldatei hätt's als Anhang auch getan, statt gleich ein
Screenshot davon...


Wieso stellst du OSCCAL auf 0xff? Damit trimmst du den Oszillator
sonstwo hin. Kein Wunder, daß die Frequenzen dann total ungenau sind.
Die unsaubere Flanke kommt primär daher, daß du Port D als Eingang
verwendest und nur die Pull-up-Widerstände ein- und ausschaltest.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> internen Oszillator von 1Mhz

von dem darfst du keine Wunder erwarten, der schwingt
je nach Temperatur mit einer anderen Frequenz. Wenn
die 10 ms kritisch sind, solltest du einen Quarz
einsetzen. Falls du beim internen Oszillator bleiben
willsz, studier im Datenblatt den Abschnitt der das
OSCCAL (OSCillator CALibration) beschreibt. Damit kannst
du den noch verstimmen. Aber wie gesagt, sobald es wärmer
oder kälter wird ....

Ansonsten: definiere 'unsauber'.

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Standard-Frage: Weiß der Compiler, dass Du mit 1 MHz taktest? Die
Information braucht der nämlich, um die delay-Routinen korrekt zu
verarbeiten. Also entweder #define F_CPU... oder unter
'Project|Configuration Options' den richtigen Takt auswählen.

Ansonsten kann man es anscheinend nicht oft genug sagen: Wenn Du
wirklich präzise Taktsignale erzeugen willst nimm
1. Nicht den internen RC-Oszi
2. Einen Timer und keine delay-Routinen...

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@johnny.m:
Ja, ich habe unter 'Project|Configuration Options' den richtigen
Tankt eingegeben. Allerdings wird hier automatisch immer ein UL
hintenangefügt, sobald ich erneut in die Configuration Options
gehe.

@Rolf Magnus:
Die Sache mit OSCCAL hat sich bereits erledigt. Hab ich auch gar nicht
mehr drin. Habe mir nur mal angesehen, was diese Funktion bewirkt.
Okay, die unsaubere Flanke ist nun weg.
Doch auch wenn ich jetzt die 10ms eingestellt habe, messe ich ti/tp
immer noch mit ca. 13ms. <<-- Das kann an dem schlechten internen
Oszillator liegen!!?

Allerdings kann ich z.b. auch 10µs einstellen und habe trotzdem ein
Signal im Bereich von einigen ms.

Danke und Gruß,

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du musst die Optimierung einschalten (-Os).

Autor: peter dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Generell ist ein Delay nicht dazu geeignet, exakte Zeiten zu erzeugen,
denn dazu sind die Timer da.

Ein Delay dient nur dazu, um nötige Mindestzeiten nicht zu
unterschreiten oder einfach nur ein Blinklicht oder ähnliches.

Je größer ein Programm, umso ungenauer ein Delay, da ja die
Programmlaufzeiten und die Interruptbehandlungszeiten nicht
berücksichtigt werden können.


Ein Timer läuft dagegen unabhängig von der Software und ist daher immer
auf den Zyklus (50ns bei 20MHz) genau.


Peter

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Okay, danke. Dann muss ich mich jetzt mit den Timern auseinandersetzen.
Mit dem Tutorial komme ich nicht so ganz klar.
Deshalb wollte ich es vermeiden. Da es aber anscheinend nur so
funktioniert bleibt mir nichts anderes mehr übrig.

Ich brauche 4 Ausgänge die jeweils 10ms eingeschaltet sind, allerdings
immer um 5ms Zeitversetzt.

Danke und Gruß,
Thomas

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du die Optimierung einschaltest, werden deine Zeiten schon
mal ein gutes Stück genauer (vor allem die für kurze Delays),
aber auf die Dauer wirst du um die Timer nicht drumrum kommen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.