-
        

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 13

Thema: 2 getrennte I2C-Interfaces an einem MEGA8 ?

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    09.10.2005
    Beiträge
    17

    2 getrennte I2C-Interfaces an einem MEGA8 ?

    Anzeige

    Hallo,

    nachdem ich nun endlich meinen I2C-Slave zum Laufen bekommen habe (mit Hilfe dieses Thread's hier: http://www.roboternetz.de/phpBB2/viewtopic.php?t=15715) wollte ich gern wissen, ob man die Zuordnung der Pin's SLA & SLC auch während eines Laufenden Programms ändern kann.
    (z.B. mit Config Sda = Portc.4

    Hintergrund: Ich möchte einen Mega8 als I2C-Master einsetzen, der von einem oder mehreren Mega8 (I2C-Slaves) Daten abfragt, oder Steuerbefehle sendet.
    An den Slaves wiederum ist zum einen der Master-Mega8 angeschlossen, zum anderen sollen an den Slaves aber auch I2C-Sensoren angeschlossen werden (z.B. DS1621). Beide I2C-Schnittstellen sollen am Slave voneinander getrennt sein.

    D.h. am Slave müsste ich je 2 Port-Pins für SLA/SLC verwenden.
    Da die I2C-Befehle jedoch nicht unterscheiden, an welchem Port sie Daten senden oder empfangen sollen, müsste ich zur Laufzeit des Programms die Zuordnung von SLA & SLC ändern können. Mit den o.g Config-Befehl müsste sowas ja gehen. Aber haben diese Befehle auch Auswirkungen während der Laufzeit, oder nutzt sie nur der Compiler nur zur einmaligen Einstellung. Gibt es dafür ggf. eine andere, alternative Vorgehensweise?

    Vielen Dank!
    Gruß,
    Ulf

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.07.2004
    Ort
    Mammendorf
    Alter
    61
    Beiträge
    1.058
    Ansonsten das Umkonfigurieren einfach als kleine Assembler-Routine in deinem Basic-kode einfügen. Da muß ja nur sehr wenig gemacht werden! Ich würde dabei auch gleich die Adresse ändern um so doppelt sicherzustellen das der mega8 nach der Umstellung richtig reagiert!
    MfG

    Hellmut

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    30.12.2005
    Ort
    Tann / ZH
    Alter
    61
    Beiträge
    264
    Vieleicht wäre RS-485 eine Alternative ?
    MfG
    Ruedi

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    Darf man fragen warum der Bus getrennt werden soll,
    der Vorteil von I2C ist doch das man alles an die gleichen Kabel hängen kann.

    Ein weiterer Vorteil mit einem µC ist, das dieser Master und Slave gleichzeitig sein kann, bzw. man initialisiert ihn als Slave, und wenn der µC was will, sendet er eine Starbedingung, und ist ab da Master. Nach der Stopbedingung ist der µC wieder Slave.

    Das trifft aber nur zu, wenn man TWI benutzt, also die Hardwarelösung (SCL/SCA-Pins festgelegt), bei Softwarelösungen kommts drauf an wie's ausgeführt ist.

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.07.2004
    Ort
    Mammendorf
    Alter
    61
    Beiträge
    1.058
    Hallo linux_80

    Es gibt mehrere Gründe warum es sinnvoll sein kann den I2C bus aufzutrennen:

    1. Die zu überbrückende Länge ist zu groß
    2. Der erwartete Traffic wird zu groß
    3. Reaktionszeiten können kritisch sein wenn zu viele sich den Bus teilen
    MfG

    Hellmut

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    30.12.2005
    Ort
    Tann / ZH
    Alter
    61
    Beiträge
    264
    Wenn die Länge zu gross wird, wäre das eigendlich eine
    klassiche Anwendung für RS485...
    MfG
    Ruedi

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.07.2004
    Ort
    Mammendorf
    Alter
    61
    Beiträge
    1.058
    Hallo Ruedi

    Wenn die Länge wesentlich länger ist hast du recht. Bei mir geht es darum statt der circa 80cm längen bis 150cm zu erreichen. Da muß man nicht gleich voll neu umstricken! Übrigens gibt es auch den "CAN-Bus" wie er im Automobil Bereich angewendet wird!
    MfG

    Hellmut

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    09.10.2005
    Beiträge
    17
    Hallo,

    erstmal vielen Dank für die Antworten.
    Da ich in der I2C-Bus-Specification (siehe: http://www.esacademy.com/faq/i2c/I2C...cification.pdf ) leider keine konkreten Angaben über die max. möglichen Kabellängen gefunden habe, vermute ich aber anhand der Bemerkung von "Hellmut", daß ich mit meiner Planung voll daneben liege (Kabellänge ~150cm ?)
    Ich hatte nämlich vor, das Ganze als Bussystem für ein Einfamilienhaus zu verwenden, indem unten (Keller oder Hauswirtschaftsraum) der MASTER die SLAVES in den einzelnen Zimmern steuert, wobei die Slaves selbst Daten sammeln (z.B. Temperatur, oder den Zustand eines PIR-Sensors), aber auch Steuerbefehle erhalten können (z.B. Licht ein/aus, Rollladen rauf runter).
    RS485 als Stromschnittstelle wäre da sicher unkritisch (was die Kabellänge betrifft), soweit ich weiß ist RS485 aber nicht so ohne weiteres "busfähig" oder ?? Vom Datendurchsatz ist meine Anwendung eher unkritisch, da eh nur ein paar Byte hin- und hergehen.
    Gibt es dafür irgendwo eine App-Note (incl. der erforderlichen Hardware)?

    Ansonsten würde mich aber dennoch ein Beispiel (Code ?) interessieren, ob und wie man die Zuordnung der SLA/SLC-Pins zur Laufzeit ändern kann. Zum Beispiel für die Anwendung: SLAVE fragt via I2C einen DS1621 ab und der MASTER fragt zyklisch den Temp-Wert vom Slave ab.
    Hier wäre ja am SLAVE zwei mal ein I2C-Interface zu realisieren!

    Danke & Gruß,
    Ulf

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    30.10.2005
    Ort
    Mönchengladbach
    Alter
    47
    Beiträge
    114
    Ich programmiere in C und kann dir deshalb zu dem zweite I2C unter Bascom nichts sagen (ausser das ich mich gerade frage, ob es eine brauchbare Lib für einen Software I2C gibt).

    Bei deinem Anwendungsfall würde ich mir über die Kabellänge mal nicht so viel Gedanken machen. Je länger die Leitung desto geringer die erzielbare Übertragungsrate. Sie sollte aber trotzdem noch über dem liegen, was du benötigst. Und wenn du einmal raus hast, wie man einen Atmega mit einer zweiten I2C Schnittstelle austattet, kannst du dir natürlich auch einen Repeater bauen (da würde eigentlich auch eine Transistorschaltung reichen). Ich denke, damit fährst Du unter dem Strich günstiger als wenn du anfängst mit CAN oder RS485 zu hantieren.

    Gruß,
    Xanadu

  10. #10
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    Für RS485 braucht man noch etwas Zusatzhardware, welche von RS232 auf RS485 konvertiert. dazu gibts aber was im Wiki -> RS485

    @Xanadu
    hier gibts eine für i2C-Master von Peter Fleury
    http://jump.to/fleury
    unter AVR software

    Software-I2C-Slave ist ein wenig umfangreicher, weswegen auch bei Bascom ein paar Rubel dafür ausgegeben werden müssen.

    Wenn möglich sollte man immer die Hardware verwenden, einfacher gehts ned, braucht auch weniger Programmplatz.

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •