PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wie bei Knopfdruck Variable um eins hochzählen?



Wasserkäfer
19.10.2007, 13:56
Hallo,

habe mir das RN-Control gebaut, da ich mir das arbeiten mit Mikrocontrollern beibringen will. Soweit klappt auch schon alles, USART, LCD, ADC usw.

Nun hab ich mir in C mal das Grundgerüst für eine Uhr geschrieben. Sekunden hochzählen und halt dann jeweils die Minuten und Stunden hochzählen lassen. Jetzt wollt ich per Knopfdruck die Stunden und Minuten manuell hochzählen, da die Uhr sonst ja immer von 00:00:00 zu zählen beginnt.
Abgefragt wird der Button ja über den AD-Wandler an PortA.7. Momentan zählen die Sekunden wahnsinnig schnell hoch wenn ich die Taste drück was auch verständlich is da die Funktion die die Variable inkrementiert dauernd durchläuft.

Ich hatte an ne Flankenerkennung gedacht, da die ja nur einmal stattfindet wenn man nen Taster drückt, da der Taster aber an dem AD-Wandler hängt wüsst ich net wie ich das lösen könnt.

Für nen kleinen Denkanstoss, wie man das beheben kann wär ich sehr dankbar. Is bestimmt nur ne Kleinigkeit für C Profis ^^

Danke schonmal

gummi_ente
19.10.2007, 14:26
Hallo Wasserkäfer,

es gibt zwei Möglichkeiten:

schlechte, nach erkennen der Taste Zeit abwarten und nochmal abfragen,

gute, Flag setzen, das Taste gekommen ist und merken. Wenn Taste geht Flag wieder löschen, dann hast Du die Flanke. Hat allerdings den Nachteil, das für jede Stelle einmal gedrückt wird.

Elegant macht man sowas mit nem Keyrepeat nach einer definierten Zeit, will heißen, das Zählen läuft schneller je länger man die Taste festhält.

Grüße

Wasserkäfer
19.10.2007, 19:55
Danke

habs jetzt mal geschafft über den schlechten Weg :P *schäm*
Morgen möcht ich mir mal den "guten" Weg anschaun und ausprobieren. Wie ich das realisier ist mir noch unklar. Grad frag ich einfach mit 2 if-Funktionen die Zustände kurz hintereinander ab und reagier dementsprechen darauf, aber leider sind danoch 2 _delay_ms drinnen um das zeitversetzte abfragen zu realisieren. Wie ist die "gute" möglichkeit denn gemeint? Da müsst ich doch auch einfach nur den Zustandswechsel abfragen oder?

Vom Keyrepeat lass ich mal noch die Finger von :P

Danke schonmal

uwegw
19.10.2007, 23:42
Damit die Tastenerkennung im Hintergrund mitlaufen kann, ohne das Hauptprogramm zu blockieren, müsste sie in einem Timer-interrupt laufen. Also zb alle 10ms die Tasten einlesen, vom ADC-Wert auf die einzelnen Tasten zurückrechnen, und dann die Flankenerkennung durchführen.

gummi_ente
19.10.2007, 23:56
Hey Wasserkäfer,

das ist die richtige Einstellung, mühsam ernährt sich das Eichhörnchen. =D>

Nee, ist schon richtig sich schrittweise ran zu arbeiten. Weil dann lernt man vielmehr als nur was stupide ab zu tippen.

Wie uwegw geschrieben hat kann man das in einer Timertask machen oder über einen Tasten-Interrupt.

Versuch Dich einmal daran. Wenns nicht klappt einfach melden.

Toi, Toi, Toi. =D>

Grüße