Hallo Community!
Ich versuche derzeit zum üben einen Spannungsregler mit einem Atmega8 zu
bauen.
Das ganze funktioniert auch ziemlich super. Selbstverständlicherweise
reagiert das ganze nicht so schnell wie ein Spannungsregler den es
fertig zu kaufen gibt. Es geht aber um den Lerneffekt.
Vorgeschichte:
Ich lese am ADC0(Versorgungsspannung) und ADC1(Sollspannung) die
verschiedenen Spannungen ein. Dabei kommen Werte von 0 bis 1023.
Daraus berechne ich den Faktor, und multipliziere diesen mit 255. Dann
gebe ich dem PWM Register OCR2 diesen Wert.
1 | int main(void){
|
2 | int variable = 0;
|
3 | int variablex = 0;
|
4 | int x1=0, x2=0;
|
5 | }
|
1 | while(1){
|
2 | x1 = MESSWERT(0);
|
3 | x2 = MESSWERT(1);
|
4 |
|
5 | variable = (x2 / x1) * 255;
|
6 | if (variable < 0){variable = 0;}
|
7 | if (variable > 255){variable = 255;}
|
8 | variablex = variable;
|
9 |
|
10 | OCR2 = variablex
|
11 | }
|
Mein Problem ist jetzt folgendes:
Leider regelt der PWM (oder 'variablex') nur in viertel Schritten. Also
63, 127, 191 und 255.
Ich kann mir aber nicht erklären weshalb das so ist.
'variablex' steht noch im Code weil ich das ganze mal mit Float probiert
hatte. Hat leider ebenso wenig funktioniert.
Habt ihr eine Idee?
Grüße
Phil
Edit: Zum debuggen habe ich ein Display angeschlossen und lasse mir die
beiden Spannungen anzeigen sowie die Variable 'variablex'. (Siehe Bild)
Da kann ich ablesen das variablex nur 4 verschiedene Werte anzeigt (63,
127, 191 und 255).