www.mikrocontroller.net

Forum: Compiler & IDEs Tippbetrieb mit einem Atmega


Autor: Pascal (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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/Entprellun...

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
uint8_t is_key_pressed( uint8_t key_mask )
{
  cli();
  key_mask &= key_state;
  sei();
  return key_mask;
}

Die Funktion wird so benutzt
int main()
{
   ....

   while( 1 ) {

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

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

Autor: Pascal (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.