Forum: Mikrocontroller und Digitale Elektronik 0 oder 1 in eine Variable


von Martin K. (thereallife)


Lesenswert?

Moin Leute,
Folgendes:
Ich habe einen 165er an meinem ATmega32A, Am D0 & D1 vom165er hängt ein 
Drehencoder.
Das auselesen der Daten funktioniert auch ohne Probleme.
Nun aber zu meiner eigentlichen Frage, um die Drehencoder auszulesen 
brauche ich in meiner Funktion 2variablen die entweder 0 oder 1 sind, je 
nach aktuellen status vom drehencoders halt. Nun dachte ich mir ok kein 
Ding, und habs folgendermaßen ausprobiert:
1
void get_Encoder_data(int v165)
2
{
3
  test = (v165 & _BV(1));
4
  test2 = (v165 & _BV(2));
5
}

v165 ist meine Variable in der mein Binärcode vom 165er gespeichert ist.

So ansich funktioniert das ganze auch, jedoch ist in test eine 2 wenn 
der pin an ist und in test2 steht eine 4.
Eigentlich ja auch recht klar...
Aber wie umgehe ich das?
ich möchte halt wirklich nur eine null oder eine eins drin stehen haben.

Oder geht das ganze auch noch einfacher?

Ich freu mich auf eure Lösungsvorschläge.

Grüße
Martin

von wendelsberg (Gast)


Lesenswert?

Martin Kathke schrieb:
> void get_Encoder_data(int v165)
> {
>   test = (v165 & _BV(1)) / 2;
>   test2 = (v165 & _BV(2)) / 4;
> }

wendelsberg

von Rolf Magnus (Gast)


Lesenswert?

Martin Kathke schrieb:
> Moin Leute,
> Folgendes:
> Ich habe einen 165er an meinem ATmega32A, Am D0 & D1 vom165er hängt ein
> Drehencoder.

Und was ist "ein 165er"? Eine Motorradklasse?

> void get_Encoder_data(int v165)
> {
>   test = (v165 & _BV(1));
>   test2 = (v165 & _BV(2));
> }
>
> v165 ist meine Variable in der mein Binärcode vom 165er gespeichert ist.
>
> So ansich funktioniert das ganze auch, jedoch ist in test eine 2 wenn
> der pin an ist und in test2 steht eine 4.

> ich möchte halt wirklich nur eine null oder eine eins drin stehen haben.
1
   test = v165 & _BV(1) ? 1 : 0;
2
   test2 = v165 & _BV(2) ? 1 : 0;

von Simon S. (-schumi-)


Lesenswert?

1
void get_Encoder_data(int v165)
2
{
3
  test = (v165 & _BV(1))>>1;
4
  test2 = (v165 & _BV(2))>>2;
5
}
1
void get_Encoder_data(int v165)
2
{
3
  test = (v165 & _BV(1))?1:0;
4
  test2 = (v165 & _BV(2))?1:0;
5
}
1
void get_Encoder_data(int v165)
2
{
3
  test = !!(v165 & _BV(1));
4
  test2 = !!(v165 & _BV(2));
5
}

Viele Möglichkeiten..

von Martin K. (thereallife)


Lesenswert?

Rolf Magnus schrieb:
> Und was ist "ein 165er"? Eine Motorradklasse?

74hc165

Danke für eure antworten!

von Kaj (Gast)


Lesenswert?

Martin Kathke schrieb:
> Rolf Magnus schrieb:
>> Und was ist "ein 165er"? Eine Motorradklasse?
>
> 74hc165

Und warum schreibst du das nicht gleich so hin?

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.