Forum: Mikrocontroller und Digitale Elektronik Tasten gedrückt halten


von mrcl (Gast)


Lesenswert?

Hallo,

ich bin gerade an einem Projekt und benutze den MSP430f5529 genauer 
gesagt das Experimenterboard von TI.

Nun versuche ich über längeres drücken eines Knopfes den MSP in den LMP 
zu versetzen. Da meine Kenntnisse noch etwas beschränkt sind würde mich 
interessieren ob dies überhaupt möglich ist. Im zugehörigen 
Beispielprogramm habe ich jedenfalls nichts dazu gefunden bzw. in meinen 
Büchern steht auch nichts dazu.

Das alles soll folgender Maßen aussehen wenn ich den Knopf nur drücke 
geht mein MSP in den MassStorage-Modus und wenn ich den Knopf länger 
drücke soll er in LMP4 gehen. Der übrige Code stellt kein Problem da 
einzig die Sache das der Knopf länger gedrückt wird (>=3s) übersteigt 
doch meinen jetzigen Horizont.

Kann man das über einen Timer regeln der in einer Whileschleife die 
Tastendruckzeit überprüft und wenn >=3s Fall a aufruft bzw. <3s Fall b?

Also meine Frage, ist es überhaupt möglich (kann mir eigentlich nicht 
vorstellen wieso nicht) und wo finde ich hierzu Literatur im Netz?

Bin für jede Hilfe dankbar!

von tom (Gast)


Lesenswert?

Schau dir das mal an
Beitrag "Tasten entprellen"

Dort wird auch zwischen kurzem und langem Tastendruck unterschieden. 
Umschreiben auf einen MSP sollte keine Problem sein.
Ich benutz sowas in einer abgewandelten Art auch immer für andere 
Controller z.B. PIC.

Tom

von mrcl (Gast)


Lesenswert?

Vielen Dank für die Antwort,

das man dieses Problem über die Entprellung lösen kann war mir nicht 
bewusst. Hab nun nochmal das Demoprogramm durchforstet und bin auf das 
hier gestoßen (HAL_Buttons.c):

/*********************************************************************** 
****//**
 * @brief  Sets up the WDT as a button debouncer, only activated once a
 *         button interrupt has occurred.
 * @param  none
 * @return none
 ************************************************************************ 
******/

void Buttons_startWDT()
{
    // WDT as 250ms interval counter
    SFRIFG1 &= ~WDTIFG;
    WDTCTL = WDTPW + WDTSSEL_1 + WDTTMSEL + WDTCNTCL + WDTIS_5;
    SFRIE1 |= WDTIE;
}

Das sieht ja eigentlich schon sehr gut aus. Jedoch habe ich mit dem 
Watchdog noch nicht gearbeitet. Laut einem Buch hängt der Intervall (250 
ms) von den Ausgewählten Bits ab und kann von 2 bis x ms eingestellt 
werden.

Wenn ich meine Literatur richtig verstehe wird über WDTIS die Bitzahl 
eingestellt welche dann die Durchläufe bzw. die Zeit regeln. Kann mir 
jemand ein gutes Tutorial für den Watchdog empfehlen. Vorzugsweiße für 
den MSP430 da ich erst am Anfang stehe und noch so meine Probleme mit 
dem Programmieren habe.

Oder weiß zufällig jemand was ich im Code oben ändern kann um auf ca. 3 
s zu kommen (WDTIS_5 durch bspw. WDTIS_60 ersetzen?) oder ist das nicht 
so einfach wie ich denke.

Vielen dank nochmal, stehe einfach noch am Anfang und das alles 
erschlägt mich dann doch ein wenig!

von _elko_ (Gast)


Lesenswert?

Was macht deine Experimentierplatine denn während du den Taster 
betätigst?

Denn wenn da nix zu tun ist würd ich den Taster z.B. alle 100ms Pollen. 
Wenn er Die Anzahl der Pollings wird gezählt. Die Anzahl der positiv 
zurückgegebenen Werte des Pollings (Taster ist gedrückt) kann man zählen 
und sich daraus dementsprechend eine Zeit berechnen. Sobald der Taster 
nicht mehr gedrückt ist kann man noch 1 oder 2x abfragen um 
sicherzustellen, dass der Taster wirklich nicht mehr gedrückt ist und 
kann aufhören zu pollen.


- Ich habe den Beitrag über "Taster entprellen" nicht gelesen. Ich habe 
so mal mit einem PIC ein Türcodeschloss entprellt, bei dem der PIC nix 
anderes zu tun hatte, als auf Tasteneingaben zu warten.

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.