Jumper Adressierung

Gast #2830041
Lesenswert?

Hallo zusammen,

mittels eines jumpers am PortB möchte ich Geräte Adressen einstellen 
können.

Meine Idee dazu ist, über den gesamten Port pinweise ein Bitmaske zu 
legen. Also

if ( !(PINB & (1<<PINB7)) dann ... (Jumper ist gegen GND geschaltet)
if ( !(PINB & (1<<PINB6)) dann ...
if ( !(PINB & (1<<PINB5)) dann ..
usw.

Ist das die richige Vorgehensweise oder gibt es da eine einfachere und 
schönerere Lösung ?

Danke
#2830059
Lesenswert?

Damit kommst du auf 8 Adressen.

Du könntest es auch so machen, dann brauchst du für 8 Adressen nur 3 
Pins:

1
   PIN              
2
1   2   3                      Adresse:
3

4
0   0   0                     1
5
0   0   1                     2
6
0   1   0                     3
7
0   1   1                     4
8
1   0   0                     5
9
1   0   1                     6
10
1   1   0                     7
11
1   1   1                     8
(0 = Pin nicht gejumpert, 1 = gejumpert)

Allerdings brauchst du halt dann bis zu 3 Jumper gleichzeitig.
Gast #2830063
Lesenswert?

Simon S. schrieb:
> Damit kommst du auf 8 Adressen.Du könntest es auch so machen, dann brauchst du 
für 8 Adressen nur 3 Pins:   PIN              1   2   3 
Adresse:0   0   0                     10   0   1                     20   1   0 
30   1   1                     41   0   0                     51   0   1 
61   1   0                     71   1   1                     8(0 = Pin nicht 
gejumpert, 1 = gejumpert)Allerdings brauchst du halt dann bis zu 3 Jumper 
gleichzeitig.



Ok !
Aber der Weg mit der Maske pro Pin ist doch richtig, oder ?
#2830065
Lesenswert?

Na wo ist denn dann das Problem? Wenn ein Jumper gesteckt ist, ist das 
Bit Low, wenn nicht, High. Dann ließt du den Port ein, invertierst es 
und hast die Adresse als binär Code.

Wenn du z.B. an PORTB.0 ein Jumper hast und beim Rest nicht, ließt du 
"1111 1110". Invertiert ist das "0000 0001". Und da hast du die Adresse. 
Ob du die im Ram speicherst oder in einem Register für z.B. I²C ist dir 
überlassen.

BTW: Simos Vorschlag ist der gleiche wie meiner, nur dass ich alle 8 bit 
benutze (du meintest den gesamten PORTB). Ob dir 8 Adressen reichen oder 
nicht musst du wissen.

Wenn ja, kannst du auch alles einlesen, also "xxxx x110", negiert "xxxx 
x001" und dann mit "& 0000 0111" Maskieren.

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