Hallo, hätte mal ne Frage zu dem Befehl "debounce" in Bascom. Kann ich damit auch einfach nur einen Port entprellen OHNE das er in ein Unterprogramm springt? Laut meinem Prof. (Fachhochschule) sollte das gehen, aber ich kriegs nicht hin. Bascom meckert immer das der Verweis zum Unterprog. fehlt bzw. unvollständiger Befehl. Hab die Tastererkennung anders gelöst und möchte es auch nicht ändern. Erklärung: 4 Taster sind an jeweils einen Port angeschlossen und zusätzlich sind alle an Int0 angeschlossen. Wenn dann der Int0 ausgelöst wird fragt er in der Interruptroutine ab welcher der 4 Eingangsport aktiviert ist und setzt einen entsprechenden Zähler hoch. Controller ist ein Mega32. Danke im voraus, Noob
Nein, das wäre auch nicht sinnvoll, weil Du ja Deinen Taster oder was Du gerade entprellen willst, auch auswerten mußt. Debounce Pind.0 , 0 , Schnulli Schnulli: Print "Taster wurde gedrückt" Wenn der Pind.0 auf 0 geht, wird zur Marke "Schnulli" gesprungen. MfG Paul
Nix zu machen wenn der Taster gedrückt wurde ist doch auch ne Art entprellung ;)
So in der Art: "Sind Sie verheiratet? Wenn ja, warum nicht? Haben Sie Kinder? Wenn nicht, wie machen Sie denn das?" ;-) Paul
las das doch mit dem debounce. in der interrupt routine setzt du ein flag und fragst 10 ms später ab, ob noch ein taster gedrückt ist.
Wenn man genau das will, was die vorgefertigten Bascom-Legosteine können, dann nimmt man diese. Wenn man was anderes will, muß man es eben selbst programmieren, wie man es in C oder Assembler auch machen würde. Die Legosteine aber mit was eigenem zu mixen, dürfte in der Regel schiefgehen, da man ja nicht in die Legosteine reingucken kann (Black Box). Ich entprelle immer so: Beitrag "Universelle Tastenabfrage" besser gehts nicht. Peter
Peter Dannegger wrote: > Ich entprelle immer so: > > Beitrag "Universelle Tastenabfrage" > > besser gehts nicht. Das stimmt. mach' ich inzwischen auch so. Aber kannst Du da nicht mal einen BASCOM-kompatiblen Legostein draus bauen? Duck & weg... ...
Hannes Lux wrote: > Peter Dannegger wrote: >> Ich entprelle immer so: >> >> Beitrag "Universelle Tastenabfrage" >> >> besser gehts nicht. > > Das stimmt. mach' ich inzwischen auch so. > Aber kannst Du da nicht mal einen BASCOM-kompatiblen Legostein draus > bauen? > > Duck & weg... > > ... Ich behaupte "besser gehts nicht" ist nicht allgemeingültig ;)
Läubi Mail@laeubi.de wrote:
> Ich behaupte "besser gehts nicht" ist nicht allgemeingültig ;)
Dann zeig' mal, wie es besser (effizienter, ressourcenschonender) und
zuverlässiger geht. ;-)
Ich habe 'ne Weile gebraucht, bis ich den Algorithmus und dessen
Umsetzung in ASM verstanden habe, aber nun nutze ich diese Routine in
verschiedenen Modifikationen, die auf den jeweiligen Zweck zugeschniien
sind. Mal brauche ich nur den entprellten Zustand, mal die
Key-press-Flags, mal die Key-lost-Flags, mal beide und wenn es nur auf
Flankenerkennung (ohne Entprellung) ankommt, fliegt eben auch mal die
Prellzählerei raus. Es ist und bleibt eine hocheffiziente Routine die
enorm wenig Ressourcen beansprucht.
...
Moin, ich bin gerade dabei so etwas ähnliches zu probieren. Die vier Taster sind über AND Gatter an einem IRQ Eingang angeschlossen und zusätzlich noch an einem Port. Wenn eine Taste gedrückt wird, geht es in die IRQ Routine, schalte den entsprechenden IRQ ab und entprelle mit Debounce. Wenn das Ergebnis negativ ist, springt Debounce ja in die nächste Zeile. Dort schalte ich den IRQ wieder ein und verlasse alles mit Return. Bei positivem Ergebnis springe ich über ein Label gerade zwei Zeilen weiter, lese den Port in eine Variable und von dort aus per Return wieder ins Hauptprogramm. Den uninteressanten Teil vom Port maskiere ich mit AND aus. Das ganze sieht in etwa so aus: 'tastenabfrage disable INTx debounce Int-eingang,0,weiter enable INTx return weiter: key = porty AND &h0f 'die unteren vier bit werden ausgewertet return Ich habe es noch nicht ausprobiert, da meine Hardware noch nicht ganz fertig ist, aber so habe ich mir das vorgestellt. Es gibt sicherlich elegantere und bessere Varianten, aber ich bin grundsätzlich faul und muß mich bei diesem Projekt noch um vieeel mehr kümmern, als um eine schöne Tastenentprellung... ;-) Good Luck :-) Johannes
entprellen in der interrupt routine ist wohl eine der denkbar schlechtesten möglichkeiten...
@ Paul Baumann Die Taster werden doch ausgewertet, in der Interruptroutine. @ Werner A. Das mit dem Flag setzen hab ich hier schon öfters gelesen, es ging halt nur darum ob man es nicht auch einfach mit dem "Debounce" irgendwie lösen könnte. (Mal davon abgesehen ihn in ein leeres Unterprogramm springen zu lassen) @ Peter Dannegger Deine Lösung scheint ja das non-plus-ultra zu sein, nur leider is die mir 2-3 Stufen zu hoch. Bin froh das ich mit dem "Bascom-Basic" einigermaßen zurecht komm, deshalb wäre ich natürlich an einem kleinen Legostein für Bascom auch interessiert.
> deshalb wäre ich natürlich an einem kleinen > Legostein für Bascom auch interessiert. Hast Du das "Duck & weg" übersehen? Das war ein Scherz meinerseits. Wenn Du Dir den Algorithmus in ASM und C ansiehst, kannst Du ihn vermutlich auch in BASCOM implementieren. Er wird aber sehr viel mehr Rechenzeit beanspruchen, da BASCOM in der (Timer-) ISR unnötigerweise alle Register sichert, was unnötig lange dauert. Auch (aber nicht nur) ein Grund für mich, ASM zu bevorzugen. ...
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.