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
Dankeschön...aber ähm , das ist aber ein SPI Interface, oder hab ich da was übersehen???
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.
Einen universellen I2C Slave zu programmieren, der die Specs einhält, ist praktisch unmöglich zu realisieren auf einem MSP430 (zu langsam).
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.
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?
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.
>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.
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.
>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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.