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