Taster richtig abfragen

OP #2355447
Lesenswert?

hallo,

ich bin seit ca. 3 monaten dabei erste erfahrungen mit der 
programmierung von AVRs zu machen.
Habe jetzt eine kleine verständnisfrage was die abfrage von Tastern 
angeht.
Ich habe einen Taster wie im kapitel "entprellung" beschrieben mit dem 
74HCT14 entprellt.
Ich programmiere mit avr-studio5 und dem gcc compiler.

wenn ich jetzt den code

"
while(1)
{
if(TASTER-PIN & (1<<TASTER1))
    {
      test++;
    }
}
"

eingebe und die variable "test" auf einem display ausgebe zählt sie mit 
annähernd dem systemtakt hoch sobalkd ich den taster drücke.
Momentan bin ich etwas verwirrt...
stimmt das jetzt oder nicht?
wie kann ich einen einmaligen tastendruck detektieren? Sprich: die 
Variable test soll sich bei jedem tastendruck um eins erhöhen... Brauche 
ich da eine positive flankenerkennung?

mfg Grassh0pper
Gast #2355458
Lesenswert?

Brauchst du nicht. Du musst warten bis die Taste wieder losgelassen 
wurde
1
while(1)
2
{
3
  if(TASTER-PIN & (1<<TASTER1))
4
    {
5
      test++;
6
      while(TASTER-PIN & (1<<TASTER1)) {} // warten solange gedrückt
7
    }
8
}
(Firma: Manfred) #2355467
Lesenswert?

Hi, also ich hab auch am Anfang alles über Entprellen etc. gelesen,

Resumee:
1) durch Tastenabfrage darf es nie zu einer Wartezeit kommen, also 
wait-Statements, Debounce oä ist irgendwie schwach programmiert

2) ein Timer ist Pflicht, konfigurier die Timerintervalle auf die 
höchste Freuqenz, die du brauchst - dann hast du einen perfekten 
Scheduler
10ms/100 Hertz - reichen für die Tastenabfrage
Dann zählst du mit, wie lange der Taster gedrückt war bzw. wie lange 
nicht, ab 3x an gilt er dann als fix gedrückt, ab 3x aus gilt er  als 
nicht mehr gedrückt
OP #2355501
Lesenswert?

wie gesagt:
habe den taster hardwaremäßig mit nem 74hct14 entprellt! Ich glaube, ich 
muss jetzt noch zusätzlich softwaremäßig die flanke auswerten. kenn ich 
von der awl-programmierung bei den spsen. da gabs den schönen befehl FP 
oder FN.
problem ist ja nicht das prellen des tasters, sondern dass der zustand 
"Taster ist gedrückt" von der if-bedingung bei jedem programmzyklus als 
wahr interpretiert wird.
ist das so, oder bin ich verkehrt?
(Firma: Manfred) #2355541
Lesenswert?

rené s. schrieb:
> wie gesagt:
> habe den taster hardwaremäßig mit nem 74hct14 entprellt! Ich glaube, ich
> muss jetzt noch zusätzlich softwaremäßig die flanke auswerten. kenn ich
> von der awl-programmierung bei den spsen. da gabs den schönen befehl FP
> oder FN.
> problem ist ja nicht das prellen des tasters, sondern dass der zustand
> "Taster ist gedrückt" von der if-bedingung bei jedem programmzyklus als
> wahr interpretiert wird.
> ist das so, oder bin ich verkehrt?

Geht genauso mit Timer

Timer erhöht xon wenn Taster gedrückt und zählt hoch bis max. 255 oder 
65535 (bei word-Variablen)
Timer setzt xon auf 0 wenn Taste losgelassen

Du prüfst im Hauptprogramm auf xon=1
Wenn ok, FP erfüllt, xon um 1 erhöhen (verhindert 2. Abfrage)

Nebeneffekt: du kannst auch längere Tastendrücke erkennen
z.B. wenn xon=200 (200x10ms=2 Sekunden)
Gast #2355546
Lesenswert?

rené s. schrieb:
> wenn ich jetzt den code
>
> "
> while(1)
> {
> if(TASTER-PIN & (1<<TASTER1))
>     {
>       test++;
>     }
> }
> "
>
> eingebe und die variable "test" auf einem display ausgebe zählt sie mit
> annähernd dem systemtakt hoch sobalkd ich den taster drücke.
> Momentan bin ich etwas verwirrt...

Was hättest du denn erwartet und warum?
Du fragst in einer Schleife ständig, ob der Taster gerade gedrückt ist 
oder nicht, und wenn er gedrückt ist, erhöhst du deinen Zähler. Dann 
kommt sofort der nächste Schleifendurchlauf, der das auch wieder macht.
Gast #2356083
Lesenswert?

Mach doch so:

Wenn Taster gedrückt und  Bit-Variable == 0
{
   Wenn Bit-variable == 0
   {
      setze Bit-Variable;
      Test++;
   }
else
   Wenn Taster nicht gedrückt
   ´{
      setze Bit-Variable zurück
    }
}

So mal als Vorschlag!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren