Forum: Mikrocontroller und Digitale Elektronik Jumper Adressierung


von tom (Gast)


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

von Michael S. (rbs_phoenix)


Lesenswert?

Du aktivierst die internen PullUps und ließt den ganzen Port ein?
Notfalls kannst du es danach noch Maskieren und/oder invertieren

von Simon S. (-schumi-)


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.

von tom (Gast)


Lesenswert?

Ja PullUps sind aktiviert.

von tom (Gast)


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 ?

von Simon S. (-schumi-)


Lesenswert?

Nachtrag:

Code währe dann:
1
adresse = PINB & 7;

(Wenn du die 3 niederwertigsten Pins des PortB nimmst. Ansonsten halt 
nach rechts shiften)

von Michael S. (rbs_phoenix)


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.

von Karl H. (kbuchegg)


Lesenswert?

tom schrieb:

> Ok !
> Aber der Weg mit der Maske pro Pin ist doch richtig, oder ?

Schon. Aber umständlich.

Und für einen Benutzer ist es in Wirklichkeit auch nicht einfacher.

von tom (Gast)


Lesenswert?

nach ein paar Zeichnungen und vielen 000000'en und 1111111'en habe ich 
es nun begriffen.

Danke !

von Klaus W. (mfgkw)


Lesenswert?


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.