-         

Ergebnis 1 bis 10 von 10

Thema: I²C - Datenverkehr

  1. #1
    Erfahrener Benutzer Roboter Experte Avatar von ikarus_177
    Registriert seit
    31.12.2007
    Ort
    Grein
    Alter
    24
    Beiträge
    601

    I²C - Datenverkehr

    Anzeige

    Hi,

    da ich für meinen neuen Bot mehrere Atmegas verwenden will und diese auch untereinander kommunizieren müssen, hab ich mich mal ein wenig informiert, und bin auf den I²C - Bus gestoßen.

    Nun, gibt es ja diese tolle Bascom Hilfe, die leider in Englisch ist, und da mein Englisch (noch) nicht das Beste ist, glaube ich, ich hab da was missverstanden.

    So wie ich das sehe, werden im Code, der auf dem Master läuft, die Adressen der Slave - Controller definiert. Mit diesen Adressen kann ich dann mit I2CSEND irgendwelche Daten an den bestimmten Controller schicken.

    Den entsprechenden Empfangs - Befehl für den Slave-Controller glaube ich in I2CRECEIVE gefunden zu haben. So weit so gut. Wenn ich nun Daten vom Master empfangen will, muss ich dann einfach diesen Befehl ausführen lassen, und er gibt mir die Daten in eine Variable? Wenn der Befehl ausgeführt wird, und es kommen keine Daten vom Master, bleibt das Programm dann an dieser Stelle stehen, bis der Master ein Signal sendet?

    Die Rückmeldung erfolgt (meines Erachtens) ebenfalls über I2CSEND. In der Bascom-Hilfe steht aber dazu, dass dieser Befehl zum Senden von Daten an SLAVES gut sein soll. Oder muss ich dann nur die Adresse des Masters angeben?

    Und wie wissen die Slaves und der Master, welche Adressen sie überhaupt haben? Werden die per Fusebits eingestellt?

    Fragen über Fragen


    Viele Grüße
    ikarus_177


    EDIT: ok, also das mit Senden und Empfangen hab ich jetzt hingekriegt, unklar ist mir aber weiterhin, wie die einzelnen AVR´s ihre eigenen Adressen mitgeteilt bekommen, das sie also wissen, dass sie angesprochen werden.

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    09.05.2007
    Beiträge
    202
    Hallo,

    schau mal hier: http://www.roboternetz.de/phpBB2/viewtopic.php?t=39120

    Ich denke, das sollte die Meisten deiner Fragen beantworten.
    Gruß, Stefan

  3. #3
    Erfahrener Benutzer Roboter Experte Avatar von ikarus_177
    Registriert seit
    31.12.2007
    Ort
    Grein
    Alter
    24
    Beiträge
    601
    Hi,

    danke für deine Antwort.

    Also unterscheidet sich der Code am Slave bei den Definitionen nur um die Zeile "Const Slaveid = &H82" (oder irgeneine andere Adresse) vom Code des Masters?

    Viele Grüße
    ikarus_177

  4. #4
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Nicht nur. Damit legt man am Slave seine Adresse fest. Damit die TWI-Hardware auch darauf reagiert, muß man das noch "enablen"
    --->
    http://www.roboternetz.de/wissen/ind...xis#Receiver_2
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  5. #5
    Erfahrener Benutzer Roboter Experte Avatar von ikarus_177
    Registriert seit
    31.12.2007
    Ort
    Grein
    Alter
    24
    Beiträge
    601
    Damit die TWI-Hardware auch darauf reagiert, muß man das noch "enablen"
    Ich denke mal, es sind die Zeilen "Declare Sub Twi_init_slave" und "Call Twi_init_slave"?

    Laut Bascom-Hilfe sind TWI und I²C ja ein und dasselbe. Das heißt, ich kann beide "Befehlsarten" vermischen (die I²C-Befehle mit den TWI-Befehlen)?


    Viele Grüße
    ikarus_177

  6. #6
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    ..denke mal, es sind die Zeilen..
    Im Prinzip möglich, ich kenne diese Sub's nicht, die sind ja, glaub ich, in der kostenpflichtigen extra-Library von Bascom.

    However: I2C und TWI sind dzt. tatsächlich identisch.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    09.05.2007
    Beiträge
    202
    Hallo ikarus_177,

    der Master kann die Bascom-internen Funktionen verwenden (I2CSend u. s. w.). Wenn du einen Slave programmieren willst kannst du entweder die kostenpflichtige Library von Bascom verwenden oder du verwendest die TWI_Init_slave aus meinem Beispiel. Allerdings ist es damit noch nicht getan. Du musst in einer Endlosschleife abfragen, ob Bytes vom Master angekommen sind und die dann dementsprechend weiterverarbeiten. Ein Beispiel findest du auch in meinem Beispielcode (zwischen Do ... Loop). Aber beachte bitte, dass der Slave für das Beispiel die hardwareseitig festgelegten SDA- und SCL-Pins verwenden muss. Mein Beispiel beruht übrigens auch auf den Artikel aus der Roboternetz-Wiki.
    Gruß, Stefan

  8. #8
    Erfahrener Benutzer Roboter Experte Avatar von ikarus_177
    Registriert seit
    31.12.2007
    Ort
    Grein
    Alter
    24
    Beiträge
    601
    Hi,

    danke für die Hilfe!

    ich glaube, ich habs endlich überissen.

    Viele Grüße
    ikarus_177

  9. #9
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    33
    Beiträge
    2.410
    pass bitte auf das die SlaveIDs all gerade/ungerade sind (ich weis es grade nicht) denn das register was du beschreibst hat 8 bit und das niederwertigste bit stellt eine art flag dar ob broadcasts empfangen werden oder nicht leider weis ich grad nicht ob es 0 oder 1 sein soll, bzw. liess es nochmal im datenblatt deiner controller nach und stell dich darauf ein (PS die datenblätter der controller beinhalten immer eine SEHR ausführliche anleitung und auch programmbeispiele in basic/bascom und C)

  10. #10
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    In der üblichen Darstellung sind die Adressen sind immer gerade.

    Setzt man dann "SlaveId = adresse + 1", werden auch die GCA (Broadcasts) empfangen.

    (Ein Broadcast ist eine Message mit Adresse = 0)
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

Berechtigungen

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