Forum: Mikrocontroller und Digitale Elektronik Suche Software I2C Slave


von Norbert (Gast)


Lesenswert?

Nabend,

gibt es vielleicht fertige Libraries für Software I2C Slaves? Am besten
sogar für den MSP430?? Bislang habe ich immer nur Routinen für die
Masterfunktionalität gefunden.

Gruß
Norbert

von Bernhard S. (bernhard)


Lesenswert?


von Norbert (Gast)


Lesenswert?

Dankeschön...aber ähm , das ist aber ein SPI Interface, oder hab ich da
was übersehen???

von Bernhard S. (bernhard)


Lesenswert?


von Norbert (Gast)


Lesenswert?

Kein Problem.

Ich befürchte aber, ich habe mich missverständlich ausgedrcükt, tut mir
Leid. Was ich suche, ist ein "Software-I2C Slave" oder wie nennt man,
damit das deutlicher wird. Also ein I2C Slave, der nur normale Portpins
benutzt und nicht auf ein Hardwareinterface zurückgreift.

Sorry...vielleicht kann mir aber ja trotzdem jemand helfen.

von Johnny (Gast)


Lesenswert?

Einen universellen I2C Slave zu programmieren, der die Specs einhält,
ist praktisch unmöglich zu realisieren auf einem MSP430 (zu langsam).

von Norbert (Gast)


Lesenswert?

Ich hatte das mal durchgerechnet und da passte das eigentlich ganz gut.
Der MSP430 wird mit 8MHz getaktet und immerhin hat man dann (bei 100kHz
 I2C) zwischen den einzelnen Takten an SCL 80 Taktzyklen Zeit.

von Bernhard S. (bernhard)


Lesenswert?

Ich denke, das größte Problem wird sein, eine Start -Sequenz zu
ermitteln.

Hierzu könnte man einen externen Interrupt nutzen, somit ist man leider
wieder an spezielle PINs gebunden.

Oder man fragt in sehr kurzen Abständen die SDA-Leitung ab?

von Norbert (Gast)


Lesenswert?

Also externe Interrupts muss man glaub ich auf jeden Fall benutzen.
Angenommen so eine Kommunikation wird mal zwischendurch abgewürgt,
würde der Controller ja sonst auch die ganze Zeit hängen bleiben.

Ich weiß nicht, wie das bei den ATMEGA Controllern ist, aber bei die
MSP430 können auf jeden Portpin einen Interrupt erzeugen.

Mein Problem ist halt zur Zeit nur, dass der Controller, den ich
verwende, kein Hardware I2C hat.

von Bernhard S. (bernhard)


Lesenswert?

>Also externe Interrupts muss man glaub ich auf jeden Fall benutzen.
>Angenommen so eine Kommunikation wird mal zwischendurch abgewürgt,
>würde der Controller ja sonst auch die ganze Zeit hängen bleiben.

Den ext Interrupt benötigt man eigentlich nur, um die ganze Prozedur zu
starten.

Und anschließend könnte man durch einen Timer o.ä. die einzelnen
I2C-Bits abfragen und ggf auch BITS an den Master senden.

Ein Fehler in der Kommunikation könnte somit korrigiert werden.

>Ich weiß nicht, wie das bei den ATMEGA Controllern ist, aber bei die
>MSP430 können auf jeden Portpin einen Interrupt erzeugen.

Bei den Atmegas sind nur wenige Pins in der Lage einen ext Interrupt
auszulösen.

von Norbert (Gast)


Lesenswert?

Achso, du würdtest das mit einem Timer machen. Ich hätte jetzt (auch mit
einem Interrupt) das SCL Signal ausgewertet. Beim Lesen mit der
steigenden Taktflanke das Signal einlesen und beim Schreiben mit der
fallenden Taktflanke das nächste Bit rausschieben.

von Bernhard S. (bernhard)


Lesenswert?

>Achso, du würdtest das mit einem Timer machen. Ich hätte jetzt (auch
>mit einem Interrupt) das SCL Signal ausgewertet.

Vielleicht sollte man auch beides miteinander kombinieren?


> Beim Lesen mit der steigenden Taktflanke das Signal einlesen und
>beim Schreiben mit der fallenden Taktflanke das nächste Bit
>rausschieben.

Es kann sein, dass der Slave im Schreibmodus, das Bit vor dem SCL schon
gesetzt haben muss?
Bin ich mir aber auch nicht ganz sicher.

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.