Gast
#354916
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
|
Anzeige
|
Suche Software I2C Slave
Gast
#354916
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 Slave für den ATmega8: http://www.mikrocontroller.net/forum/read-4-328073.html Bernhard
Gast
#354918
Dankeschön...aber ähm , das ist aber ein SPI Interface, oder hab ich da was übersehen??? Sorry, hatte mich vertippt: http://www.mikrocontroller.net/forum/read-4-246060.html
Gast
#354920
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.
Gast
#354921
Einen universellen I2C Slave zu programmieren, der die Specs einhält, ist praktisch unmöglich zu realisieren auf einem MSP430 (zu langsam).
Gast
#354922
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?
Gast
#354924
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.
Gast
#354926
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. Antwort schreiben |
Anzeige
|