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.
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;-)
Ich programmiere gerade mit einem PIC24FJ32GA002, der hat ein Maskregister in HW - keine Ahnung wie das in SW zu lösen sein könnte.
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...
> 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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.