Hallo Leute, ich habe folgende frage: ich soll bei einer positiven flanke einen zähler hochsetzen.. dies habe ich mir so gedacht: ich habe eine globale variable, wo ich sozusagen den wert des signals übermittelt bekomme.. dann habe ich in meiner funktion eine static signal_old_u8 variable..diese wird mit FALSE vorinitialisiert.. dann übergebe ich ihr den wert, der mir die globale variable übermittelt.. anschließend frage ich nach: if((status_global != signal_old) && status_global = TRUE)) { zähler += 1; } ist das soweit richtig? ich soll den zähler nur bei einer positiven flanke erhöhen, wenn vorher FALSE war.. danke für hilfe..
??? was für ein µC, was für eine entwicklungsumgebung??? bei nem atmega brauchst nur den icp nehmen und im interruppt dann ebend hochzählen (siehe tutorial)
Peter "d." wrote: > > anschließend frage ich nach: > > if((status_global != signal_old) && status_global = TRUE)) > { > zähler += 1; > } > > ist das soweit richtig? fast. Du musst in signal_old natürlich noch vermerken, dass sich das Signal verändert hat. Denn beim nächsten Check möchtest du den Signalwechsel nicht nochmal protokollieren
1 | if( status_global != signal_old ) { |
2 | |
3 | //
|
4 | // bis jetzt weisst du nur, dass sich am Signal was
|
5 | // verändert hat. Das reicht aber schon mal um es
|
6 | // für die nächste Flankenabfrage festzuhalten
|
7 | // Wenn die Abfrage das nächste mal gemacht wird, soll
|
8 | // ja nicht noch eine Flanke erkannt werden
|
9 | //
|
10 | signal_old = status_global; |
11 | |
12 | //
|
13 | // Da war also eine Flanke. Aber war es auch die Richtige?
|
14 | //
|
15 | if( status_global == TRUE ) { |
16 | zaehler += 1; |
17 | }
|
18 | }
|
PS: Ein Vergleich auf Gleichheit schreibt sich in C mit 2 Gleichheits- zeichen! Ein Gleichheitszeichen alleine ist eine Zuweisung.
ja, aber hierbei frage und setzte die signal_old mit TRUE und komme dann doch nie mehr rein in meine abfrage? oder? denn der wert bleibt ja dann auf true von signal_old..
Peter "d." wrote: > ja, aber hierbei frage und setzte die signal_old mit TRUE und komme dann > doch nie mehr rein in meine abfrage? oder? Das willst du ja auch > denn der wert bleibt ja dann > auf true von signal_old.. Ja. Ist doch ok so. Irgendwann wird dann der status_global wieder false und als Folge davon setzt dein Code signal_old dann ebenfalls wieder auf false. Nur das diese Flanke dann nicht gezählt wird. Danach ist status_signal wieder lange Zeit auf false, bis die nächste Flanke eintrifft. Als Folge davon wird der Vergleich wieder wahr (denn status_old ist ja immer noch auf false), signal_old bekommt true zugewiesen und da es eine positive Flanke war wird sie gezählt. Beim nächsten Vergleich ist status_signal immer noch auf true (weil das Signal anhält), aber da auch signal_old auf true ist, passiert nichts weiter. Solange bis status_signal dann wieder auf false zurückfällt, wodurch der Vergleich wieder anschlägt und signal_old wieder auf false zurücksetzt. status_old hinkt dem Zustand von status_global immer um eine Abfrage hinterher. Und genau das brauchst du um Flanken feststellen zu können.
somit ist der von dir vorgegebene codeabschnitt schon der ganze code,oder?
1 | static status_global; |
2 | |
3 | |
4 | flankenerkennung() |
5 | {
|
6 | static signal_old = FALSE; |
7 | |
8 | if( status_global != signal_old ) { |
9 | |
10 | //
|
11 | // bis jetzt weisst du nur, dass sich am Signal was
|
12 | // verändert hat. Das reicht aber schon mal um es
|
13 | // für die nächste Flankenabfrage festzuhalten
|
14 | // Wenn die Abfrage das nächste mal gemacht wird, soll
|
15 | // ja nicht noch eine Flanke erkannt werden
|
16 | //
|
17 | signal_old = status_global; |
18 | |
19 | //
|
20 | // Da war also eine Flanke. Aber war es auch die Richtige?
|
21 | //
|
22 | if( status_global == TRUE ) { |
23 | zaehler += 1; |
24 | }
|
25 | }
|
26 | }
|
hier wäre der ganze lösungsweg,stimmt dies soweit?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.