Programmbeispiel | Timer

OP #1263234
Lesenswert?
• ▲
▼
hallo

ich versuche dieses Beispiel zuverstehen, habe aber schwierigkeiten mit 
dieser zeile:
1
TCCR0 =(1<<WGM01) |(1<<CS01);
das cs01 verstehe ich aber was macht das wgm01? kann das im tutorial 
nicht finden

das beispiel ist übrigens auch aus dem tutorial

danke
1
/*Hinweis: Der Timer ist für die 1Mhz vom interne Takt des ATMEGAs*/
2
#include <avr/io.h>
3
#include <avr/interrupt.h>
4
 
5
//Variablen für die Zeit
6
volatile unsigned int  millisekunden=0;
7
volatile unsigned int  sekunde=0;
8
volatile unsigned int  minute=0;
9
volatile unsigned int  stunde=0;
10
main()
11
{
12
 
13
   //Timer 0 konfigurieren
14
 
15
   TCCR0 =(1<<WGM01) |(1<<CS01);
16
   OCR0=125;
17
 
18
   //Compare Interrupt aktivieren
19
   TIMSK|=(1<<OCIE0);
20
   //Globale Interrupts aktivieren
21
   sei();
22
   while(1)
23
   {
24
    /*Hier kann man die aktuelle Zeit ausgeben werden*/
25
   }
26
 
27
}
28
 
29
 
30
//Der Compare Interrupt Handler
31
//Wird aufgerufen wenn TCNT0 = 125
32
{ISR(TIMER0_COMP_vect)
33
{
34
   millisekunden++;
35
   if(millisekunden==1000)
36
   {
37
      sekunde++;
38
      millisekunden=0;
39
      if(sekunde==60)
40
      {
41
         minute++;
42
         sekunde=0;
43
      }
44
      if(minute ==60)
45
      {
46
        stunde++;
47
        minute=0;
48
      }
49
   }
50
}
Gast #1330404
Lesenswert?
• ▲
▼
Ich häng mich jetzt einfach an diesen Beitrag an. Ich verstehe dieses 
Beispiel auch nicht!

diese Zeile ist unverständlich:

TCCR0 =(1<<WGM01) |(1<<CS01);

es gibt in diesem Register nur die drei Bits CS00, CS01, CS02 um den 
Timer zu konfigurieren. Aber woher kommt WGM01??

Was passiert hier?

OCR0=125;

Wird hier nur die Variable OCRO mit 125 belegt oder soll dies ein 
Register sein?


//Der Compare Interrupt Handler
//Wird aufgerufen wenn TCNT0 = 125
{ISR(TIMER0_COMP_vect)

Diese zeile verstehe ich auch nicht.

Vielleicht kann mir jemand helfen.
Danke
Gast #1330451
Lesenswert?
• ▲
▼
Timer/Counter Control Register

Timer 0

In diesem Register stellen wir ein, wie wir den Timer/Counter verwenden 
möchten.

Das Register ist wie folgt aufgebaut:
Bit   7   6   5   4   3   2   1   0
Name   -   -   -   -   -   CS02   CS01   CS00
R/W   R   R   R   R   R   R/W   R/W   R/W
Initialwert   0   0   0   0   0   0   0   0


CS02, CS01, CS00 (Clock Select Bits)

    Diese 3 Bits bestimmen die Quelle für den Timer/Counter:

    CS02   CS01   CS00   Resultat
    0   0   0   Stopp, Der Timer/Counter wird angehalten.
    0   0   1   CPU-Takt
    0   1   0   CPU-Takt / 8
    0   1   1   CPU-Takt / 64
    1   0   0   CPU-Takt / 256
    1   0   1   CPU-Takt / 1024
    1   1   0   Externer Pin TO, fallende Flanke
    1   1   1   Externer Pin TO, steigende Flanke

    </dd>

    Wenn als Quelle der externe Pin TO verwendet wird, so wird ein 
Flankenwechsel auch erkannt, wenn der Pin TO als Ausgang geschaltet ist.


Das Register ist doch so aufgebaut??
Gast #1330469
Lesenswert?
• ▲
▼
Ihr müsst euch zuerst mal darauf einigen, welchen Prozessor ihr 
überhaupt verwendet. Davon hängt die Belegung von TCCR0 ab. Die 
WGM0-Bits sind nämlich je nach Prozessortyp auch auf andere Register 
verteilt. Prozessoren, die kein PWM mit Timer0 können, haben 
logischerweise auch keine WGM0-Bits.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren