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
@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
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
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
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
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 | }
|
läuft dein µC überhaupt mit 8mhz? verstehst du den quelltext? dein voriger post ist übrigens hardware-pwm.
>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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.