Forum: Mikrocontroller und Digitale Elektronik MSP430 Tasterabfrage mit Erkennung der Drückdauer


von B. B. (bebu1)


Lesenswert?

Hallo!

Ich brauche für meine Projekt eine Tasterabfrage inkl. Entprellung und 
Unterscheidung der Drückdauer.

Ich habe versucht die Komfortroutine unter 
http://www.mikrocontroller.net/articles/Entprellung zu verstehen. Da ich 
aber Anfänger bin und diese Routine für AVR geschrieben wurde fällt es 
mir sehr schwer diese zu verstehen. (z.B. was ist sei(),cli() 
atomic,...)
Hat jemand von euch eine Routine für den MSP430 von der ich ausgehen 
kann? Damit wäre mir sehr geholfen.

Danke!

von Peter D. (peda)


Lesenswert?

Bernhard B. schrieb:
> (z.B. was ist sei(),cli()
> atomic,...)

http://docs.oracle.com/javase/tutorial/essential/concurrency/atomic.html

sei = global interrupt enable
cli = global interrupt disable

von Info (Gast)


Lesenswert?

Ich habe mir dafür Wrapperfunktionen geschrieben, die die entsprechenden 
MSP430 Interrupt-Register-Bits schreiben. Das kannst du auch selbst. 
Oder du machst das als Makro.
Je nach Compiler gibt es das evtl. auch als "built-in" - weiß ich nicht.

von B. B. (bebu1)


Lesenswert?

Danke Peter!

Und der Atomic-Befehl macht das gleiche oder?
Gut das sich gleich der "Erschaffer" meldet ;)
Ich bin die ISR mal mit einen Bsp. Schritt für Schritt durchgegangen.
Was mir unter anderem noch nicht ganz klar ist, ist foldende Aussage:


  i = key_state ^ ~KEY_PIN;                       // key changed ?

i enthält an dieser Stelle für jede Taste, die sich im Vergleich mit dem 
vorhergehenden entprellten Zustand (keystate) verändert hat, ein 1 Bit.

Zu Beginn hätte ich key_state als 0000 0010 und KEY_PIN als 0000 0000 
angenommen. Wenn jetzt zu Beginn auch lauter 0 in ct0  und ct1 
vorkommen, wäre i ja 1111 1101. Was genau gegensäztlich zu deiner 
Aussage ist.

Und ist es schon egal wie ich ct0 und ct1 und Beginn definiere? 0x00 
oder 0xFF

@info
Wrapperfunktion sagt mir momentan gar nichts, aber ich werde mal danach 
suchen.

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
Noch kein Account? Hier anmelden.