Forum: Mikrocontroller und Digitale Elektronik Software I2c oder Hardware I2c


von Axel (Gast)


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

von Bernd R. (Firma: Promaxx.net) (bigwumpus)


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.

von Michael L. (michaelx)


Lesenswert?

Bei einem Soft-I2C-Master wird musst du wohl oder übel die Routinen in 
Assembler schreiben, sonst wird das mit der Frequenz eher ein Ratespiel.

von Olaf (Gast)


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

von Jörg S. (joerg-s)


Lesenswert?

Michael L. schrieb:
> Bei einem Soft-I2C-Master wird musst du wohl oder übel die Routinen in
> Assembler schreiben, sonst wird das mit der Frequenz eher ein Ratespiel.
Und? Das schöne an I2C ist doch gerade das man nicht zwingend mit einer 
bestimmten Frequenz senden muss.

von Axel (Gast)


Lesenswert?

Hallo zusammen!

Danke schon mal für eure Antworten, dann werde ich wohl es erst mal mit 
dem Hardware I2C versuchen, wenn das nicht klappt, kann ich es ja immer 
noch über den Software I2C versuchen.

Wenn ich noch fragen habe, melde ich mich einfach nochmal ;-)

Gruß

Axel

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.