Forum: Mikrocontroller und Digitale Elektronik Erkennung Taster klemmt


von Mattes (Gast)


Lesenswert?

Hi!
bin grad dabei ein Programm für ein Projekt zuschreiben was auch soweit 
funtioniert.
Über eine AD wandlung lese ich 3 zustände eines Tasters ein! weil ich 
auch einen Kurzschluss erkennen muss!
nun die Frage: wenn ich den Taster drücke soll etwas passieren, aber wie 
erkenne ich jetz wenn der Taster klemmt? sprich das er länger als eine 
sekunde gedrückt ist?
1
void Taster()
2
    {
3
    if (TasterV <= 512 &&TasterV>=105) //wenn Spg. 0,5V bis 2,5V, dann weiter Status_d ändern
4
    {
5
    tasterkurz=0;  
6
    if (Status_d==1)
7
        {  
8
            Status_d=0;
9
          //  eeprom_write_byte(0x20,(unsigned int) Status_d);
10
            _delay_ms(4);
11
            PORTD |= (1<<PORTD7);  //LED am µC an
12
13
14
            _delay_ms(500);
15
  
16
        }
17
        else 
18
        {    
19
            Status_d=1;
20
          //  eeprom_write_byte(0x20,(unsigned int) Status_d);
21
            _delay_ms(4);
22
            PORTD &= ~(1<<PORTD7);   //LED am µC an
23
24
25
            _delay_ms(500);
26
              
27
28
        }
29
    }
30
    else if (TasterV <= 100 )    //wenn Spg. 0bis 0,5V, dann Fehler = 1
31
    {
32
      
33
        tasterkurz = 1;
34
    }
von holger (Gast)


Lesenswert?

>nun die Frage: wenn ich den Taster drücke soll etwas passieren, aber wie
>erkenne ich jetz wenn der Taster klemmt? sprich das er länger als eine
>sekunde gedrückt ist?

Wenn jemand mit dem Fuß auf deiner Hand steht, wie erkennst du
dann wie lange er da drauf steht? Richtig, du zählst einfach mit:
Aua, aua, aua, aua. Das waren 4 Sekunden.
von Mattes (Gast)


Lesenswert?

haha! das hab ich mir soweit auch gedacht! aber an welche stelle mach 
ich das am besten! zählschleife bis xxx und dann den fehler auslösen! 
arbeite aber komplett ohne interrups
von µC-Fan (Gast)


Lesenswert?

Mattes schrieb:
> arbeite aber komplett ohne interrups

Das ist für Zeitmessungen und Ereignissteuerung grundsätzlich nicht so 
geschickt.
von Thomas E. (thomase)


Lesenswert?

Mattes schrieb:
> aber wie erkenne ich jetz wenn der Taster klemmt? sprich das er länger
> als eine sekunde gedrückt ist?
Im einfachsten Fall, indem du nach einer Sekunde nachguckst, ob er immer 
noch gedrückt ist. Das führt natürlich zu Fehlern, wenn der Taster 
gedrückt und losgelassen wurde und nach ca. 1s wieder gedrückt würde. 
Also so eine Art Doppelklick. Das könnte als Dauerdrücken interpretiert 
werden.

Mit den 500-ms-Delays wird das so nichts.

Du guckst dir den Taster alle 10ms an. Und wenn er gedrückt ist, zählst 
du.

Also so ungefähr:

while (1)
{
    if(Checktaster()) nAua++; else nAua = 0;
    //Auswerten
    if (nAua >= 1000) Alarm();
    else
    {
      if (nAua) Lampe(1); else Lampe(0);
    }
    _delay_ms(10);
}

Und dann guckst du dir an, wieviel einfacher das mit einem 
Timer-Interrupt geht.
mfg.
von Mattes (Gast)


Lesenswert?

ist mir auch schon aufgefallen ist aber für die uni! und wenn die das 
sagen muss das auch ohne gemacht werden! mach jetz einfach eine zählung 
und dann ist gut! wenns zu schnell geht las ich auch bis 1000 zählen! 
wird morgen mal getester!

kennt sich zuällig einer gut mit eeprom write and read aus! und kann mir 
ein passendes beispiel programm zukommen lassen! das im tutorium check 
ich nich so ganz

danke
von Mattes (Gast)


Lesenswert?

achja.... die 500ms delay kommen da noch wieder raus! und einen 
spielschutz brauch ich eigentlich auch noch!
das mit den interpts hab ich mir schon angeguckt!

lg
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.