RGB-Led und ATtiny13 - Möglich?

Gast #2369141
Lesenswert?

Hallo,

hier (http://bralug.de/wiki/ATtiny-Sonntagsspielereien#RGB-LED) habe ich 
gelesen, dass man mit dem ATtiny auch eine RGB-Led ansteuern kann (mit 
PWM).

Gestern abend habe ich mal mit meinem ATtiny13 und einer LED 
rumexperimentiert und einen erstaunlichen "Fade"-Effekt hin bekommen. 
Ich habe auch 2 LEDs verwenden können (an PB0 und PB1).

Bei einer RGB-Led ist es doch so, dass man mit drei von den Beinchen die 
Farben rot, grün und blau ansteuert und das vierte wird an GND gehangen, 
oder? D.h. ich bräuchte drei Ports für die PWM, um verschiedene Farben 
zu erzeugen?

... und hier meine Fragen dazu:

* Hat der ATtiny13 3 Ports für PWM? Wenn nein, muss ich dann den 
ATtinyXX nehmen (und was ist XX - 25v, 45v ...)? Gibt es keinen anderen 
Weg?

* Ich wollte diese RGB-Led (und den Aufbau: der ja aus der Batterie, dem 
Mikrocontroller und vier Wiederständen besteht) mit einer Knopfzelle 
laufen lassen (CR2032): wie lange hält die Batterie durch?

Ich freue mich auf Antworten!
Gruß,
Max
Gast #2369488
Lesenswert?

Bastler schrieb:
> http://blog.kevinmehall.net/2007/rgb-led-rainbow-fader
>
> http://www.ledhilfe.de/viewtopic.php?t=8702

Toll. Nur leider ist kein Source-Code dabei!
Ich habe daher selber etwas im Internet zu Software-PWM recherchiert. 
Dabei bin ich auf folgenden hilfreichen Beitrag gestoßen:

> Schritt 1: Schalte LED ein
> Schritt 2: Warte Zeit X
> Schritt 3: Schalte LED aus
> Schritt 4: Warte Zeit Y
>
> Wenn Du X immer kleiner und Y immer größer werden lässt, wird die LED dunkler.

Das habe ich auch ausprobiert mit verschiedenen Werten und das klappt 
sogar:
1
$regfile = "attiny13.dat"
2
$crystal = 1200000
3

4
Config Portb.1 = Output
5

6
Do
7
   ' Leer
8

9

10
   Portb.1 = 1
11
   Waitms 1
12
   Portb.1 = 0
13
   Waitms 10
14

15
Loop
16

17
End

Doch ich habe immer noch nicht ganz verstanden, wie ich mit diesem 
Wissen mir ein Programmkonstrukt baue, dem ich sagen kann LED_Red auf 
60% und LED_Green auf 40% und LED_Blue auf 100%.

Könntet ihr mir vielleicht noch ein bisschen Input geben?

Gruß,
Max
#2369503
Lesenswert?

1ms An 10ms aus = 1ms /  (10ms + 1ms) = 1/11 = 9%

In Assembler geht SW-PWM in 3 Takten pro Kanal wenn man genügend 
Register zu verfügung hat: 3x SW-PWM würde bei 8Mhz mit 1kHz PWMfrequenz 
laufen (50% CPU).

um das in Bascom so schnell genug zu bekommen, wirst du dir ein gutes 
Konzept überlegen müssen.
Gast #2369538
Lesenswert?

Samuel K. schrieb:
> um das in Bascom so schnell genug zu bekommen, wirst du dir ein gutes
> Konzept überlegen müssen.

D.h. mit Bascom kann ich das vergessen?
Okay, wie ist es denn in C? Und wo finde ich das mal versändlich 
erklärt? Überall wo ich bisher geschaut habe wurde ein bisschen erklärt 
und dann kam schon die Komplettlösung, ohne dass man die Lösung 
verstanden hat.

Gruß,
Max

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