Timer Interrupt Atmega128

#367476
Lesenswert?
• ▲
▼
Hast du dir schon mal das AVR-GCC Tutorial
angeschaut? Dort gibt es einen Abschnitt über
Timer.
Was genau verstehst du denn daran nicht?
Im Grunde ist das ganz simpel:
Der Timer wird mit einem Vorteiler an den 'Quarz'
abgehängt. Dann zählt der ganz von alleine. Wenn
der Timer seinen Endstand erreicht hat, löst
er einen Overflow-Interrupt aus und fängt wieder bei
0 an.
Es liegt jetzt an dir den Vorteiler so einzustellen,
dass du eine Zeitbasis im Overflow Interrupt bekommst
mit der du weiter arbeiten kannst. Wenn du zb. das ganze
so einstellst, dass alle 1ms ein Overflow auftritt, dann
zählst du ganz einfach im Overflow Interrupt eine globale
Variable hoch. Da der Overflow alle 1ms kommt ist also
genau dann, wenn dieser Zähler 1000 erreicht hat, 1
Sekunde vergangen.
#367479
Lesenswert?
• ▲
▼
Aber was solls, hier ist ein Beispiel:

#include <avr/io.h>
#include <avr/interrupt.h>

volatile unsigned int Counter;

ISR( TIMER0_OVF_vect )       // alle 0.000128 Sekunden / 8 Mhz
{
  Counter++;

  if( Counter == 10000 ) {
    PORTB = ~PORTB;
    Counter = 0;
  }
}

int main()
{
  Counter = 0;

  DDRB = 0xFF;

  TCCR0 = ( 1 << CS02 ) | ( 1 << CS00 ); // Teiler: 1024
  TIMSK = ( 1 << TOIE0 );         // Overflow Interrupt einschalten
  sei();                          // Interrupt generell zulassen

  while( 1 )
    ;
}
Gast #367480
Lesenswert?
• ▲
▼
was hat das DDRB zu sagen an Port B hängt mein Display.


Mit diesm Code tut sich nichts.

ich möcht erreichen das ein Bild 3 secunden auf dem Display erscheint
und dann verschwindet und dann das nächste.


Deshalb der Timer

wenn 3 sekunden vergangen Timer soll abgeschalten werden(keine
Interrupt auslösung)neues bild laden und timer einschalten.
Gast #367481
Lesenswert?
• ▲
▼
DDRB = 0xFF;
schalte alle PINS an PORTB auf Ausgang
>Mit diesm Code tut sich nichts
Wenn du das Beispiel der Timerbenutzung einfach übernommen und getestet
hast, dürften die Ausgänge deines Display's an PORTB nicht sehr
glücklich darüber sein. Ausgang auf Ausgang und der eine Ausgang
invertiert ständig , da wird es interesant welcher Treiber eher
aufgibt.
(das Display könnte kaputt sein)

>wenn 3 sekunden vergangen Timer soll abgeschalten werden(keine
>Interrupt auslösung)neues bild laden und timer einschalten
Du hast doch kapiert was du machen musst, du hast ein Bsp. wie man den
Timer benutzt. Warum schreibst DU nicht deine Anwendung?

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.