Moodlight mit tiny2313

OP #2448023
Lesenswert?

Hey, hab vor mir nen Moodlight mit nen paar Extrafeatures(Farbsteuerung 
via Poti, etc.) zusammenzubasteln, habe aber schon bei nem einfachen 
Farbübergang nen paar Probleme.
Bisher hab ich zum testen nur eine RGB-LED drann.
Rot an PINB2, Blau an PINB3 und Grün an PINB4

Der Sourcecode ist folgender:
1
//Moodlight für den Atmel AVR Attiny2313 von Florian
2

3
#include <stdio.h>
4
#include <avr/io.h>
5
#include <util/delay.h>
6

7
int main(void)
8
{
9
TCCR0A = 0b10100011; TCCR0B=0b00000010; TCNT0 = 0x00; TIMSK = 0x00;
10
DDRB = 0b00011100;
11
OCR0A = 100; OCR1A = 0; OCR1B = 100;
12
int r = 100; int b = 0; int g = 100;
13
int min = 10; int max = 255;
14
while(1)
15
    {
16
    while(r < max)//rot an
17
      {
18
      OCR0A = r;
19
      _delay_ms(5);
20
      r++;
21
      }
22
    while(g > min)//grün aus
23
      {
24
      OCR1B = g;
25
      g--;
26
      _delay_ms(5);
27
      }
28
    while(b < max)//blau an
29
      {
30
      OCR1A = b;
31
      _delay_ms(5);
32
      b++;
33
      }
34
    while(r > min)//rot aus
35
      {
36
      OCR0A = r;
37
      r--;
38
      _delay_ms(5);
39
      }
40
    while(g < max)//grün an
41
      {
42
      OCR1B = g;
43
      _delay_ms(5);
44
      g++;
45
      }
46
    while(b > min)//blau aus
47
      {
48
      OCR1A = b;
49
      b--;
50
      _delay_ms(5);
51
      }
52
    }
53
return 0;
54
}

Irgendwo muss ich mal wieder einen Denkfehler haben oder das Datenblatt 
falsch verstanden haben, tut sich nämlich nur bei dem roten Kanal was. 
Ich hab im Moment die Vermutung das ich das TCCR0A oder die OCRxx 
Register noch nicht ganz verstanden habe.Über hilfe würde ich mich 
riesig freuen :)

lg soda
OP #2449487
Lesenswert?

Grob funktioniert das ganze jetzt schonmal, allerdings kommt es beim 
Timer1 leider zum flackern, wenn die LED entweder ein- oder 
ausgeschaltet wird.

Sourcecode ist für den prozess folgender:
1
while(g > min)//grün aus
2
      {
3
      OCR1B = g * 255;
4
      g--;
5
      _delay_ms(5);
6
      }

Ist die Rechnung g * 255 für den 8-Bit controller zu anspruchsvoll, oder 
hat er vielleicht Probleme damit einen Timer 2 Mal zu benutzen? Mit dem 
8-Bit Timer hab ich keine Probleme. Als ich noch nicht implementier 
habe, das Timer 1 eine 16-Bit Quantisierung hat, lief alles ohne 
Flackern, allerdings waren die LED's natürlicherweise nicht so Hell wie 
die an Timer 0.

Falls es an der Doppelbelegung des Timer liegt, kann man den 
Timercontrol an einem Pin auch ausschalten, oder schaltet man PORTB den 
Output wieder auf high? Falls das nicht geht könnte man ja noch über 2 
zusätzliche Transistoren, pro Farbe, das ganze steuern.

Viele Grüße, soda
OP #2453820
Lesenswert?

Danke, daran hats gelegen. Das ganze war auf 10-Bit eigestellt und dann 
darf man natürlich nicht von einer 16-Bit Auflösung ausgehen, habs jetzt 
auf 8 Bit laufen und nach Stundenlanger Fehlersuche, hab ich dann noch 
entdeckt das ich beim DDRB-Register eine 0 vergessen habe. Jetzt 
funktioniert es so, wie es soll.

Vielen Dank!!! :)

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