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..
Gast
#889186
??? 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 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
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.
ok..ich habe s nun verstanden..danke für die schnelle hilfe..
somit ist der von dir vorgegebene codeabschnitt schon der ganze code,oder?
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
hier wäre der ganze lösungsweg,stimmt dies soweit?
gebe s eigentlich die möglichkeit, mit nur einer if-abfrage dies zu erledigen?
zaehler += (int)(status_global == TRUE); // scnr
1 | |
2 | |
3 | |
4 | |
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.