Forum: Mikrocontroller und Digitale Elektronik Flankenerkennung in C/Periodendauermessung


von petey (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Leute,

ich hätte zwei Fragen. Die erste betrifft die Flankenerkennung in C mit 
Polling und Interrupt. Wie erkenne ich eine steigende/fallende Flanke an 
einem Pin mit Polling oder Interrupt? Stimmt folgender Code von mir 
überhaupt:

void main()
{
     unsigned char old=0, new;

     new = (PINC != 0);  //steigende Flanke an PINC soll erkannt werden
     if(!old && new)
     {
          //steigende Flanke erkannt
     }
     old=new;
}


Die zweite Frage bezieht sich auf die Periodendauermessung. Gegeben sei 
ein Signal und die Periode dieses Signals soll auf drei Arten, nämlich 
via Polling, Interrupt oder Input Capture gemessen werden(siehe Anhang).

Ich wäre echt dankbar für eine Antwort, ich benötige diese Sachen für 
meine Prüfung.

Danke schon mal :-)

von Klaus W. (mfgkw)


Lesenswert?

petey schrieb:
> ich hätte zwei Fragen. Die erste betrifft die Flankenerkennung in C mit
> Polling und Interrupt. Wie erkenne ich eine steigende/fallende Flanke an
> einem Pin mit Polling oder Interrupt? Stimmt folgender Code von mir
> überhaupt:
>
> void main()
> {
>      unsigned char old=0, new;
>
>      new = (PINC != 0);  //steigende Flanke an PINC soll erkannt werden
>      if(!old && new)
>      {
>           //steigende Flanke erkannt
>      }
>      old=new;
> }

Da fehlt irgendwie noch eine Schleife.
In der obigen Form läuft das Programm ja nur einmal in den
Test, und wenn der nicht gleich erfüllt ist, wird nicht wieder
getestet.

petey schrieb:
> Die zweite Frage bezieht sich auf die Periodendauermessung. Gegeben sei
> ein Signal und die Periode dieses Signals soll auf drei Arten, nämlich
> via Polling, Interrupt oder Input Capture gemessen werden(siehe Anhang).

In Standard-C kommst du da nicht weit mangels Zeitmessung,
Interrupts und Threads.

Wenn du nicht mit Standard-C arbeitest, sondern mit einem
konkreten Controller und dessen Laufzeitumgebung, dann solltest
du das auch mitteilen. Es gibt hier Hellseher, aber die haben
manchmal gerade Freigang.
Oder gleich in das Datenblatt schauen; da steht (z.B. für
AVR-Controller?) sowas mit Beispielen drin.

von Helfer (Gast)


Lesenswert?

petey schrieb:
> new = (PINC != 0);  //steigende Flanke an PINC soll erkannt werden
1
while ( !( PINC & (1<<MEINPIN) ) ) ; // auf steigende Flanke warten

petey schrieb:
> Gegeben sei
> ein Signal und die Periode dieses Signals soll auf drei Arten, nämlich
> via Polling, Interrupt oder Input Capture gemessen werden(siehe Anhang).

Bleiben wir noch beim Polling - einen Hinweis wie's gemacht werden kann 
hast du ja schon. Es ist einfach zu implementieren, hat aber viele 
Nachteile (frisst cpu Zeit und ist relativ ungenau, v.a. wenn du 
nebenher Interrupts bearbeitest).

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.