Hallo Community :) ich verzweifle gerade ab meinem Mini Projekt. Ich möchte mit zwei Knöpfen das Tastverhältnis meiner PWM um 5% erhöhen oder verringern. Doch egal was ich drücke, oder auch nicht drücke. Ich bekomme ausgangsseitig immer 2.5V Spannung. Ein Ossi hab ich leider momentan nicht zur Verfügung um das mal genau nachzumessen. Mein Multimeter zeigt mir eine Frequenz von 16.24 kHz. Ich kann mir nicht ausmalen was der Fehler sein könnte. Hättet ihr eine Anregung? Grüße
1 | #define F_CPU 8000000UL
|
2 | #include <avr/io.h> |
3 | #include <util/delay.h> |
4 | #include <stdlib.h> |
5 | #include <avr/interrupt.h> |
6 | |
7 | |
8 | |
9 | int main(void){ |
10 | |
11 | |
12 | DDRC &= ~(1 << PC5); // PC5 als Eingang festlegen |
13 | PORTC |= (1 << PC5); // Pullup für PC5 aktivieren |
14 | DDRC &= ~(1 << PC4); // PC4 als Eingang festlegen |
15 | PORTC |= (1 << PC4); // Pullup für PC4 aktivieren |
16 | |
17 | |
18 | |
19 | //Hardware-PWM initialisieren
|
20 | |
21 | DDRB |= (1 << DDB3); |
22 | // PB3 is now an output
|
23 | |
24 | TCCR2 |= (1 << COM21); |
25 | // set none-inverting mode
|
26 | |
27 | TCCR2 |= (0 << WGM21) | (1 << WGM20); |
28 | // set fast Phasecorrect PWM Mode
|
29 | |
30 | TCCR2 |= (1 << CS20); |
31 | // no prescaler
|
32 | |
33 | float variable = 0.5; //standart pwm |
34 | int variablex = variable * (255); //standart pwm |
35 | while(1){ |
36 | |
37 | if (bit_is_clear(PINC,5)) {variable = variable + (0.05); _delay_ms(10);} // Wert von PC5 prüfen |
38 | if (bit_is_clear(PINC,4)) {variable = variable - (0.05); _delay_ms(10);} // Wert von PC4 prüfen |
39 | |
40 | if (variable < 0){variable = 0;} |
41 | if (variable > 1){variable = 1;} |
42 | |
43 | variablex = variable * (255); |
44 | OCR2 = variablex; |
45 | |
46 | }
|
47 | |
48 | |
49 | return 0; |
50 | }
|