Forum: Mikrocontroller und Digitale Elektronik ATMega128 Timer


von silbergold (Gast)


Lesenswert?

Hallo, ich müsste auf dem ATMega128 zwei Timer haben. Also einmal einen 
CTC Timer und einmal einen für PWM.

Also PWM Timer soll Timer 1 zum einsatz kommen. Ich habe die Pins OCR1A 
und OCR1B als PWM Pins vorgesehen.

Der CTC Timer soll wie hier in dem AVR-GCC Tutorial die ms und sekunden 
usw. zählen.

Ich habe nun schonmal angefangen die Timer zu konfigurieren:

Der Code:
1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3
#include <stdint.h>
4
5
6
#define  PWMPORT1  PB5
7
#define PWMPORT2  PB6
8
9
10
// CTC Timer0 Variablen
11
volatile unsigned int millisekunde;
12
volatile unsigned int sekunde;
13
volatile unsigned int minute;
14
volatile unsigned int stunde;
15
16
int main(void)
17
{
18
19
/ Port richtungen bestimmen
20
DDRB |= (1<<PWMPORT1); // PWMPort OC1A auf Ausgang
21
DDRB |= (1<<PWMPORT2); // PWMPort OC1B auf Ausgang
22
23
// Timer1 PWM 10 Bit Phase Correct
24
TCCR1A = (1<<WGM11) | (1<<WGM10) | (1<<COM1B1) | (1<<COM1A1);
25
TCCR1B = (1<<CS10);
26
27
OCR1A = 0;
28
OCR1B = 0;
29
30
  while(1)
31
  {
32
  
33
    
34
  
35
  }
36
37
}
38
39
// Timer ISR CTC Overflow
40
41
ISR (TIMER0_OVF_vect) {
42
    millisekunde++;
43
  
44
  if (millisekunde == 1000) 
45
  {
46
    millisekunde = 0;
47
    sekunde++;
48
  }
49
  
50
  if (sekunde == 60)
51
  {
52
    sekunde = 0;
53
    minute++;
54
  }
55
  
56
  if (minute == 60)
57
  {
58
    minute = 0;
59
    stunde++;
60
  }
61
  
62
  if (stunde == 24)
63
  {
64
    stunde = 0;
65
  }
66
}

Der berechnung nach (16000000 / 1) / 1000 müsste ich nun einen Wert von 
0 - 16000 für die PWM haben, ist das korrekt? Also OCR1A und OCR1B kann 
ich dann von 0 - 16000 setzen?

Ist der Timer so denn auch richtig gesetzt?

Dann noch Timer0. Da schlage ich mich gerade durch das Datenblatt nur 
ich weiss nicht was ich alles setzen muss und wie ich dann den 
"overflow" errechne.

Könnt ihr mir da ein paar Tips geben?

Ich danke euch schonmal.

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.