Codierschalter abfragen

Gast #2150689
Lesenswert?

Hallo zusammen,

ich verzweifel gerade daran einen Codierschalter abzufragen. Hier das 
Datenblatt des Schalters:

http://www.produktinfo.conrad.com/datenblaetter/700000-724999/705400-da-01-ml-Printcodierschalter_P60A_701_de_en.pdf

Der Schalter ist an einem ATTiny45 an PB0-3 angeschlossen.

Je nach Stellung des Schalters soll PB4 unterschiedlich lange auf High 
geschaltet sein. Das ganze Timing funktioniert auch schon.

Allerdings klappt die Abfrage des Schalters noch nicht. Einzelne 
Einstellungen alleine funktionieren, aber nicht alle zusammen.

So habe ich es bisher versucht:
1
  DDRB = 0b00010000;
2
  PORTB = 0b00010000;
3

4
  uint8_t end = 0;
5

6
  if (PINB & 0x01) {
7
    end = 5;
8
  } else if (PINB & 0x02) {
9
    end = 10;
10
  } else if (PINB & 0x03) {
11
    end = 15;
12
  } else if (PINB & 0x04) {
13
    end = 20;
14
  } else if (PINB & 0x05) {
15
    end = 25;
16
  } else if (PINB & 0x06) {
17
    end = 30;
18
  } else if (PINB & 0x07) {
19
    end = 35;
20
  } else if (PINB & 0x08) {
21
    end = 40;
22
  } else if (PINB & 0x09) {
23
    end = 45;
24
  }
25
 
26
  while (1) {
27
  ...
28
  }

Leider überschreiben sich die Abfragen irgendwie gegenseitig.

Kann mir vielleicht jemand weiterhelfen? Ist bestimmt eigentlich eine 
einfache Sache, aber ich komm grad echt nicht weiter.

Vielen Dank.

Gruß, Gerry
#2150744
Lesenswert?

Wenn du deine "&" Operationen durch "==" ersetzt dürfte es sogar mit 
deinem etwas umständlich anmutenden Code funktionieren.

Eleganter ist definitiv der Code von Script Kiddy ;-)

Denke mal nach, auf welche Schalterstellungen z.B. "if (PINB & 0x01)" 
überall zutrifft...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren