Positive Flanke erkennen

Gast #961593
Lesenswert?

1
uint8_t  u8Sample;
2
uint8_t  u8SampleLast
3

4

5
_u8Sample = PINC;  // zu testende Variable
6

7
if (    ( u8Sample     & (1<<PC3) ) != 0 )
8
     && ( u8SampleLast & (1<<PC3) ) == 0 )   )
9
{
10
  // pos Flanke
11
}
12
if (    ( u8Sample     & (1<<PC3) ) == 0 )
13
     && ( u8SampleLast & (1<<PC3) ) != 0 )   )
14
{
15
  // neg Flanke
16
}
17
u8SampleLast = u8Sample;
Moderator (Firma: Titel) Persönliche Seite #961623
Lesenswert?

@  Chapmy
Ja, Interrupt ginge theoretisch auch, aber Frank lernt gerade erst das 
C-Laufen, er muss sich noch ein wenig am Tisch/Sofa usw. festhalten (Nix 
für ungut, Frank)... ;-)


@ Lippy
Besser so, denn sonst muss jedesmal ausmaskiert (&) werden,
und lesen kann man es auch noch ein wenig besser:
1
uint8_t  u8Sample;
2
uint8_t  u8SampleLast
3

4
_u8Sample = PINC & (1<<PC3);  // Signal einlesen
5

6
if (    u8Sample     != 0 
7
     && u8SampleLast == 0    )
8
{
9
  // pos Flanke
10
}
11
if (    u8Sample     == 0 
12
     && u8SampleLast != 0    )
13
{
14
  // neg Flanke
15
}
16
u8SampleLast = u8Sample;

Oder für Kurzschreiber, die das ganze Programm auf einer Bildschirmseite 
haben wollen:
1
uint8_t  sig, sig_alt;
2

3
sig = PINC & (1<<PC3);  // Signal einlesen
4

5
if (  (sig!=sig_alt) &&  (sig_alt=sig) ) {
6
  //  steigende Flanke
7
}
8
if (  (sig!=sig_alt) && !(sig_alt=sig) ) {
9
  //  fallende Flanke
10
}
Grundlagen:
Das Ganze steht in der Haupschleife und wird zyklisch aufgerufen.
if-Abfragen werden von links nach rechts abgearbeitet,
also erst Vergleich, dann Zuweisung.
sig!=sig_alt  zeigt einen Pegelwechsel an.
sig_alt=sig   weist dem Merker den aktuellen Wert zu.
sig_alt=sig   für die if-Abfrage wird das Ergebnis der Zuweisung
              (also sig) hergenommen
Gast #961653
Lesenswert?

Aber in der Kurzform werde ich doch niemals eine fallende Flanke 
erkennen?!
sig_alt wird ja schon vorher überschrieben (beim Test auf positive 
Flanke) und somit geht der Test auf Ungleich immer schief...

Ahoi, Martin

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren