mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Flankenauswertung


Autor: pierre (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute
wie programmiert ihr eine pos. Flankenauswertung eines  Eingangspins bei 
den Atmelcontrollern in Assembler?

gruß Pierre

Autor: UBoot-Stocki (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

was willst Du denn auswerten, an der Flanke ? Beschreib das Problem 
bitte mal näher...

Gruß

UBoot-Stocki

Autor: pierre (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi
also ich wollte ein register inkrementieren wenn die taste gedrückt 
wird. aber nur einmal inkrementieren pro tastendruck.
danke

Autor: UBoot-Stocki (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

geht es Dir darum, eine Taste zu entprellen ?

Gruß

UBoot-Stocki

Autor: pierre (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
nein, ich wollte bei ersten druck auf die taste, das eine led oder auch 
ein bit gesetzt wird und bei zweiten mal drücken auf die gleiche taste, 
die led wieder aus geht.
ich hab hier auch schon mal etwas versucht. im avr-studio läuft es gut, 
aber im controller selbst, kommt das programm, oder wer auch immer, 
durcheinander.
die datei habe ich angefügt.

(ich hab schon entrellte taster)

gruß pierre

Autor: Florian S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also bin ja PIC-Freak, darum ASM mal anderst.

1. Lade Variable "x" invertiert!
2. Und-Verknüpfen mit "Taste"
3. Ergebnis ist positive Flanke!
4. Lade "Taste"
5. Speichere in Variable "x"

Die Flanke ist dann beim drücken der Taste genau 1 Zyklus da.

Falls mit SPS besser verstanden wird!:
U  E 0.0
UN M 0.1
=  M 0.0 <-- Flanke
U  E 0.0
=  M 0.1

Gruß Flo

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Pierre,

hast du die Taste so wie hier im Tutorial beschrieben angeschlossen? 
Dann wird das entsprechende Bit im Input-Register 0 wenn die Taste 
gedrückt ist, 1 wenn die Taste nicht gedrückt ist.
Außerdem "prellt" eine mechanische Taste, d.h. es werden bei einem 
Tastendruck mehrere Impulse erzeugt. Damit ein Tastendruck trotzdem 
richtig erkannt wird, musst du z.B. sobald das Bit 0 wird erstmal 20ms 
warten.

Gruß
Andreas

Autor: Günter König (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Pierre,

mal zur Info, es gibt keine echten entprellten Taster. Sie alle Prellen 
mehr oder eben weniger. Umgehen kann man das Problem dadurch, das über 
einen Widerstand ein Kondensator aufgeladen wird und parallel dazu ein 
Taster liegt. Beim Tastendruck wird der Kondensator schlagartig entladen 
und der Spannungssprung nach Low wird ausgewertet.
Aber du wolltest ja den Sprung nach High auswerten. Dann kannst du den 
Spannungssprung differenzieren, das heisst du lädst über den Taster 
einen Kondensator auf und wertest die entsehende kurze positive Flanke 
aus.

Mit der Grösse des Kondensators musst du etwas experimentieren, da der 
Wert von der Prellzeit des Tasters abhängt. Und du musst dafür sorgen, 
das der Kondensator auch schnell genug wieder entladen ( Auswertung 
Low-Flanke ) bzw. geladen wird ( Auswertung High-Flanke ).

Ansonsten mache es wie Andreas es beschrieben hat.

Gruß,
Günter

Autor: pierre (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Andreas
also müsste ich erstmal alle taster abfragen ob einer gedrückt ist, und 
diese dann mit nem timerinterrupt auswerten?
oder wie "entprellst" du deine eingänge, wenn du mehrere mechanische 
schalter in deinem system verwendest wenn man von der kondensatormethode 
von Günter (danke)absieht?

gruß pierre

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich frage die Taster einfach in einer Schleife ab, wenn erkannt wurde 
dass einer gedrückt wurde mach ich 20ms Pause (bis sich der Taster 
beruhigt hat), dann geht es weiter.

Autor: Paul P. (cpn)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,
habe ein ähnliches Problem bei nem Programm in C.
Ich lasse durch eine Variable(erhöhen und niedriger Zählen) durch 2 
Taster verschiedene Lieder auf nem display anzeigen.
nun habe ich auch nach dem abfragen der Taster 300ms wartezeit, da sonst 
zu schnell zählt bei nur einer betätigung.
Und wenn man länger auf dem Taster bleibt, zählt er schneller, nur das 
Zeigt mein display nicht an da ich ja clearline mache.(dh. inhalt 
display löschen, und neuen Liedtitel anzeigen./ Melodiegenerator habe 
ich geschrieben den thread)

Meine Frage: gibt es einen Befehl/Code für nur eine pos. Flanke des 
Tasters?
Oder mache ich einfach ne längere wartezeit nach dem liedaufschreiben?
hmm....

THX Gruß Paul P.

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.