Wollte mal fragen ob es einen Befehl gibt (Assembler) welcher einen Eingäng nach einem Pegel wechsel für eine bestimmte Zeit sperrt und diesem somit entprellt. Z.b. wenn an PD0 ein Taster gegen Masse liegt und die Pull-Up aktiviert sind.
Beim AVR gibt es dafür keine Hardwarefunktion, die man direkt per Assemblerbefehl ansprechen kann. Es gibt aber ein paar wenige andere Prozessoren, die das können. Grüße, Peter
Gast
#2062777
Hallo, Branch if Bit in I/O-Register is Set SBIC Branch if Bit in I/O-Register is Cleared SBIS BR
Wenn ich mich richtig erinnere, war das der AVR32 (bzw. einige davon), der einen GPIO Glitch Filter hat. @*kopfkratz*: Das ist ja noch lange keine funktionsfähige Entprellung. Die Frage bezog sich ja auf etwas, das man einfach nur per Assemblerbefehl aktivieren muss.
Gast
#2062787
Peter Diener schrieb: > @*kopfkratz*: Das ist ja noch lange keine funktionsfähige Entprellung. > > Die Frage bezog sich ja auf etwas, das man einfach nur per > > Assemblerbefehl aktivieren muss. Mit diesen beiden Befehlen kann aber schon angefangen werden. So das die Flanken erkannt werden. Sonst ein Tip: Löst immer wieder eine Diskussion aus, aber sie funktioniert gut. http://www.mikrocontroller.net/articles/Entprellung BR
Das Problem hier ist das ich keine Lust habe bei jedem Tasterdruck welcher eig. einen sbic auslösen soll ein Unterprogramm zu schreiben und dann aufzurufen, welches einen Befehl hat, auf eine Warteschleife hinweist und dann wieder zurück geht. (Wie geht eig. eine Normgerechte Warteschleife, ich mach das bisher imemr so das ich ein Register mit z.B. 0xFF beschreibe und dann in der Warteschleife dec Register, brne Warteschleife.) Ahh das ist alles in C ... <- @ kopfkratz
Dann würde ich einen Timer aufsetzen, der im Interrupt alle notwendigen Eingänge entprellt und in ein paar Register die entprellten Werte schreibt. Der Rest geht dann wie vorher mit sbic usw., nur, dass dort dann nicht die Portregister, sondern die mit den entprellten Werten stehen.
Wie mache ich eine möglichst lange Warteschleife ohne groß Unterprogramme? Ich habe momentan diese hier:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
und die ist noch immer leicht zu kurz ... Zudem währe interessant wie ich ein Unterprogramm aufrufen kann wenn ein Register einen bestimmten Wert wie z.B. 0b0111111 hat (b.z.w. die D-Pins).
Michael Dierken schrieb: > Das Problem hier ist das ich keine Lust habe bei jedem Tasterdruck > welcher eig. einen sbic auslösen soll ein Unterprogramm zu schreiben und > dann aufzurufen, welches einen Befehl hat, auf eine Warteschleife > hinweist und dann wieder zurück geht. Dann musst du deinen Code eben besser organisieren. http://www.mikrocontroller.net/articles/AVR-Tutorial:_Tasten
Prellt noch immer ^^.
Michael Dierken schrieb: > Prellt noch immer ^^. Aha. Und? Ist jetzt fröhliches Rästelraten angesagt, wie du deine Entprellung realisiert hast bzw. wie dein Programm überhaupt aussieht?
Gast
#2062894
Na mit Warteschleifen. Warscheinlich stellen sich sogar dem Taster die Nackenhaare auf... doch Gast
Gast
#2062908
Karl heinz Buchegger schrieb: > Michael Dierken schrieb: >> Prellt noch immer ^^. > > Aha. > > Und? Ist jetzt fröhliches Rästelraten angesagt, wie du deine Entprellung > realisiert hast bzw. wie dein Programm überhaupt aussieht? Das nicht nett von Dir... Poste doch Dein Code einfach, vielleicht muss man dann nicht ständid in die Glaskugel schauen. Meine ist gerade in der Werkstatt. BR
Den Code gibts grad nichtmehr ^^... Bin hier die ganze Zeit am rumkritzeln. Kann dir aber sagen wie er aussah. Zuerst Eingänge Ausgänge konfiguriert, Eingänge mit Pull-Up. Dann hat er sobald man ein fallen der Flanke von High auf Low hat ein Unterprogramm aufgerufen, wo er zuerst das Register (zu anfangs unbeschrieben) um 1 erhöt hat. Dieses hat er dann per out PORTB, r17 an 8 LED`s weitergegeben. Als nächstes kahm eine Warteschleife wie obe angegeben. Dann ein Unterprogramm welches in das Hauptprogramm geht sobald kein Taster mehr betätigt wird.
Wer Warteschleifen als Entprellen bezeichnet, der glaubt auch noch, daß die Kinder der Klapperstorch bringt. Peter
Michael Dierken schrieb: > Den Code gibts grad nichtmehr ^^... Bin hier die ganze Zeit am > rumkritzeln. Kann dir aber sagen wie er aussah. Soll ich dir erzählen, wie mein Warp-Antrieb aussieht? Aber mir gehts wie dir. Er funktioniert einfach nicht. > Als nächstes kahm eine Warteschleife wie obe angegeben. Igitt. Noch mehr, als dir einen Link zu einer erprobten Entprellung zu geben kann man wohl kaum tun.
Karl heinz Buchegger schrieb: > Igitt. > > Noch mehr, als dir einen Link zu einer erprobten Entprellung zu geben > > kann man wohl kaum tun. Werde mir das Programm nochmal anschauen... Wenn ich das komplett einfüge erkennt der AVR noch immer bei einmal Tasten mehrere Tastzyklen.
Gast
#2063137
Michael Dierken schrieb: > Werde mir das Programm nochmal anschauen... Wenn ich das komplett > einfüge erkennt der AVR noch immer bei einmal Tasten mehrere Tastzyklen. Dann sind Deine Abfragen einfach falsch. Du darfst das Programm erst rennen lassen wenn Du den Taster los lässt. Also erst bei der abfallenden Flanke. Das erreicht man mit den schon von mir geposteten Befehlen. BR
*kopfkratz* schrieb: > Michael Dierken schrieb: >> Werde mir das Programm nochmal anschauen... Wenn ich das komplett >> einfüge erkennt der AVR noch immer bei einmal Tasten mehrere Tastzyklen. > > Dann sind Deine Abfragen einfach falsch. Kann sein. Ohne Programm schwer zu entscheiden. > Du darfst das Programm erst rennen lassen wenn Du den Taster los lässt. Weißt du etwas, was der Rest des Forums nicht weiß? > Also erst bei der abfallenden Flanke. Kann man so machen, muss man aber nicht. Ob man beim Loslassen eine abfallende Flanke bekommt, hängt jetzt in erster Linie davon ab, wie die Taster verschaltet sind. > Das erreicht man mit den schon von mir geposteten Befehlen. Deine "Befehle" haben mit Entprellung so rein gar nichts zu tun. Der von dir gepostete Link zum Entprellung Artikel hingegen ist ein 100% Treffer.
Grad nochmal den Link angeschaut und muss mich Entschuldigen ... Habe vorhin zu schnell angefangen schnell runter zu scrollen da dort alles in C war und habe dabei den Assembler Code übersehen ... werde das nachher nochmal testen ^^.
Gast
#2063263
Hi
>werde das nachher nochmal testen ^^.
Fang erst mal an das zu verstehen .
MfG Spess
Prog Kopiert, LED`s blinken ohne erkennbares Muster. Simuliert, nichts blinkt. Was mach ich nur falsch???? Brauche das um im AVR Tutorial die verknüpfungen (und, oder u.s.w.) zu lernen. Um per Taster die Zahlen die Addiert oder bearbeitet werden sollen einzustellen müssten diese entprellt werden.
Michael Dierken schrieb: > Prog Kopiert, LED`s blinken ohne erkennbares Muster. Simuliert, nichts > blinkt. > > Was mach ich nur falsch???? In erster Linie, dass du immer nur sagst "geht nicht" und nie deinen Code zeigst
Der Code ist 1:1 von dem Link kopiert. Ich habe daher das es ging nachträglich nurnoch die Register geändert, was aber nichts geändert hat.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
Quelle: http://www.mikrocontroller.net/articles/Entprellung
Entschuldige die Frage, aber du benutzt schon den AtTiny2313?
In dem Code sind am Tasterport keine Pullup Widerstände eingeschaltet. Wie sind deine Taster verdrahtet? Brauchst du µC-interne Pullups?
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
Ha Klasse .. das mit den Pull-Up Widerständen wars ^^. Habe das auf meinem Board so geschaltet das die Taster auf Masse ziehen. Den ATtiny hatte ich noch rumliegen ... Werde mir aber bei gelegenheit nen ATMega8 holen um besser dem Tutorial folgen zu können .. bisher ging das imemr mit umschreiben der Ports.
Für meine Anwendungsgebiete reichten bisher beide Controller aus. Eine einzige Umstellung war die Verwendung der USI-Schnittstelle des Tiny als I2C. Beim Mega8 ist es gleich eingebunden. (Wenn ich mich recht entsinne. ;))
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.