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.