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