I2C slave mit address masking am PIC18

Gast #991267
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
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
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
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

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.