Toggeln einer LED

OP #3943031
Lesenswert?
• ▲
▼
Hallo
in einem Code verwende ich das folgende Stück Code:
1
// Prüfen, ob der Taster 1 betätigt wurde
2
    if ( !(PINA & (1<<PINA1)) )
3
    {
4
      // LED an PA 4 aus, PA 5 an
5
      //PORTA &= ~(1<<PA4);
6
      PORTA |= (1<<PA5);  
7
      PORTA ^= (1<<PA4);
8
    }
9
    else
10
    {
11
      //LED an PA 4 an, Pin 5 aus
12
      PORTA |= (1<<PA4);
13
      PORTA &= ~(1<<PA5);
14
    }
Habe den Pin PA4 erst eingeschaltet, dann aus, je nach Taster 1. Danach 
kabe ich die Zeile auskommentiert und durch

PORTA ^= (1<<PA4);

ersetzt. Das Stück Code geht. PA4 schaltet beim betätigen von PA4 um.
Von der Funktion her, soll aber PA5 aus und PA4 einschalten bzw. nach 
else genau anders herum. Wie mache ich das beim toggeln?
achim
#3943068
Lesenswert?
• ▲
▼
@ Achim Seeger (achims)

>in einem Code verwende ich das folgende Stück Code:

>// Prüfen, ob der Taster 1 betätigt wurde
>    if ( !(PINA & (1<<PINA1)) )

Ohne Entprellung wird das meistens nichts. Und ohne Flankenerkennung 
erst recht nicht.

>    {
>      // LED an PA 4 aus, PA 5 an

Nö, PA4 wird invertiert, neudeutsch "getoggelt".

>      //PORTA &= ~(1<<PA4);
>      PORTA |= (1<<PA5);
>      PORTA ^= (1<<PA4);
>    }
>    else
>    {
>      //LED an PA 4 an, Pin 5 aus
>      PORTA |= (1<<PA4);
>      PORTA &= ~(1<<PA5);
>    }

>Habe den Pin PA4 erst eingeschaltet, dann aus, je nach Taster 1. Danach
>kabe ich die Zeile auskommentiert und durch

>PORTA ^= (1<<PA4);

>ersetzt. Das Stück Code geht. PA4 schaltet beim betätigen von PA4 um.
>Von der Funktion her, soll aber PA5 aus und PA4 einschalten bzw. nach
>else genau anders herum. Wie mache ich das beim toggeln?

Siehe ganz oben.
#3943076
Lesenswert?
• ▲
▼
Achim Seeger schrieb
>
> ersetzt. Das Stück Code geht. PA4 schaltet beim betätigen von PA4 um.
> Von der Funktion her, soll aber PA5 aus und PA4 einschalten bzw. nach
> else genau anders herum. Wie mache ich das beim toggeln?

Die Frage ist aber eigentlich, warum du hier ueberhaupt ein Toggeln 
einsetzen willst?

Wenn du eine klare Ein/Aus Abhaengigkeit eines Ausgangs haben willst, 
dann programmier das auch als solches. Beim Toggeln drehst du die 
Polaritaet eines Ausgangs immer nur einfach um, ohne eine Sicherheit 
darueber zu haben, ob sich daraus eine 1 oder eine 0 ergibt. Es haengt 
also immer vom vorherigen Zustand ab. Benoetigst du aber klare 
Verhaeltnisse, dann sorg auch dafuer. Das ist das einfachste und 
zuverlaessigste, weil du dann von keinen Voraussetzungen abhaengig bist.
#3943876
Lesenswert?
• ▲
▼
Achim Seeger schrieb:
> Hallo Karl Heinz, Hallo Falk
> es hat nur die Aufgabe das toggeln kennen zu lernen.

Na ja. Was willst du da groß kennen lernen.
Toggeln ist einfach nur 'umdrehen'. Wenn der Ausgang auf 1 ist, dann ist 
er danach auf 0 und umgekehrt.

Das ist praktisch, wenn man tatsächlich einfach nur umdrehen will, ohne 
sich um 0 oder 1 kümmern zu müssen.
Wenn man aber gezielt einen Ausgang auf 0 oder 1 schalten will, und zwar 
unabhängig vom aktuell vorliegenden Zustand, dann nimmt man kein Toggeln 
sondern setzt den Ausgang eben gezielt auf 0 oder 1. Was soll man sich 
damit abmühen, einen Ausgang erst mal auf 0 zu setzen um ihn danach 
gleich anschliessend mit einem Toggle auf 1 zu setzen, wenn man ihn 
gleich einfach auf 1 hätte setzen können? Ist doch sinnfrei, so 
vorzugehen.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.