www.mikrocontroller.net

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


Autor: Micha (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: haldol (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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;-)

Autor: Dieter Werner (dds5)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Micha (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Dieter Werner (dds5)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Dieter Werner (dds5)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.