PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ATmega8 gleichzeitig I²C Master und Slave?



teamohnename
22.02.2012, 16:37
Hallo an alle,
wir haben einen I2C Sensor, der mit der von uns verwendeten I2C Library nicht kompatibel ist (anscheinend aber mit der Library von Peter Fleury), deshalb müssen wir, da wir ohne weiteres jetzt keine neue I2C Library auf unserem Master verwenden können, irgendwie die beiden Librarys zusammenfügen - über einen extra Mikrocontroller.
Dazu muss der Mikrocontroller aber gleichzeitig I2C Master und I2C Slave sein (Master, um den Sensor auszulesen, Slave, um von unserem Roboter (dem Master), der den Sensor so nicht ,,versteht", ausgelesen werden zu können).
Wie macht man sowas? Man würde ja zwei verschiedene Librarys brauchen, eine, die das Hardware I2C des ATmegas ansteuert und eine Library, die I2C emuliert... Oder sehe ich das komplett falsch?
Wäre es eventuell einfacher, den Sensor via I2C auszulesen (den neuen ATmega8 also als I2C Master zu konfigurieren) und den ATmega8 wiederum als SPI Slave zu konfigurieren, der dann von unserem Roboter (RP6 M32 Platine, also mit ATmega32) auch via SPI ausgelesen werden kann? Dann bräuchten wir aber eine fertige SPI Slave Library, da wir bis jetzt nur wenig Erfahrung mit SPI haben...
Vielen Dank für Eure Hilfe und
Viele Grüße
teamohnename

Kampi
22.02.2012, 16:52
Also Master und Slave in einem Chip ist recht kompliziert. Du musst die Master Operation implementieren um den Sensor auszulesen und dann musst du einen Buffer anlegen den der Slave auslesen kann.
Wäre es da nicht einfach den Roboter zum Slave zu machen und der Chip zwischen Sensor und Roboter ist Master und ließt erst den Sensor aus und schickt es dann zum Robi?

teamohnename
22.02.2012, 17:35
Wenn wir den Roboter zum Slave machen würden, müssten wir auch wieder extrem viel umschreiben. Dann könnten wir außerdem auch den momentanen Master weglassen, da dieser überflüssig wäre...
Trotzdem erstmal danke.

markusj
22.02.2012, 17:46
Das klingt alles nach Murks. Entweder ihr macht korrektes I2C und dann solltet ihr auch mit besagtem Sensor "reden" können, oder ihr habt irgendwo Fehler drinne die besagten Sensor stören. Wie dem auch sei, wenn eure Lib mit mehreren Mastern am Bus zurecht kommt, ist das überhaupt kein Problem (vorausgesetzt die Fleury-Lib ist Multi-Master-fähig). Es kann halt immer nur genau einen Master am Bus geben, konkurrierende Zugriffe kann man aber entsprechend der Protokollspezifikation erkennen.

mfG
Markus

teamohnename
22.02.2012, 18:01
Hi markusj,
die Idee kommt daher, weil das hier (https://www.roboternetz.de/community/threads/56861-Frage-zu-RP6-I2C-Library-Funktionen-der-Lib-von-Peter-Fleury) alles nicht geklappt hat...
Vielleicht kannst Du Dir das ja auch nochmal kurz durchlesen, vielleicht hast Du ja noch eine Idee, warum das Auslesen dort nicht funktioniert...
Sonst ist das auch egal. Vielleicht kommen wir an einen Logic Analyzer, dann gucken wir uns das darüber nochmal an.
Danke und
Viele Grüße
teamohnename

markusj
22.02.2012, 18:32
Naja, offenbar wickelt die RP6-Lib das I²C-Protokoll nicht so ab wie vom Sensor gewünscht. Habt ihr Mal versucht rauszukriegen, welche Schritte genau die RP6-Lib durchführt, auf diesem Weg müsstet ihr eigentlich rauskriegen können, wo noch was fehlt. Vorraussetzung dafür ist natürlich, dass ihr euch in das TWI-Modul des verbauten AVRs und das I²C-Protokoll einarbeitet.

mfG
Markus

Chypsylon
22.02.2012, 19:23
Alternativ wäre auch möglich das ihr mit dem Slave-Prozessor über den UART (also einfach serielle schnittstelle) bzw. über SPI kommuniziert...

rolber
22.02.2012, 20:05
Hallo !

Ich habe da noch im Hinterkopf, dass es so etwas wie Multi - Master Betrieb bei I2C gibt.
Damit müsste Euer Problem zu lösen sein.

Roland

Kampi
22.02.2012, 20:31
Hallo !

Ich habe da noch im Hinterkopf, dass es so etwas wie Multi - Master Betrieb bei I2C gibt.



Jap gibt es :)