Dex Mor schrieb:
> ok das habe ich mir schon gedacht, aber wieso macht man es im If-teil
> mit einer direkten zuweisung des wertes und im else-teil weist man dem
> counter die Differenz von 255 und pwm1 zu?
Weil ich haben will, dass du für 2 Klatscher hintereinander immer die
gleiche Zeit brauchst. Ok, Klatschen ist jetzt kein so gutes Beispiel.
Nehmen wir betätigen des Lichtschalters. Wenn du bei 100 bist schaltest
du den Lichtschalter in die andere Stellung.
Deine Vorgabe ist: fang bei 90 an
Du zählst von 90 bis 100 und betätigst den Lichtschalter. Danach zählst
du weiter und zwar von 100 - 90. Du beginst also bei 10 und zählst bis
100.
Beim ersten mal hast du also 10 Zählungen gebraucht. Beim 2-ten mal 90
1 | +-----------+-------------------------------------+----------+---..
|
2 | 10 90 10
|
3 |
|
4 | ^ ^ ^
|
5 | schalten schalten schalten
|
6 |
|
7 | | | | |
|
8 | +- Licht ---+----------------- Licht -------------+-- Licht -+--- ...
|
9 | ein aus ein
|
Das Verhältnis der Zeiten von Licht ein zu Licht aus ist also 1:9. Von
einem Ereignis Licht ein zum nächsten Ereignis Licht ein, hast du 100
Zähltakte gebraucht.
Jetzt geb ich dir abwechselnd die Vorgabe: schalten bei 40, bzw.
schalten bei 100 - 40, also 60.
Wie sieht es jetzt aus
1 | +--------------------+----------------------------+----------------+--..
|
2 | 40 60 40
|
3 |
|
4 | ^ ^ ^ ^
|
5 | schalten schalten schalten
|
6 |
|
7 | | | | |
|
8 | +----- Licht --------+---------- Licht -----------+----- Licht ----+--..
|
9 | ein aus ein
|
Diesmal ist das Verhältnis von Licht ein zu Licht aus 4:6. Aber: Die
Zeitpunkt, an denen das LIcht eingeschaltet wird, sind genau gleich wie
vorher. In beiden Fällen vergehen von einem "Licht ein" zum nächsten
"Licht ein" immer 100 Zähltakte.
Mathematisch ist das auch klar. Wie lange dauert denn ein Zyklus? Das
ist die SUmme der beiden Zeitdauern. Licht ein dauerte x Einheiten.
Licht aus dauerte 100 - x Einheiten. Also
Zyklus = x + ( 100 - x )
Zyklus = x + 100 - x
Zyklus = x - x + 100
Zyklus = 100
Die Zykluszeit ist also immer konstant 100. Durch das x teile ich sie
einfach nur in 2 Teile auf, so dass der eine Teil x Einheiten dauert und
der andere Teil gerade solange, dass sich alles in Summe wieder zu 100
ausgeht.
Man kanns auch so sagen: der if Teil legt fest wie lange die LED brennt,
der else Teil legt fest wie lange sie nicht brennt. Und beide Zeiten
zusammen legen fest wie oft in der Sekunde die LED ein/aus geschaltet
wird.
Die letzte Zahl ist konstant, aber mit der ersten steuere ich das
Verhältniss von ein zu aus.