Forum: Mikrocontroller und Digitale Elektronik Soft PWM für RGB LEDs


von Marco M. (marco1987)


Lesenswert?

Ich suche..

ein Beispielcode für eine Soft PWM, habe hier im Forum schon danach 
gesucht und sogar schon das Tutorial SOFT pwm versucht, aber leider geht 
der Sourcecode nicht.(hatte ich auch schon hier gepostet)

prinzip habe ich schon etwa verstanden

aber habe bisher kein schönes Beispiel gefunden.

was ich brächte wäre halt ein Ansatz, womit ich eine Variable habe und 
mit dieser kann ich dann die helligkeit der LED bestimmen.
Das ganz soll auf einem Atmega16 laufen

Danke

von Falk B. (falk)


Lesenswert?

@Marco M. (marco1987)

>aber habe bisher kein schönes Beispiel gefunden.

Das Tutorial ist kein schönes Beispiel? Hmmmmm...

>was ich brächte wäre halt ein Ansatz, womit ich eine Variable habe und
>mit dieser kann ich dann die helligkeit der LED bestimmen.

Genau das macht der Code im Tutorial.

MFG
Falk

von Christoph S. (mixer) Benutzerseite


Lesenswert?

http://www.mikrocontroller.net/articles/AVR-Tutorial:_PWM#PWM_in_Software

Mit diesem Programm können 6 Ausgänge per PWM gedimmt werden. Die 
"variablen" musst du dann nur in die ocr-Register schreiben.
Wenn du nur 3 für eine RGB-LED benötigst kannst du ja das Programm 
dementsprechend abspecken!

MFG Mixer

von Marco M. (marco1987)


Lesenswert?

Mixer S. wrote:
> http://www.mikrocontroller.net/articles/AVR-Tutorial:_PWM#PWM_in_Software
>
> Mit diesem Programm können 6 Ausgänge per PWM gedimmt werden. Die
> "variablen" musst du dann nur in die ocr-Register schreiben.
> Wenn du nur 3 für eine RGB-LED benötigst kannst du ja das Programm
> dementsprechend abspecken!
>
> MFG Mixer

Danke für die Antwort, ich vergaß, wäre gut wenn dies in C gemacht 
werden würde

>Das Tutorial ist kein schönes Beispiel? Hmmmmm...

doch da ist schon ein Beispiel aber dies geht öeider nicht da der 
compiöer winavr an dem mprog oder sowas rummeckert

von Marco M. (marco1987)


Lesenswert?

Was spricht gegen diesen Code?


for(tmp=255; tmp>=0; tmp--){

 OCR1B = tmp;
 OCR1A = tmp;
 OCR2 = tmp;
 _delay_ms(2);

}

hiermit werden  OCR1B und OCR1A gleichmäßig gedimmt, nur leider OCR2 
nicht der flackert immer liegt es an dem Unterschied 8 bit, 16 bit 
timer?

MFG

von Marco M. (marco1987)


Lesenswert?

Hab eine neue version für soft pwm angeblich soll man damit dimmen 
können aber irgendwie eflackern meine leds neoch ziemlich schnell

1
#define F_CPU 8000000L
2
 
3
4
#include <avr/io.h>
5
#include <util/delay.h>
6
7
#include <avr/interrupt.h>
8
 
9
10
uint8_t PWM_Counter;
11
uint8_t PWM1=50;
12
uint8_t PWM2=150;
13
uint8_t PWM3=250;
14
15
16
17
int main(){
18
19
DDRB=0xFF;
20
  TCCR0 = ( 1 << CS02 ) | ( 1 << CS00 ); // Teiler: 1024
21
  TIMSK = ( 1 << TOIE0 );         // Overflow Interrupt einschalten
22
sei();
23
24
for(;;){}
25
26
}
27
28
29
30
31
ISR(TIMER0_OVF_vect )
32
{
33
  PWM_Counter++;
34
PORTB^=PORTB | (1<<PB3);
35
36
  if( PWM_Counter < PWM1 )
37
    PORTB=PORTB | (0<<PB0);   //LED1_ausschalten; 
38
  else
39
    PORTB=PORTB | (1<<PB0);   //LED1_einschalten; 
40
41
  if( PWM_Counter < PWM2 )
42
      PORTB=PORTB | (0<<PB1);  // LED2_ausschalten;
43
  else
44
   PORTB=PORTB | (1<<PB1);    // LED2_einschalten; 
45
46
  if( PWM_Counter < PWM3 )
47
     PORTB=PORTB | (0<<PB2);    // LED3_ausschalten;
48
  else
49
    PORTB=PORTB | (1<<PB2);     // LED3_einschalten; 
50
}

von Michael H* (Gast)


Lesenswert?

läuft dein µC überhaupt mit 8mhz? verstehst du den quelltext?
dein voriger post ist übrigens hardware-pwm.

von Marco M. (marco1987)


Lesenswert?

>Hab eine neue version für soft pwm angeblich soll man damit dimmen
>können aber irgendwie eflackern meine leds neoch ziemlich schnell

geht daraus icht hervor das es JETZT software ist und vorher was anderes 
waer:-) bleibt ja dann nur noch die hardware pwm übrig wa^^


warum  sollte der nicht mit dem internen 8mhz takt laufen? na klar


naja verstehen schon von der syntax her nur im allgemeinen nicht, wie 
daraus ein dimmen passieeren soll.

MFG

von Marco M. (marco1987)


Lesenswert?

ok also das mit dem dimmen klappt nuer wenn ich für pwm1 2e oder so 
eeine 0 einsetzte leuchtet die led sehr schwach wie bekomme ich die mit 
dieser methode ganz aus

von Christoph S. (mixer) Benutzerseite


Lesenswert?

Schau das PWM-Signal mal bei verschiedenen Dimmstufen mit dem 
Oszilloskop an, und probiere die Software mal in nem Simulator dann 
erkennst du das Prinzip der SW-PWM!

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.