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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
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?

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]
  • [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.