Hallo,
ich wollte die hier im Tutorial befindliche SoftPWM in einer funktion
laufen lassen, allerdings geht dann garnichts mehr.
So läuft sie:
1 | int main(void)
|
2 | {
|
3 |
|
4 | uint8_t pwm_soll = 100; // gewünschter Dimmerwert 0..100
|
5 | uint8_t pwm_phase = 0; // Laufwert der Schleife 0..100
|
6 |
|
7 | // LED + Widerstand mit PB0 und +5V verbunden
|
8 | // PB0 o-----|<-----###------o Vcc 5V
|
9 | DDRB |= (1<<PB1); // Pin PB0 an Port B als Ausgang
|
10 | // LED ist bereits an
|
11 |
|
12 | while(1)
|
13 | {
|
14 | if(pwm_soll == pwm_phase)
|
15 | {
|
16 | PORTB &= ~(1<<PB1); // active low LED aus
|
17 | }
|
18 | pwm_phase++;
|
19 | if(pwm_phase == 100)
|
20 | {
|
21 | pwm_phase = 0;
|
22 | PORTB |= (1<<PB1); // active low LED an
|
23 | }
|
24 | }
|
25 | }
|
Jetzt dachte ich mir ich erstelle mir eine funktion namens dim() die
dann den dimwert also pwm_soll enthält, also z.b. dim(20);
1 | int dim(int dimwert)
|
2 | {
|
3 |
|
4 | uint8_t pwm_soll = dimwert; // gewünschter Dimmerwert 0..100
|
5 | uint8_t pwm_phase = 0; // Laufwert der Schleife 0..100
|
6 |
|
7 | if(pwm_soll == pwm_phase)
|
8 | {
|
9 | PORTB &= ~(1<<PB1); // active low LED aus
|
10 | }
|
11 | pwm_phase++;
|
12 | if(pwm_phase == 100)
|
13 | {
|
14 | pwm_phase = 0;
|
15 | PORTB |= (1<<PB1); // active low LED an
|
16 | }
|
17 |
|
18 | }
|
19 |
|
20 | int main(void)
|
21 | {
|
22 |
|
23 |
|
24 | // LED + Widerstand mit PB0 und +5V verbunden
|
25 | // PB0 o-----|<-----###------o Vcc 5V
|
26 | DDRB |= (1<<PB1); // Pin PB0 an Port B als Ausgang
|
27 | // LED ist bereits an
|
28 |
|
29 | while(1)
|
30 | {
|
31 | dim(20);
|
32 | }
|
33 | }
|
Allerdings leuchtet hier die LED nur garnicht mehr. Komisch ist auch,
das wenn ich bei dem ersten Code beispiel an das ende der while schleife
noch was einfüge die LED dann auch nicht mehr leutet, also ich verstehe
das hier mal rein garnichtmehr. Lasse ich den Code und sonst nichts
weiteres in einer while schleife laufen oder schreibe ich vor dem pwm
code was in die while geht alles.
Schreibe ich nach dem pwm code was in die while dann geht der ganze code
nicht mehr.
Ich hoffe man versteht was ich meine und man kann mir weiter helfen.
Gruß
Tobias