www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Flanken an Pins abfragen!


Autor: heiko_h (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Tom M. (tomm) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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!

Autor: heiko_h (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: early bird (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Michael U. schrieb:
> "sofort" gibt es nicht.

Na dann eben "ganz schnell" oder "unmittelbar" :-)

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Justus Skorps (jussa)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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...

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: heiko_h (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Okay, die Flanken liegen im bereich von 100 us.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.