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.
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; |
@ 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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.