PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : I2C Geschwindigkeit in Laufzeit variieren



msfuture
07.09.2008, 15:58
Hallo zusammen,

stehe momentan vor dem Problem, dass ich an meinem ATMEGA16 drei I2C chips mit unterschiedlichen Geschindigkeiten habe. Der EEPROM arbeitet mit 400 kHz, der 16-bit-port-expander mit 800 kHz und die neue Echtzeit-Funkuhr mit 100 kHz... bisher habe ich den Hardware-TWI-Bus einfach auf 400000 laufen lassen und hingenommen, dass eben der Portexpander etwas langweiliger läuft... mit der Uhr müsste ich aber dann auf 100 khZ runter, was mir für den EEPROM dann schon etwas zu langsam wird... Daher die Frage:

kann ich den Befehl

Config Twi = 800000

auch einfach vor jeder Übertragung ausführen und somit jedes mal eine andere Taktrate bestimmen oder wie umgehe ich das problem mit der Echtzeituhr?

danke schonmal

msfuture

uwegw
07.09.2008, 16:07
Ausprobieren, ob Bascom das zulässt. Von der Hardware her ist es eigentlich kein Problem, wenn sichergestellt ist, dass dabei Ruhe auf dem Bus herrscht.

msfuture
07.09.2008, 16:12
Also Bascom lässt das zu, ich werds mal versuchen sobald die Uhr da ist ob die dann antwortet (also ob Bascom das letztendlich auch wirklich übersetzt oder einfach ignoriert)...
Ruhe sollte auf jeden Fall herrschen, der ATMEGA ist der einzige Master auf dem Bus.

linux_80
07.09.2008, 17:10
Hallo,
in der Bascomhilfe steht bei Config TWI: "Reuseable: Yes", also spricht nix dagegen.

Evtl. etwas Pause einplanen nach dem Geschwindigkeitswechsel, damit die langsamen Slaves eine Ruhephase haben vor dem nächsten Start. Musst Du aber ausprobieren.

Jaecko
07.09.2008, 17:19
Könnt mich zwar jetzt täuschen, aber gibts da nicht eh was wie "clock stretching", bei dem die langsameren Slaves den Bus einfach auf ihre Geschwindigkeit bremsen?

linux_80
07.09.2008, 17:27
Das clock stretching, bezieht sich aber nur auf die Zeit zwischen den einzelnen Bytes. Wenn ein Slave allg. zu langsam ist, bekommt der die Startsequenz schon garnicht mit !