Patrick wrote:
> aber wie kann ich es umsetzten dass ich je nach Schwelle der Messspg.
> unterschiedliche Blinkfrequenzen erzeugen kann?
2 Möglichkeiten:
* Entweder du hältst die Schwellwerte variabel.
Damit musst du dein switch-case Konstrukt durch eine if - else if
Leiter ersetzen, weil man ja in einem switch-case bei den case
Fällen keine Variablen angeben kann
Irgendwas in der Art
1 |
|
2 | if( Blink == 1 ) { // diese Abfrage zieh ich mal vor, da sie in
|
3 | // deinen case Fällen anscheinend in jedem
|
4 | // case vorkommt
|
5 | if( TimerWert == OnTime1 )
|
6 | PORTB &= ~(1<<PB0);
|
7 |
|
8 | else if( TimerWert == OffTime1 )
|
9 | PORTB |= (1<<PB0);
|
10 |
|
11 | else if( TimerWert == OnTime2 )
|
12 | PORTB &= ~(1<<PB0);
|
13 |
|
14 | else if( TimerWert == OffTime2 )
|
15 | PORTB |= (1<<PB0);
|
16 | }
|
Durch Verändern von OnTime1/OffTime1 bzw. OnTime2/OffTime2 kannst
du jetzt die Frequenz deiner Blinkerei beeinflussen.
Jetzt kann man natürlich noch die ganzen Ein/Aus Fälle zusammenfassen
1 | if( Blink == 1 ) { // diese Abfrage zieh ich mal vor, da sie in
|
2 | // deinen case Fällen anscheinend in jedem
|
3 | // case vorkommt
|
4 | if( TimerWert == OnTime1 || TimerWert == OnTime2 )
|
5 | PORTB &= ~(1<<PB0);
|
6 |
|
7 | else if( TimerWert == OffTime1 || TimerWert == OffTime2 )
|
8 | PORTB |= (1<<PB0);
|
9 | }
|
Wenn dein obiger Programmausschnitt nur ein Teil deiner switch-case
Struktur ist, und das in Wirklichkeit noch weiter geht, dann könnte
man auch darüber nachdenken, ob es nicht eine Formel für den
Zusammenhang zwischen Zählerstand bei Ein und dem aktuellen
Zählerstand
gibt.
* Möglichkeit 2
benutzt einen anderen Timer Mode. CTC (Clear Timer on Compare).
Dort kannst du dem Timer explizit vorgeben, wie weit er zählen soll
bevor der Interrupt ausgelöst wird.
Manipulierst du diese Obergrenze, dann kommt der Interrupt häufiger
bzw. weniger häufig.