I2C slave mit address masking am PIC18

Gast #991267
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.
Gast #991526
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;-)
Gast #995428
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...
#995717
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.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.