Hallo zusammen,
ich habe einen Potentiometer und 5 verschiedene Taster für feste Werte
an einem ATmega128 angeschlossen und möchte nun folgende Featurette in
mein Dimmerprogramm einbauen:
Startet man den Controller, wird ganz normal der Potiwert verwendet
(verstellt die PWM...). Drückt man einen der Taster wird der fest
einprogrammierte Wert übernommen und der Poti wird erstmal deaktiviert.
Nun kommts: Dreht man wieder an dem Poti, soll verhindert werden, daß
Sprünge in den Helligkeitswerten auftreten. Ich hatte es mir so
vorgestellt, daß man entweder den Poti zuerst auf 0 drehen muss um dann
den per Taster eingestellten Wert beim Hochdrehen zu "fangen" (vgl. mit
einem mechanischem Mitnehmer, o.Ä.) oder der Poti erst wieder aktiv
wird, wenn der Wert sich in der Nähe des Festwertes befindet.
Jetzt habe ich folgendes Codefragment, aber es funktioniert nicht
zufriedenstellend, weil wenn der Poti nahe einem Tasterwert steht,
dieser nicht immer übernommen wird... Problem ist, daß ich eine
Gammakorrektur eingebaut habe (Poti ist linear, Helligkeit soll aber
logarithmisch sein) und der Poti nicht immer fängt, zumal meine
Abfrageroutine nur alle 50ms erfolgt, was einerseits die Entprellung der
Taster brachte, andererseits aber zu große Abstände liefert, wenn man zu
schnell am Poti dreht.
1 | switch ( index )
|
2 | {
|
3 | case 19 : pwm_setting[0] = BEDECKT; moon_status = 1; break;
|
4 | case 20 : pwm_setting[0] = NEUMOND; moon_status = 1; break;
|
5 | case 21 : pwm_setting[0] = HALBMOND1; moon_status = 1; break;
|
6 | case 22 : pwm_setting[0] = HALBMOND2; moon_status = 1; break;
|
7 | case 23 : pwm_setting[0] = VOLLMOND; moon_status = 1; break;
|
8 | }
|
9 |
|
10 | if ( moon_status != 1 ) {
|
11 | pwm_setting[0] = gamma_pwm(7,0); // Value Poti 7 to PWM-Channel 0
|
12 | }
|
13 |
|
14 | if ( (abs(pwm_setting[0] - gamma_pwm(7,0))) < 16 ) {
|
15 | moon_status = 0;
|
16 | }
|
17 |
|
18 | pwm_update();
|
Hat jemand vielleicht eine Idee, wie man das eleganter lösen könnte,
bzw. das wie man die Rückkehr zur Poti-Bedienung am besten realisieren
könnte.
Herzlichen Dank schonmal für Eure Kommentare.