Forum: Mikrocontroller und Digitale Elektronik Programmbeispiel | Timer


von S. S. (-xc-)


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
}

von Stefan E. (sternst)


Lesenswert?

S. S. schrieb:

> das cs01 verstehe ich aber was macht das wgm01? kann das im tutorial
> nicht finden

Damit wird der Timer-Modus eingestellt.
Die konkrete Bedeutung eines Bits sucht man am besten im Datenblatt.

von stefan (Gast)


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

von Gast (Gast)


Lesenswert?

>es gibt in diesem Register nur die drei Bits CS00,
>CS01, CS02 um den Timer zu konfigurieren.

Noe.

>Aber woher kommt WGM01??

Datenblatt Seite 80.

Gruss

von stefan (Gast)


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

von Michael U. (amiga)


Lesenswert?

Hallo,

von welchem AVR und aus welchen Datenblatt soll das sein?

Beim Mega8 als Beispiel sieht es so aus:
1
Bit    7     6     5     4     3     2    1    0
2
Name ICNC1 ICES1   -    WGM13 WGM12 CS02 CS01 CS00
3
R/W   R/W   R/W    R     R/W   R/W   R/W  R/W  R/W

Gruß aus Berlin
Michael

von Ich (Gast)


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.

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
Noch kein Account? Hier anmelden.