www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Mega128 Timer Einstellung


Autor: Andre (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hay Leute

Ich habe eine Frage ich habe einen Atmega128 und einen 4,915000 MHZ
Quarz nun möchte ich einen Timer Interuppt alle 5 sek. Auslösen.

Was muss ich den bei

TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;

TIMSK=0x00;
ETIMSK=0x00;

Eintragen und welcher Timer währe dafür geeignet 5 sek Auszulösen?


MFG: Andre

Autor: Helge Dietert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

mit TMISK und ETMISK kann man einstellen auf welche timer-interrupts
reagiert werden soll.

Mit TCCR stellt man das Verhalten des ganzen Ein.

Bei einer solchen festen Vorgabe würde ich einen 16-Bit timer nehmen
und dann entweder jeder overflow zählen und auswerten; oder das
Vergleichsregister nehmen und jeden Vergleichsregisterüberlauf
auswertern (gibt ein extra Flag, mit dem er er dann TCNT runtersetzt)
oder direkt eine PWM Einheit verwenden mit einer Pulsweiten von 0,5 von
der Gesamtlänge.

TCNT ist generell das Register in dem hochgezählt wird; meistens bis
zum Overflow. Kann auch geschrieben werden, so dass dann ab einem
höhreren Wert gezählt wird.

Die genauen Werte stehen recht verständlich im Datenblatt vom Atmel
oder mal unter dem AVR-GCC-Tutorial gucken.

Viele Grüße
Helge

Autor: Andre (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja das habe ich ja Verstanden nun möchte ich aber gerne die Werte haben
wenn es ginge ich weiss nicht wie ich das rechnen soll.
MFG: Andre

Autor: Helge Dietert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

das Rechnen ist sehr einfach.

Du hast die Frequenz vom Hauptquarz, meisten f_h = 16 000 000 Hertz

Mit dem Prescaler schlägt dein Timer mit einem Wert von f_t = fh /
Prescaler

Nach 0 < x < 2^16 (Entweder mit dem Input Compare Register [+Der TCNT
kann von der Hardware resettet werden oder nach jedem Overflow schon
einen Werte in TCNT schreiben [+ Input Compare Register kann
anderweitig verwendet werden; -zusätliche Anweiseung] ) erfolgt dann
halt der Overflow.

Als Frequenz f_i mit der das Interrupt aufgerufen wird ergibt sich so:

f_i = f_h / ( Prescaler * x )

fertig!

Persönlich mache ich dann so, wenn ich für eine f_i passende Werte
Suche, dass ich die möglichst großen Prescaler ausprobiere und dann
versuche entweder mit 8 Bit auszukommen -> x < 2^8 oder 16 Bit
auszukommen -> x <2^16. Um das in diesem Bereich einfach einstellen zu
können und um eine bessere Genauigkeit zu bekommen, versuche ich x
immer möglichst groß zu machen.

Wenn man bei einem Interrupt immer nur Umschaltet ist die Frequenz des
Signals natürlich nur f_i/2.

Bei PWM Hardwareeinheiten, stehen für die einzelnen Modi die Formel so
ähnlich schon direkt im Datenblatt.

Viele Grüße
Helge

Autor: Helge Dietert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
P.S.:

Für sowas kann man das auch recht gut mit dem Toolkit von atmel
ausprobieren. Einfach mal setzen, breakpoint auf das interrupt setzen,
und die stopwatch anschauen.

Wenn es gar nicht gut, kann ich es auch mal vorrechnen; nur mein
Arbeitsrechner ist nicht am Internet, so dass ich von ihr nicht die
Quellen habe.

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.