Forum: Mikrocontroller und Digitale Elektronik Positive Flanke erkennen


von Frank (Gast)


Lesenswert?

Gibt es eine Möglichkeit am atmega8 in C programiert nur die Falnke von 
0 auf 1 auszuwerten. Ich brauche ein Schaltsignl von ca. 5ms was könnte 
man da machen um das zu bekommen?

Danke schon mal an alle die sich die Mühe mache mir zu helfen.

von Matthias L. (Gast)


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;

von Chapmy (Gast)


Lesenswert?


von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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

von Martin Schneider (Gast)


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

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
Noch kein Account? Hier anmelden.