Forum: Mikrocontroller und Digitale Elektronik I2C slave mit address masking am PIC18


von Micha (Gast)


Lesenswert?

Hallo Forum,

ich arbeite derzeit mit einem PIC18 und realisiere einen I2C-Slave, der 
durch "address masking" auf verschiedene Adressen ansprechen soll. Der 
Sinn ist, zwei herkömmliche I2C-Slave-Schaltungen in einer neuen zu 
verheitraten, ohne an den Master.Geräten was verändern zu müssen.

Die separaten Slave-Routinen funktionieren auf ihren jeweiligen 
Adressen. Meine Frage ist nun, wie ich mit Hilfe des "Address masking" 
und dem auslesen des SSP1BUF-Registers eine gültige Adressierung 
erkennen kann, ohne dass der ganze Bus durch das runterziehen der 
SCK-Leitung gesperrt wird. Ich denke, die Adress-Selektion sollte im 
State1 der üblichen PIC-I2C Statemachine stattfinden. Aber es muß dort 
irgendwie der Bus wieder freigegeben werden, wenn eine gesendete Adresse 
nicht überein stimmt. Am gleichen bus hängen nämlich noch zwei fest 
verdrahtete I2C-EEPROMS. Wenn ich das Mask-Register nutze und die maske 
in den Bereich solch eines EEPROMS fällt, sendet doch mein Slave dann 
auch ein ACK zurück, auch wenn er nix mit dem EEPROM zu tun haben soll?!

Ich wäre für einen Code-Schnipsel speziell über diese Maskiererei sehr 
dankbar.

Gerät 1:  Slave-Adresse 44h
Gerät 2:  Slave-Adresse 4Eh
(beide sollen in einem PIC18 verheiratet werden)
EEPROM1: Slave-Adresse A0h
EEPROM2: Slave-Adresse A2h

Vielen Dank,
Micha.

von haldol (Gast)


Lesenswert?

hallo..
wenn ich das richtig verstanden habe könntest du das umschalten der 
beiden slaves über ne i2c-bus muxe realisieren oder auch über eine 
andere konventionelle muxe realisieren.
damals in meiner diplomarbeit hatte ich insgesamt 4 separate ic2 busse 
auf einem controller. da hatte ich auf dem i2c-interface den internen 
buss laufen und 3 externe busse hatte ich mit normalen I/O-pins 
realisiert.
assemblercode hiefür gibts auf anfrage;-)

von Dieter W. (dds5)


Lesenswert?

Ich programmiere gerade mit einem PIC24FJ32GA002, der hat ein 
Maskregister in HW - keine Ahnung wie das in SW zu lösen sein könnte.

von Micha (Gast)


Lesenswert?

Hallo Forum,

der PIC18 hat dieses "Address mask" Register. Ich verstehe momentan nur 
nicht ganz, wie ich in Software dieses Mask Register verwenden kann, um 
eine Gruppe von Adressen durchzulassen und im State1 bzw. State3 (Master 
Write/Read, last byte was an address) diese dann zuzuteilen und zu 
bearbeiten...

von Dieter W. (dds5)


Lesenswert?

> der PIC18 hat dieses "Address mask" Register ...

Na, wenn der PIC18 dieses Register hat, dann verrat uns doch bitte mal 
um welchen es sich handelt - ich kenne keinen und hab keine Lust 
sämtliche Datenblätter durchzusuchen.

von Dieter W. (dds5)


Lesenswert?

Nachtrag

Beim PIC24FJ.... muss man im Maskregister ein Bit setzen, damit das 
korrespondierende Bit der Adresse *nicht ausgewertet wird.*

Beispiel aus dem ersten Beitrag
gewünschte Adresse1:   44h  01000100b
gewünschte Adresse2:   4Eh  01001110b
gewählte Slaveadresse: 44h  01000100b
erforderliche Maske:   0Ah  00001010b

Jetzt reagiert die Schnittstelle auf alle Adressen mit dem Bitmuster
                            0100x1x0b

das wären 44h, 46h, 4Ch und 4Eh.

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.