Hallo liebe Gemeinde,
ich benutze einen Atmega32 mit einem 11MHz Quarz.
Entwicklungsumgebung ist das AVR Studio 4.
Nun zu meinem Problem:
ich möchte eine LED langsam aufleuchten lassen, und direkt wieder
ausgehen lassen(Fading).
Im Moment habe ich das alles mit dem Timer0 gemacht, würde es aber gern
mit dem Timer1 oder 2 machen, da ich den Timer0 noch für andere Sachen
benötige. Mit dem Timer0 funktioniert das ganze prima. Kann mir jemand
Tipps geben, wie ich das ganze auf Timer1 oder 2 umschreiben kann?
Hier der Code:
1 | //Programm zum Einfaden mit direkt folgendem Ausfaden
|
2 | //20.04.2015
|
3 |
|
4 | #include <avr/io.h>
|
5 | #include <avr/interrupt.h>
|
6 |
|
7 | #define dimmgeschw 5; //Dimmgeschwindigkeit von 0 bis 1,2^38 einstellbar
|
8 |
|
9 | float i=0;
|
10 | char alternierendevariable=0;
|
11 |
|
12 | int main(void)
|
13 |
|
14 | {
|
15 |
|
16 | DDRB = 0x08;
|
17 |
|
18 | TCNT0=0x00;
|
19 |
|
20 | TCCR0 |= 1<<WGM00 | 1<<WGM01 | 1<<CS00 | 1<<CS02 | 1<<COM01;
|
21 |
|
22 | while(1)
|
23 | {
|
24 | if (alternierendevariable==0)
|
25 | {
|
26 | i+=dimmgeschw;
|
27 | OCR0=i/1000;
|
28 |
|
29 | if (i>=255000)
|
30 | {
|
31 | OCR0 = 0xff;
|
32 | alternierendevariable=~alternierendevariable;
|
33 | }
|
34 | }
|
35 | else if (alternierendevariable==255)
|
36 | {
|
37 | i-=dimmgeschw;
|
38 | OCR0=i/1000;
|
39 |
|
40 | if (i==0)
|
41 | {
|
42 | OCR0 = 0x00;
|
43 | alternierendevariable=~alternierendevariable;
|
44 | }
|
45 | }
|
46 | }
|
47 | }
|
Freu mich schon auf eure Ratschläge und Lösungsansätze.
MFG Oli