Tippbetrieb mit einem Atmega

Gast #728332
Lesenswert?

Hallo,

ich bin am Verzweifeln. Ich möchte eine Steuerung mit einem Atmel 
Mikrokontroller aufbauen. Diese soll zwei Taster haben welche im 
Tippbetrieb arbeiten (d.h., solange ein Taster am Eingang des uP aktiv 
ist soll ein Ausgang (ein)geschaltet werden, wird der Taster gehen 
gelassen, soll der Ausgang wieder ausgeschaltet werden.

Habe auf dem STK500 schon einiges mit einem Atmega32 (PortD Schalter, 
PortB Leds) probiert. Dabei soll der Taster natürlich auch entprellt 
werden, nutze dazu den C Debouncer von P. Dannegger.
Ich bekomme jedoch keinerlei Code hin, der mir genau das oben 
beschriebene Problem löst.
Wie muss denn nur dieser Code aussehen? Ich weiß nicht weiter...

Liebe Grüße
Pascal
#728399
Lesenswert?

Pascal wrote:
> Hallo,
>
> ich bin am Verzweifeln. Ich möchte eine Steuerung mit einem Atmel
> Mikrokontroller aufbauen. Diese soll zwei Taster haben welche im
> Tippbetrieb arbeiten (d.h., solange ein Taster am Eingang des uP aktiv
> ist soll ein Ausgang (ein)geschaltet werden, wird der Taster gehen
> gelassen, soll der Ausgang wieder ausgeschaltet werden.
>
> Habe auf dem STK500 schon einiges mit einem Atmega32 (PortD Schalter,
> PortB Leds) probiert. Dabei soll der Taster natürlich auch entprellt
> werden, nutze dazu den C Debouncer von P. Dannegger.
> Ich bekomme jedoch keinerlei Code hin, der mir genau das oben
> beschriebene Problem löst.
> Wie muss denn nur dieser Code aussehen? Ich weiß nicht weiter...

Du meinst diese hier?
http://www.mikrocontroller.net/articles/Entprellung#Komfortroutine_.28C_f.C3.BCr_AVR.29

Wenn ich das richtig sehe, dann müsste die Information ob eine
Taste zur Zeit gedrückt ist, in der Variablen key_state zu finden
sein.

Also etwa in der Richtung
1
uint8_t is_key_pressed( uint8_t key_mask )
2
{
3
  cli();
4
  key_mask &= key_state;
5
  sei();
6
  return key_mask;
7
}

Die Funktion wird so benutzt
1
int main()
2
{
3
   ....
4

5
   while( 1 ) {
6

7
     if( is_key_pressed( 1 << KEY0 ) )  // wenn Taste gedrückt
8
       PORTB |= ( 1 << LED1 );          // Ja: Led einschalten
9
     else
10
       PORTB &= ~( 1 << LED1 );         // Nein: Led ausschalten
11
   }
12
}

Ich habe die Funktion nicht ausprobiert, aber so in etwa müsste
das funktionieren.

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