Software I2c oder Hardware I2c

Gast #1393560
Lesenswert?

Hallo zusammen!

Ich habe noch nie einen I2C Bus realisiert, also habe ich damit noch 
keine Erfahrung, aber ich beschaffe mir momentan eine Menge Infos.
Aber ich habe dazu noch ein paar Fragen:

Wird der Takt, sei es beim Hardware oder beim Software I2C, nur 
produziert, während er auch wirklich benötigt wird, oder wird er immer 
gesendet?

Und wie verhält sich das mit dem Takt beim Software I2C, wie schnell ist 
der, bzw. kann es sein, dass der sich auch immer im Pogramm, je nachdem, 
was gerade so passiert verändert?
Und wie kann man verhindern(Software I2C), dass der Takt zu schnell 
wird, wenn man mit einem 16MHz Qaurz am Mikrocontroller(Mega 16) 
arbeitet? (Mein Zielobjekt darf maximal 400kHz)

Und dann noch die entscheidenste Frage, was ist einfacher zu 
implementieren und was ist allgemein besser (1 Ziel Objekt, wenig 
Kommunikation) Hardware oder Software I2C?

Achso, Ich arbeite mit Codevision und würde dann dort auch die 
Funktionen für den Software I2C nutzen, für den Hardware I2C gibt es 
dort keine Funktionen....

Falls es wen entscheident, mein Zielobjekt soll ein Si4735 sein.

Um Antworten wäre ich euch sehr dankbar

Gruß

Axel
(Firma: Promaxx.net) #1393580
Lesenswert?

1000 Fragen...

Als I2C-Master ist es eigentlich egal, ob Du Soft- oder Hard-I2C machst.
Bei Soft-I2C mußt Du halt mehr programmieren!
Die max-Speed ist doch einfach. Das schnellste, was das Programm kann, 
ist das Rausschieben der Bits in einer Schleife, da kann man die 
Befehlszyklen zählen oder besser gleich Hardware nutzen.

Der Takt wird nur erzeugt, wenn die Bits übertragen werden.

Man könnte auch einen Timer auf 1/400000s programmieren und nach jedem 
Senden eines Bits abwarten.

Nimm die Hardware, wenn sie vorhanden ist.

Ach ja, die Speed kannst Du ändern, aber eigentlich wird immer das 
langsamste Device am Bus die Speed diktieren, denn das Device muß ja 
immer mitkommen.

Ich habe hier eine Lösung laufen, wo ich mit einem Multiplexer den 
I2C-Bus umschalte und da versch. Speeds realisieren kann, da kann ich 
auch die Speed umschalten.
Gast #1393730
Lesenswert?

> Ich habe noch nie einen I2C Bus realisiert, also habe ich damit noch
> keine Erfahrung, aber ich beschaffe mir momentan eine Menge Infos.

ES wuerde reichen wenn du einfach mal ein Datenblatt lesen wuerdest.
Beispielsweise zum PCF8574.

> Wird der Takt, sei es beim Hardware oder beim Software I2C

Daten werden nur bei Bedarf rausgetaktet, nach der Uebertragung gehoert
eine Stopbedingung zur DEfintion des Busses die bestimmte Pegel 
festlegt.

> Und wie verhält sich das mit dem Takt beim Software I2C, wie schnell
> ist der, bzw. kann es sein, dass der sich auch immer im Pogramm,
> je nachdem, was gerade so passiert verändert?

Das ist durchaus denkbar, zum Beispiel wenn ein IRQ deine deine Routine
unterbrechen sollte und es ist vollkommen unproblematisch.

> Und wie kann man verhindern(Software I2C), dass der Takt zu schnell
> wird, wenn man mit einem 16MHz Qaurz am Mikrocontroller(Mega 16)
> arbeitet? (Mein Zielobjekt darf maximal 400kHz)

In dem du wartest. Entweder aktiv oder mit einem Timer. Letzeres haette
den Vorteil das deine Routine wiederum stabiler auf Unterbrechungen 
durch
einen IRQ bleibt.

> Und dann noch die entscheidenste Frage, was ist einfacher zu
> implementieren und was ist allgemein besser (1 Ziel Objekt, wenig
> Kommunikation) Hardware oder Software I2C?

So eine I2C-Bus Routine in Software kannst du vermutlich in 1-2h 
runterschreiben. Es empfiehlt sich das auch mal zu tun. Einfach deshalb 
weil man soetwas immer mal brauchen kann. Dann kannst du sie auf jedem 
neuen Prozessor praktisch sofort benutzen.
Der Aufand fuer Hardware-I2C haengt stark vom Prozessor ab. Es gibt 
welche da hast du das in 30min laufen, bei anderen kannst du stundenlang 
rumbasteln weil es soviele Einstellmoeglichkeiten gibt.

Wenn dein Prozessor Hardware-I2C hat, und du die Leitungen dafuer nicht
fuer etwas anderes brauchst, dann sollte man den auch verwenden. Einfach 
deshalb weil es deinen Prozessor entlastet und du viel Rechenzeit fuer 
anderes ueber behaelst. Allerdings gibt es natuerlich schon Anwendungen 
wo es vollkommen egal ist.

BTW: Wenn dein Prozessor mit 16Mhz laufen kann, du aber nichts besonders 
damit vorhast, dann kann es durchaus sinnvoll sein den langsamer laufen 
zu lassen. .-)

Olaf

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren