Forum: Compiler & IDEs Tippbetrieb mit einem Atmega


von Pascal (Gast)


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

von Karl H. (kbuchegg)


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.

von Pascal (Gast)


Lesenswert?

Hallo,

und besten Dank für die schnelle Antwort. Das ist ein super 
Code-Schnipsel, funktioniert auch einwandfrei. Genau das habe ich 
gesucht!

Danke,
Pascal

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.