Habe einen ATMEGA16 und wollte wissen wie man am besten Flanken abfragt. Habe das bisher immer über z.b. // steigende Flanke an PD5 while (! (PIND & (1 << PD5))) {} oder // fallende Flanke an PD5 while (PIND & (1 << PD5)) {} gemacht. Habe aber irgendwie das Gefühl das diese Abfrage zu ungenau ist und zuviel zeit braucht zum reagieren. Gibt es da noch andere möglichkeiten, außer das über Interrupts zu machen.
Hallo, das erkennt aber keine Flanke... >// steigende Flanke an PD5 >while (! (PIND & (1 << PD5))) >{} Wenn ich in die Schleife gehe und PD5 ist schon H geht es sofort weiter. Eine steigende Flanke ist aber ein L/H-Wechsel, also muß ich erstmal testen, ob L ist, wenn nicht darauf warten und dann auf H testen und darauf warten. Nur dann ist es eine steigende Flanke gewesen. Für die fallende Flanke gilt das natürlich auch. Gruß aus Berlin Michael
Wie schnell musst du denn auf die Flanke reagieren? Ist die Flanke zuverlässig, stabil, oder "knattert's" da auch mal (Taste)? Reicht es ev., einfach die Zustandsänderung innert einiger us oder ms festzustellen? Das Thema könnte dann "debouncing" sein, also regelmässiges Abfragen des logischen Spannungspegels (High/Low) am Pin und Benachrichtigen, wenn ein stabiler Zustand erreicht ist. -> Entprellung HTH!
Tom M. schrieb: > Wie schnell musst du denn auf die Flanke reagieren? > > Ist die Flanke zuverlässig, stabil, oder "knattert's" da auch mal > (Taste)? > > Reicht es ev., einfach die Zustandsänderung innert einiger us oder ms > festzustellen? Das Thema könnte dann "debouncing" sein, also > regelmässiges Abfragen des logischen Spannungspegels (High/Low) am Pin > und Benachrichtigen, wenn ein stabiler Zustand erreicht ist. > > -> Entprellung > > HTH! Ich muss sofort auf die Flanke reagieren ohne große verzögerung. Due Flanke ist stabil.
Hi >Ich muss sofort auf die Flanke reagieren ohne große verzögerung. Due >Flanke ist stabil. Warum nimmst du dann einen ATMega16? Ein pinkompatibler ATMega164 hat an (fast) jedem Eingang die Möglichkeit auf eine Flanke per Interrupt zu reagieren. MfG Spess
Hallo, "sofort" gibt es nicht. Schau Dir an, welchen Assemblercode der Compiler erzeugt. loop: sbic PIND, PD5 rjmp loop ist das Minimum, was geht. Das sind 3-4 Takte (habe jetzt nicht nachgesehen), bei 16MHz Takt also irgendwas um minimal 260ns, bis die Änderung verarbeitet werden kann. Gruß aus Berlin Michael
Hallo, @spess53: das ist aber langsamer als Polling, es kommt also, wie fast immer, darauf an, was er eigentlich machen will... Gruß aus Berlin Michael
Michael U. schrieb: > @spess53: das ist aber langsamer als Polling, es kommt also, wie fast > immer, darauf an, was er eigentlich machen will... er sollte halt endlich verraten, was er unter "sofort" und "ohne große Verzögerung" versteht und was sonst noch gemacht werden muss...aber wahrscheinlich ist das wieder geheim...
early bird schrieb: > Michael U. schrieb: >> "sofort" gibt es nicht. > > Na dann eben "ganz schnell" oder "unmittelbar" :-) Irgendein kluger Mensch hat mal Zahlen erfunden. Seitdem darf man diese auch benutzen, z.B. "innerhalb 10µs". Und dann müßte niemand zurückfragen. Kurz, lang, schnell, langsam, groß, klein, genau, präzise, ungefähr, sofort, bald usw. sind Unworte für einen Ingenieur. Sie enthalten keinerlei Information. Als Inschenör muß man in der Lage sein, die Wurst-Käse Bedingungen eindeutig zu definieren. Peter
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.