Hallo Leute wie programmiert ihr eine pos. Flankenauswertung eines Eingangspins bei den Atmelcontrollern in Assembler? gruß Pierre
Hi, was willst Du denn auswerten, an der Flanke ? Beschreib das Problem bitte mal näher... Gruß UBoot-Stocki
hi also ich wollte ein register inkrementieren wenn die taste gedrückt wird. aber nur einmal inkrementieren pro tastendruck. danke
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
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
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
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
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
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.
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.
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.