Hallo @ All,
Ich möchte gerne einen Timer programmieren (8bit), der nach einem
Overflow (255 Takten) eine LED einschaltet, nach einem weiteren Overflow
die LED wieder ausmacht (Und dann immer so weiter^^)
Mein Code sieht so aus:
1 | #include <avr/io.h>
|
2 | #include <avr/interrupt.h>
|
3 |
|
4 |
|
5 | int main(void)
|
6 | {
|
7 | // Timer 0 konfigurieren
|
8 | TCCR0 = (1<<CS01) // Prescaler 8
|
9 |
|
10 | // Overflow Interrupt erlauben
|
11 | TIMSK |= (1<<TOIE0);
|
12 |
|
13 | // Global Interrupts aktivieren
|
14 | sei();
|
15 |
|
16 | DDRC=3; // damit sind dann PC0 und PC1 Ausgänge
|
17 |
|
18 | while(1)
|
19 |
|
20 | {
|
21 |
|
22 | PORTC = 11; //0. bit im Port C setzen
|
23 |
|
24 | PORTC = 0; //0. bit im Port C löschen
|
25 |
|
26 | }
|
27 | }
|
28 |
|
29 | /*
|
30 | Der Overflow Interrupt Handler
|
31 | wird aufgerufen, wenn TCNT0 von
|
32 | 255 auf 0 wechselt (256 Schritte),
|
33 | d.h. ca. alle 2 ms
|
34 | */
|
35 | #ifndef TIMER0_OVF_vect
|
36 | // Für ältere WinAVR Versionen z.B. WinAVR-20071221
|
37 | #define TIMER0_OVF_vect TIMER0_OVF0_vect
|
38 | #endif
|
39 |
|
40 | ISR (TIMER0_OVF_vect)
|
41 | {
|
42 | /* Interrupt Aktion alle
|
43 | (1000000/8)/256 Hz = 488,28125 Hz
|
44 | bzw.
|
45 | 1/488,28125 s = 2,048 ms
|
46 | */
|
47 | }
|
Kann mir jemand weiterhelfen ?
Da ich noch ziemlich neu bin, habe ich den Quellcode kopiert, eingefügt
und habe nur "DDRC=3" hinzugefügt und die Ports an und ausgeschaltet.
Grüße,