LED Fading Problem

#4099832
Lesenswert?

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
(Firma: Vescomp) #4099914
Lesenswert?

Oliver Go schrieb:
> benötige. Mit dem Timer0 funktioniert das ganze prima. Kann mir jemand
> Tipps geben, wie ich das ganze auf Timer1 oder 2 umschreiben kann?

 Na, so prima wohl auch wieder nicht.
 Du dimmst linear, solltest es aber logarithmisch tun, also nicht:
        i+=dimmgeschw;
 sondern:
        i *= 1.21;

 P.S.
 Dein compiler castet die Typen zwar von alleine, aber es ware trotzdem
 besser wenn du es tust.
#4100015
Lesenswert?

Oliver Go schrieb:

> Kann mir jemand
> Tipps geben, wie ich das ganze auf Timer1 oder 2 umschreiben kann?

Versteh ich das richtig?
Du hast ein Programm geschrieben, welches PWM mit dem Timer 0 macht. 
Aber das Umschreiben auf den Timer 1 kriegst du nicht hin?

Das kann ich kaum glauben.
Wenn du verstanden hast, was du hier
1
   TCCR0 |= 1<<WGM00 | 1<<WGM01 | 1<<CS00 | 1<<CS02 | 1<<COM01;
konfiguriert hast und warum, dann ist das doch Kinderkram, die 
entsprechende Konfiguration für den Timer 1 mithilfe des Datenblattes 
zusammenzusuchen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren