mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Programmbeispiel | Timer


Autor: S. S. (-xc-)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo

ich versuche dieses Beispiel zuverstehen, habe aber schwierigkeiten mit 
dieser zeile:
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
/*Hinweis: Der Timer ist für die 1Mhz vom interne Takt des ATMEGAs*/
#include <avr/io.h>
#include <avr/interrupt.h>
 
//Variablen für die Zeit
volatile unsigned int  millisekunden=0;
volatile unsigned int  sekunde=0;
volatile unsigned int  minute=0;
volatile unsigned int  stunde=0;
main()
{
 
   //Timer 0 konfigurieren
 
   TCCR0 =(1<<WGM01) |(1<<CS01);
   OCR0=125;
 
   //Compare Interrupt aktivieren
   TIMSK|=(1<<OCIE0);
   //Globale Interrupts aktivieren
   sei();
   while(1)
   {
    /*Hier kann man die aktuelle Zeit ausgeben werden*/
   }
 
}
 
 
//Der Compare Interrupt Handler
//Wird aufgerufen wenn TCNT0 = 125
{ISR(TIMER0_COMP_vect)
{
   millisekunden++;
   if(millisekunden==1000)
   {
      sekunde++;
      millisekunden=0;
      if(sekunde==60)
      {
         minute++;
         sekunde=0;
      }
      if(minute ==60)
      {
        stunde++;
        minute=0;
      }
   }
}

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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??

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

von welchem AVR und aus welchen Datenblatt soll das sein?

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

Gruß aus Berlin
Michael

Autor: Ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

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.