Forum: Compiler & IDEs Einfaches Anfängerproblem


von Feissy (Gast)


Lesenswert?

Halle, hab da mal ne Frage und zwar möchte ich, wenn ich 2 
angeschlossene tatster am Atmega8 drücke ( und Verknüpfung ) das 2 
Ausgänge geschaltet werden. Das klappt auch ganz gut.
Aber wenn eben diese Bedingung nicht erfüllt ist, soll ein Ausgang 
getoggelt werden, der Ausgang wird aber nur gesetzt und bleibt an. Was 
muss ich da im Code ändern oder warum funktioniert das nich :
1
else   
2
    {
3
      PORTD = 0b00000000;  //  Ausgänge Aus und
4
 
5
      PORTD ^=  (1<<PD2)  ;     //      Toggle  LED1
6
        _delay_ms(100);         //    Status Fehler
7
                   
8
    }

gruß Stefan

von Klaus W. (mfgkw)


Lesenswert?

So schaltest du D erst komplett ab und togglest dann PD2.
Weil alles (also auch PD2) eben ausgeschaltet wurde, ist
PD2 so immer an anstatt getoggelt.

von Feissy (Gast)


Lesenswert?

Und wenn man das dann so löst :

[c]
else
    {
      PORTD = 0b00000100;  //  Ausgänge Aus und

      PORTD ^=  (1<<PD2)  ;     //      Toggle  LED1
        _delay_ms(100);         //    Status Fehler

    }
[c]

Oder ist dann der Ausgang auch immer gesetzt?

von Klaus W. (mfgkw)


Lesenswert?

so ist er immer aus, weil mit PORTD = 0b00000100 genau
das Bit gesetzt wird, was gleich danach mit PORTD ^=  (1<<PD2)
wieder gekippt, also gelöscht wird.

Welches willst du denn eigentlich an haben und welches gekippt?

von Feissy (Gast)


Lesenswert?

Also PD0 und PD1 sollen gelöscht werden und PD2 soll getoggelt werden.

Muss man da dann irgendwie die beiden mit ner und-verknüpfung 
zusammnenbringen oder nwie stellt man das an ?

von Klaus W. (mfgkw)


Lesenswert?

Feissy schrieb:
> Also PD0 und PD1 sollen gelöscht werden und PD2 soll getoggelt werden.

Das könnte man so machen:
1
     PORTD &= ~( (1<<PD0) | (1<<PD1) ); // PD0 und PD1 löschen
2
     PORTD ^= (1<<PD2); // PD2 kippen

von Feissy (Gast)


Lesenswert?

Achso also mit
1
PORTD &= ~( (1<<PD0) | (1<<PD1) ); // PD0 und PD1 löschen

löscht man dann eben nur die beiden Bits und nicht den ganzen Port.

Ok danke dann hab ich das nu auch verstanden .

von Klaus W. (mfgkw)


Lesenswert?

Bitte, war nicht schwer. Steht ja im Tutorial... :-)

von Feissy (Gast)


Lesenswert?

ups ja hab grade nachgeguckt .............
Also ich finde das Tut auch manchmal sehr hilfreich aber manchmal wenn 
man was ganz einfaches sucht überliest man das sowieso meistens und wenn 
man das dann erst einmal gesehen hat wie man das machen muss dann prägt 
man sich das eher ein...........

Gruß

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.