Forum: Mikrocontroller und Digitale Elektronik Tagesschaltuhr.


von H.Joachim S. (crazyhorse)


Lesenswert?

Ich bräucht mal wieder ne Anregung...
Freiprogammierbare Tagesschaltuhr, 100 Stützpunkte (frei verteilt, also 
kein stures Zeitraster), zu jedem Stützpunkt gibts einen auszugebenden 
PWM-Sollwert, zwischen den jeweiligen Stützstellen wird linear 
interpoliert, ist ja auch kein Problem.
Daten in einem array mit 100 Zeiten und zugehörigen PWM-Werten.
Zeit kommt von einer RTC (Sekunden seit 0 Uhr). PWM wird einmal pro s 
berechnet. Sorgen macht mir der Sprung von 86399s (23:59:59) auf 0.
Also beispielsweise Stützpunkt 99 auf 23:23 (PWM 100%), Stützpunkt 0 
0:17 mit 10%. In den 54min=3240s soll also der PWM-Wert linear von 100% 
auf 10% fallen.
Gibts ne andere Lösung, als sich einen (internen) 101. Stützpunkt bei 
0:00 zu bilden? Gefällt mir irgendwie nicht.

Ideen?
von Bernd (Gast)


Lesenswert?

Wie berechnest du denn bei den "normal aufsteigenden"
Zeiten die Zeitpunkte zur PWM-Wert-Änderung, damit
es linear-interpoliert wirkt?

Erkenne da keinen prinzipiellen Unterschied.
von H.Joachim S. (crazyhorse)


Lesenswert?

Pseudocode:

8:00=28800s  20% Stützstelle 50
8:10=29400s 100% Stützstelle 51
t= 8:05=29100s   aktuelle Zeit
Pseudocode:
Index suchen (in welchen Abschnitt gehört t -> Index=50)

Delta_t=Time[Index+1]-Time[Index];   //=600s
Delta_PWM = PWM[Index+1] - PWM[Index];  //=100

PWM_soll=PWM[Index] + Delta_PWM/Delta_t * (t - Time[Index]);
        =20  + 80/600*300=60   //tara, korrekt

23:50=85800s 20%  Stützstelle 99
00:10= 600s  100%  Stützstelle 0
t= 0:01=60s

Aber jetzt, wo ich das schreibe, hab ich eine Idee :-)
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
Noch kein Account? Hier anmelden.