- LiTime Speicher und Akkus         
Ergebnis 1 bis 4 von 4

Thema: I2C-"Netzwerk" mit ATMega8... noch unklares...

  1. #1
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    41
    Beiträge
    2.009

    I2C-"Netzwerk" mit ATMega8... noch unklares...

    Anzeige

    Praxistest und DIY Projekte
    Moin.

    Da die einzelnen Geräte mit nem ATMega8 immer mehr werden und diese letztendlich doch mal alle gemeinsam gesteuert werden sollen, wollte ich diese nun über den I2C-Bus verbinden. Geplant ist, dass alle Geräte als Slaves arbeiten und dann ein ATMega8 allein die Aufgabe des Masters übernimmt.

    Hab zwar schon mal nach Infos gesucht, aber trotzdem gibts da noch einige Punkte, bei denen ich noch nicht ganz 100% sicher bin. Darum mal hier die unklaren Punkte.

    #1) I2CSlave Library: "Works for 2313,2323, 2333,2343,4433, tiny22, tiny12, tiny15 and M8. Other AVR chips have build in hardware for I2C."
    Geh ich richtig, dass M8 dort den ATMega8 bezeichnet und somit für einen Slave diese Library benötigt wird, bei einem ATmega16 aber nicht?

    #2) Soweit klar, dass ein Slave nicht von sich aus senden kann. Wenn nun Slave 2 an Slave 4 etwas senden will, muss der Master die Daten also von S2 auslesen und danach an S4 weiterleiten... ?

    #3) Aus einem Codebeispiel weiss ich, dass man mit dem Folgenden Code (für Master) einen Slave abfragen kann...

    Code:
    I2cstart
    I2cwbyte ICaddress
    I2crbyte Bytetoread, Ack
    I2crbyte Bytetoread, Nack
    I2cstop
    Aber wie sieht hierzu dann im Slave das Gegenstück des Codes aus?

    MfG
    S.C

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    16.07.2006
    Alter
    51
    Beiträge
    23

    Re: I2C-"Netzwerk" mit ATMega8... noch unklares...

    Hallo Jaecko,

    ich komme zwar aus der C-Ecke, aber ich probiers mal.

    Ob ein AVR TWI Hardware-mässig unterstützt, musst Du in den Datenblättern nachschauen. Der Mega8 unterstützt TWI auf jeden Fall(in HW).

    In einem TWI-Bus kann ein Slave auf keinen Fall senden! Es wäre zwar möglich, dass er einfach wartet bis er vom Master abgefragt wird, und dieser es dann an den 2. Slave weitergibt. Aber hier ist MultiMaster auf jeden Fall die bessere Lösung.

    Es gibt ein Wiki dazu auf roboternetz. Wenn mich nicht alles täuscht sogar ein Beispiel in Bascom für Multimaster.

    An einem TWI-Bus gibt es zur gleichen Zeit immer nur einen Master. Wenn es ein Multimaster-Bus ist, und 2 gleichzeitig Master werden wollen, gibt es ein Verfahren(Arbitation) wodurch einer gewinnt und Master wird und der andere zum Slave wird(oder sollte).

    Beschäftige Dich mal mit dem Wiki, und schreibe hier einfach wenn Du noch fragen hast.

    cu

    Martin

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    41
    Beiträge
    2.009
    Sodele... hab mich mal mit der TWI-Praxis beschäftigt und die dort enthaltenen Codes aussortiert und in eine .bas zusammengefügt (im Anhang als twicomm.bas; nicht kopiert, sondern abgeschrieben, um die Funktion zu verstehen).

    Versteh ich das nun mit den Befehlen so richtig:

    Master will ein Zeichen an Slave senden:
    CALL TWI_Send_Byte(Slave-Adresse, Byte)
    Die im Slave empfangenen Daten können dann aus TWDR abgerufen werden.

    Master soll Zeichen von Slave holen:
    Daten = TWI_Read_Byte(Slave-Adresse)
    Die Daten, die dann hiermit abgeholt werden, müssen im Slave im Register TWDR liegen....


    Gibts denn irgendwie noch ne möglichkeit, die TWI-Kommunikation in Bascom zu testen oder muss ma da dann direkt gleich die AVRs füttern?


    Edit: Anhang aus Platzgründen entfernt
    #ifndef MfG
    #define MfG

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Beiträge
    2.731
    Hallo,
    im Prinzip stimmt das schon so mit dem TWDR, aber es ist nicht ganz so einfach, der Slave hat etwas mehr zu tun als nur das Byte auszulesen.
    Ein Beispiel für eine Slave gibts aber auch im Wiki.

    Hier im letzten Beitrag ist auch noch eine etwas umfangreichere Version für den Slave:
    https://www.roboternetz.de/phpBB2/viewtopic.php?t=15715

Berechtigungen

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

LiFePO4 Speicher Test