Forum: Mikrocontroller und Digitale Elektronik LED Fading Problem


von Oliver G. (suchoi31)


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

: Bearbeitet durch User
von Marc V. (Firma: Vescomp) (logarithmus)


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.

von Falk B. (falk)


Lesenswert?

Siehe LED-Fading

von Karl H. (kbuchegg)


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.

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.