Moin,
Ich habe ein wenig code geschrieben um ein einstellbares Rechtecksignal
an einem der Ausgangspins zu bekommen. Dafür habe ich unter Anderem auch
Timer eingesetzt und eine ISR.
Jetzt möchte ich gerne die Frequenz in festen Schritten erhöhen, bzw
veringern. Dazu verwende ich Taster. Das Programm funktioniert. Nur
kommen natürlich pro Tastvorgang nicht die gewünschten 0.5Hz zu der
Ausgangsfrequenz, sondern es springt in 1-5Hz Schritten. Das würde ich
auf das Prellen der Taster schieben.
1 | if (!(PINB & (1<<PINB0)))
|
ist meine Tasterabfrage bisher. Für die Frequenzerzeugung habe ich wie
gesagt Timer und ISR genutzt. In der ISR habe ich eine Variable "timer".
1 | ISR (TIMER0_COMPA_vect)
|
2 | {
|
3 | timer++;
|
4 | }
|
Soweit so einfach. Wenn ich jetzt den/die Taster entprellen möchte, kann
ich da nicht einfach die "timer" Variable nutzen?
Hatte gedacht einfach:
1 | if ((!(PINB & (1<<PINB0))) && timer == 200)
|
sowas zu machen. 200 ist ein Wert, den die Variable in jedem Durchlauf
auf jeden Fall erreicht. Gehen wir davon aus das meinetwegen 300 der
maximale Wert von "timer" ist (wird bei erreichen wieder auf 0 gesetzt)
und das diese 300 einer Frequenz von 100Hz entspricht. Somit würde sich
doch eine Tasterabfrage alle 10ms ergeben, oder sehe ich das falsch?
Tatsache ist: Es klappt nicht! :D
Hat irgendjemand eine Ahnung, oder Idee wie ich die Taster am besten
entprellen kann?
Wait-Funktionen kommen nicht in Frage, da sie den programmablauf
blockieren würden...