Martin M.: Microcontroller: if-Schleife mit zwei Schaltern

Hallo,
Ich habe vor kurzem angefangen mich mit Microcontrollern auseinander zusetzen.
Nun habe ich folgendes Problem.
Ich will die Bedingung für eine if-Schleife mit 2 Schaltern erstellen:

if((Schalter 1 >>1)&(Schalter 2 >>1)){
//Aktion
}

nun sieht die if Schleife für einen Eingang so aus:

if ( PINC & (1<<PINC1) ){
//Aktion
}

meine Überlegung für 2 Eingänge war:

if (( PINC & (1<<PINC1) )&( PINC & (1<<PINC2) )){
//Aktion
}

Ich habe auch einige andere Möglichkeiten ausprobiert, aber keine hat funktioniert.
Danke schonmal im Voraus.

M.F.G. Martin

  1. Hi,

    Ich habe vor kurzem angefangen mich mit Microcontrollern auseinander zusetzen.
    Nun habe ich folgendes Problem.
    Ich will die Bedingung für eine if-Schleife mit 2 Schaltern erstellen:

    http://if-schleife.de/

    meine Überlegung für 2 Eingänge war:

    if (( PINC & (1<<PINC1) )&( PINC & (1<<PINC2) )){
    //Aktion
    }

    Ich habe auch einige andere Möglichkeiten ausprobiert, aber keine hat funktioniert.

    Bitte lies zunächst die Tipps für Fragende.

    Um welche Sprache handelt es sich da?
    Und was willst du mit dem Code eigentlich erreichen?

    MfG ChrisB

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
    1. Hi,

      Ich habe vor kurzem angefangen mich mit Microcontrollern auseinander zusetzen.
      Nun habe ich folgendes Problem.
      Ich will die Bedingung für eine if-Schleife mit 2 Schaltern erstellen:

      http://if-schleife.de/

      meine Überlegung für 2 Eingänge war:

      if (( PINC & (1<<PINC1) )&( PINC & (1<<PINC2) )){
      //Aktion
      }

      Ich habe auch einige andere Möglichkeiten ausprobiert, aber keine hat funktioniert.

      Bitte lies zunächst die Tipps für Fragende.

      Um welche Sprache handelt es sich da?
      Und was willst du mit dem Code eigentlich erreichen?

      MfG ChrisB

      Das Programm wird in C verfasst. Die Software mit der ich es erstelle ist
      AVR Studio 4.
      Die if-Abfrage wird erfüllt wenn die Eingänge leiteten.
      Der Aufbau des Programmes soll so aussehen, dass wenn die Eingänge PC1 und PC2 leiten beliebige Ausgänge geschaltet werden.
      Deshalb ist meine Frage wie die Bedingung für die if-Abfrage ausehen muss.
      Eigentlich bin ich davon ausgegangen das eine if-Abfrage mit einer logische AND Verknüpfung als Bedingung funktionieren müsste.

      Da wenn man z.B:
      if(a&b){
      ....
      }
      hat, man nur die Variablen durch a = ( PINC & (1<<PINC1) ) und
      b = ( PINC & (1<<PINC2) ) ersetzen müsste, damit es funktioniert.

      M.F.G. Martin

      1. hi,

        Eigentlich bin ich davon ausgegangen das eine if-Abfrage mit einer logische AND Verknüpfung als Bedingung funktionieren müsste.

        Da wenn man z.B:
        if(a&b){

        Das einfache & ist ein bitweise AND. Ein logisches AND wäre && in c.

        hat, man nur die Variablen durch a = ( PINC & (1<<PINC1) ) und
        b = ( PINC & (1<<PINC2) ) ersetzen müsste, damit es funktioniert.

        << und >> sind Shift Operatoren. (4 >> 1) ergibt einen Wert, der dadurch entsteht, dass eine 4 um ein bit nach rechts geschoben wird:

        4 als Bitmuster: 0100

        1 bit nach rechts ergibt 0010 also 2 (Wurzel aus 4).

        4 << 1 ergibt 0100. Ein bit nach links: Zahl hoch 2 (hier: ne 8).

        Alles klaro ;-)

        Horst Bitmann

        --
        1 + 1 = 10
        1. Hallo hotti,

          4 als Bitmuster: 0100

          1 bit nach rechts ergibt 0010 also 2 (Wurzel aus 4).

          4 << 1 ergibt 0100. Ein bit nach links: Zahl hoch 2 (hier: ne 8).

          Alles klaro ;-)

          nein. Ich dachte, x >> 1 wäre "durch 2" und x << 1 "mal 2".
          Siehe auch http://de.wikipedia.org/wiki/Bitweiser_Operator#Bitweise_Verschiebungen.

          Gruß, Jürgen

          1. hi Jürgen,

            nein. Ich dachte, x >> 1 wäre "durch 2" und x << 1 "mal 2".

            Hhm, Du hast natürlich recht! Malzwei, klaro ;-)

            Siehe auch http://de.wikipedia.org/wiki/Bitweiser_Operator#Bitweise_Verschiebungen.

            Ach ;-)

            Danke Jürgen,
            Horst Heimlich

        2. hi,

          Eigentlich bin ich davon ausgegangen das eine if-Abfrage mit einer logische AND Verknüpfung als Bedingung funktionieren müsste.

          Da wenn man z.B:
          if(a&b){

          Das einfache & ist ein bitweise AND. Ein logisches AND wäre && in c.

          Habe den Fehler bei mir entdeckt und zwar hatte ich ein bitweises AND benutzt und keine Logisches.
          Das Programm funktioniert, Danke an alle für ihre Beiträge.

          M.F.G. Martin

          1. hi Martin,

            Das einfache & ist ein bitweise AND. Ein logisches AND wäre && in c.

            Habe den Fehler bei mir entdeckt und zwar hatte ich ein bitweises AND benutzt und keine Logisches.
            Das Programm funktioniert, Danke an alle für ihre Beiträge.

            Da freue ich mich aufrichtig mit Dir, schön!! Für mich wäre das auch ein Job gewesen, also (kleine) Geräte bauen und mit einem dazu selbst programmierten Mircocontoller zum Leben zu erwecken. Ich hoffe, Dir macht die Arbeit Spaß.

            Viele Grüße,
            Hotti

            PS: Ich hab mich auch mal auf son Job beworben, weil ich Berufserfahrung im wissenschaftlichen Gerätebau habe, Friedrich-Schiller-Universität Jena. Da liegt zwar ein paar Jahre zurück, was für mich jedoch kein Problem wäre. Das Problem habe heutige Arbeitgeber mit meinem Alter, der hat sich nie wieder gemeldet auf meine sehr ausführliche Bewerbung. Was bilden die sich eigentlich ein, mit bischen Eigenkaptial würde ich mit sowas eine eigene Firma gründen, aber das Kapital fehlt mir halt.

            1. Was bilden die sich eigentlich ein, mit bischen Eigenkaptial würde ich mit sowas eine eigene Firma gründen, aber das Kapital fehlt mir halt.

              Und warum beschaffst Du Dir keins?

              1. Was bilden die sich eigentlich ein, mit bischen Eigenkaptial würde ich mit sowas eine eigene Firma gründen, aber das Kapital fehlt mir halt.

                Und warum beschaffst Du Dir keins?

                Hehe, gute Frage ;-)

                Viele Grüße,
                Horst Mittellos

                --
                Wenn Du vor einem Abgrund stehst, guck nicht weg sondern guck rein.
              2. Hallo,

                aber das Kapital fehlt mir halt.
                Und warum beschaffst Du Dir keins?

                meinst du, dass Aufforderungen zum Betteln oder zu kriminellen Aktionen hier richtig sind?
                Oder wie stellst du dir das plötzliche Erscheinen von Kapital (Geld oder andere materielle Werte) vor? Erbschaft? Lottogewinn? Banküberfall?

                So long,
                 Martin

                --
                Zwischen Leber und Milz
                passt immer noch'n Pils.
                Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
                1. Hallo Martin,

                  meinst du, dass Aufforderungen zum Betteln oder zu kriminellen Aktionen hier richtig sind?
                  Oder wie stellst du dir das plötzliche Erscheinen von Kapital (Geld oder andere materielle Werte) vor? Erbschaft? Lottogewinn? Banküberfall?

                  Einige Banken geben das Kapital auch freiwillig raus, gegen Zinsen und ne gute Idee ;)

                  ciao
                  romy

                  1. Hallo Romy,

                    Oder wie stellst du dir das plötzliche Erscheinen von Kapital (Geld oder andere materielle Werte) vor? Erbschaft? Lottogewinn? Banküberfall?
                    Einige Banken geben das Kapital auch freiwillig raus, gegen Zinsen und ne gute Idee ;)

                    das ist nach meiner Auffassung eben *kein* Kapital, sondern ein Darlehen.
                    Damit kriege ich zwar auf der einen Seite Geld, habe aber auf der anderen Seite entsprechende Schulden. Unter Kapital verstehe ich was anderes - nämlich etwas, das ich wirklich besitze.

                    Ciao,
                     Martin

                    --
                    why the heck do you jerk think, that wir ein doppelposting nicht bemerken, wenn you zwischendurch the sprache wechselst?
                      (wahsaga)
                    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
                    1. Hi!

                      Oder wie stellst du dir das plötzliche Erscheinen von Kapital (Geld oder andere materielle Werte) vor? Erbschaft? Lottogewinn? Banküberfall?
                      Einige Banken geben das Kapital auch freiwillig raus, gegen Zinsen und ne gute Idee ;)

                      das ist nach meiner Auffassung eben *kein* Kapital, sondern ein Darlehen.

                      Es ist sog. *Fremdkapital*. http://de.wikipedia.org/wiki/Bilanzsumme

                      Damit kriege ich zwar auf der einen Seite Geld, habe aber auf der anderen Seite entsprechende Schulden.

                      Aktiva=Passiva.

                      Unter Kapital verstehe ich was anderes - nämlich etwas, das ich wirklich besitze.

                      Andere verstehen darunter eine Hauptstadt, die ihnen möglicherweise total fremd ist.

                      Du *besitzst* natürlich auch das Fremdkapital (Schulden) passiv auf der Seite der Mittelherkunft und kannst es aktiv auf der Seite der Mittelverwendung benutzen - so what?

                      Bonne nuit.

                      off:PP

                      --
                      "You know that place between sleep and awake, the place where you can still remember dreaming?" (Tinkerbell)
  2. hi,

    if((Schalter 1 >>1)&(Schalter 2 >>1)){

    Also je ein bit nach rechts...

    nun sieht die if Schleife für einen Eingang so aus:

    if ( PINC & (1<<PINC1) ){

    Hmm, die Anzahl der Bits, die zu schieben sind, steht doch auch mit Deiner Programmiersprache auf der rechten Seite, oder?

    Hotti

  3. Hi,

    meine Überlegung für 2 Eingänge war:

    if (( PINC & (1<<PINC1) )&( PINC & (1<<PINC2) )){
    //Aktion
    }

    Ich habe auch einige andere Möglichkeiten ausprobiert, aber keine hat funktioniert.

    Was willst Du denn jetzt genau wissen? Bzw., weisst Du, was Dein Code da macht?

    Ist PINC2 die Nummer des zweiten Eingangs, den Du abfragen willst? Und PINC ist ein unsigned, in dem jedes Bit einen der Eingänge repräsentiert?

    Dann ist nur Dein & in der Mitte falsch, denn dort brauchst Du eine logische Verknüpfung (&&) und kein Bitweises UND. Ist das ein Schreibfehler oder ist die die Bedeutung des Operators unklar? Die Aktion erfolgt, wenn die erste UND die zweite Bedingung wahr sind. Innerhalb der Bedingungen filtert das & dagegen den Wert des entsprechenden Bits.

    Gruss
    Stefanie

    PS: Es ist gängige Konvention, Variablennamen (->PINC) klein und nur Konstanten groß zu schreiben.

    1. Tach.

      PS: Es ist gängige Konvention, Variablennamen (->PINC) klein und nur Konstanten groß zu schreiben.

      Die avrlib definiert aber für die IO-Ports und -Pins dieser Mikrocontroller Makros, die komplett in Großbuchstaben geschrieben werden.

      --
      Always remember that you are unique. Just like everybody else.
  4. Hi,

    Ich habe vor kurzem angefangen mich mit Microcontrollern auseinander zusetzen.
    Nun habe ich folgendes Problem.

    hast du schon einmal bei mikrocontroller.net reingeschaut? Da sind die Chancen auf Hilfe in deinem speziellen Fall evt. etwas größer (ohne den Selfern die Kompetenz absprechen zu wollen).

    Schönen Sonntag noch!
    O'Brien

    --
    Frank und Buster: "Heya, wir sind hier um zu helfen!"
    1. Tach.

      hast du schon einmal bei mikrocontroller.net reingeschaut? Da sind die Chancen auf Hilfe in deinem speziellen Fall evt. etwas größer (ohne den Selfern die Kompetenz absprechen zu wollen).

      Von der fachlichen Ausrichtung her stehen die Chancen dort sicher besser. Allerdings muß ich aus meinen vereinzelten Mitleseerfahrungen im dortigen Forum sagen, daß bei vielen ihrer "alten Hasen" ein echt saumäßiger Umgangston herrscht. Insbesondere einem Anfänger könnte ich dieses Forum nur empfehlen, wenn er einen ausgeprägten Hang zum Masochismus oder aber ein besonders dickes Fell mitbringt.

      --
      Always remember that you are unique. Just like everybody else.