-         

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

Thema: I2cslave

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    22.01.2005
    Beiträge
    23

    I2cslave

    Anzeige

    Hat hier schon mal jemand mit I2Cslave zu tun gehabt ?
    Ich möchte mehrere M8 am I²C anbinden. Alle, außer der Master, sind permanent mit Int0 und Int1 zeitlich fast voll ausgelastet. Ist der I²C Bus an bestimmte Zeiten gebunden (wie zb. RS232)?
    Gibt bestimmte Strukturen an die ich mich bei der Programmierung halten sollte oder ist die Datenabfrage und Adressierung willkürlich.

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    Du kannst Dir ja mal TWI angucken, wenns per Hardware geht, muss man eigentlich nur warten bis ein Byte über I2C eintrifft, und anhand des Wertes entscheiden wie's weitergehen soll.

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    30.12.2005
    Ort
    Tann / ZH
    Alter
    61
    Beiträge
    264
    Was wichtig ist, es sollten nicht mehere Geräte gleichzeitig auf den Bus zugreiffen (Buskollision). D.h. der Master sendet Daten und gibt den Bus wieder frei. Der Slave der angesprochen ist übernimmt kurz die Kontrolle
    über den Bus und sendet seine Antwort. Danach gibt er den Bus sofort
    wieder frei. Alle anderen Slaves halten sich still und lauschen ob ein
    Kommando für sie kommt, dürfen aber in dieser Zeit nicht aktiv auf den
    Bus zugreifen. Der Bus muss mit 2 Pullup-Widerständen gegen Plus
    versehen werden.

    ---> Wicki IIC
    MfG
    Ruedi

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    22.01.2005
    Beiträge
    23
    Danke schon mal.
    Das heißt die Multimaster Funktion ist wegen der Buskollision nicht zu empfehlen?
    Das Programm soll folgendermaßen ablaufen. Der Master füttert alle slave mit Daten und aufgaben nacheinander. Danach gibt er für alle 4? ein Startschuss worauf hin alle gleichzeitig Ihre arbeit beginnen. Im Anschluss gibt jeder Slave sein redy und sein Ergebnis zurück.
    Ist das überhaupt möglich über I²C mehrere Slave gleichzeitig anzusprechen(Startschuss) oder sollte ich doch eher ein parallelen Bus verwenden ?
    Mfg Sven

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    22.03.2005
    Beiträge
    91
    Hallo Sven,

    mit I2C habe ich bisher noch keine Erfahrung gesammelt. Aber ich mache gerade sowas ähnliches und verwende dazu den SPI-Bus, gut ich brauche noch eine CS Leitung, aber es klappt gut. Für den gemeinsamen Start der Controller nehme ich allerdings noch eine separate Leitung, da die unabhängig vom Bus sein soll, ON/Off. Daten laufen alle über den SPI.
    Vielleicht wäre das ja auch eine Möglichkeit für dich den SPI zu verwenden...


    Gruß

    Sven

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    22.01.2005
    Beiträge
    23
    Kurz aus MOSI,MISO,SCK,SS+ACK machst du ein gemischten Bus . Das ist auch ne Möglichkeit an die ich schon gedacht hab. Wie läuft es dann mit dem Programmieren? Nimmst du dazu den Bus jedes mal auseinander oder kannst du MOSI,MISO,SCK parallel betreiben?
    Ich hab grad gelesen das der I²C Bus Timer0 und Int0 benutzt, was bei meinem Projekt überhaupt nicht geht. Dann bleibt mir wahrscheinlich doch nichts anderes übrig als ein 4 Bit Parallel Bus zu bauen und zu Programmieren.

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    30.12.2005
    Ort
    Tann / ZH
    Alter
    61
    Beiträge
    264
    Wenn Du grössere Distanzen überbrücken willst, so empfehle ich Dir
    den RS-485 er Bus.
    Allerdings einen seriellen Bus wo alle Slave ***gleichzeitig*** lossenden und du dann noch vernünftige Resultate hast, den gibt es nicht.

    Wieso müssen die alle **gleichzeitig** ihre Daten zum master
    zurücksenden ?
    MfG
    Ruedi

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    22.01.2005
    Beiträge
    23
    @ruediw
    andersrum der Master füttert die Slave nacheinander mit einer menge Daten und danach gibt er für alle slave gleichzeitig den Startbefehl.
    Danach müssen die Slave sich zurückmelden, was zeitversetzt und eher selten gleichzeitig passiert, was zeitlich auch nicht unbedingt relevant ist. Die Rückmeldung erfolgt unter anderen auch mal an einen Slave (deswegen Multimaster)
    Distanzen habe ich nur wenige cm.

    Was ich vielleicht noch nicht so richtig klar gestellt habe ist folgendes. Die „Slave“ sind zeitlich voll ausgelastet und dürfen während ihrer eigentlichen arbeit nicht durch irgendwelche Protokoll Tätigkeiten behindert werden. Erst nach ihrer arbeit dürfen sie wieder am BUS teilnehmen.
    Ich glaube auch ehrlich nicht mehr das mit irgend einem seriellen Bus geht.

    Gruß
    Sven

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    03.09.2004
    Ort
    Darmstadt
    Alter
    47
    Beiträge
    166
    der Master füttert die Slave nacheinander mit einer menge Daten und danach gibt er für alle slave gleichzeitig den Startbefehl.
    Soweit sollte es funktionieren. Den Startbefehl an alle könnte man per General Call schicken. Dazu werden Daten an die reservierte Adresse 0x00 gesendet, auf die alle Slaves hören sollten.
    Danach müssen die Slave sich zurückmelden, was zeitversetzt und eher selten gleichzeitig passiert
    Das geht m.E. nicht, weil es bedeutet, dass die Slaves aktiv senden müssen und damit zum Master werden. Dann hättest Du ein Multi-Master-System, was Du ja vermeiden wolltest.
    --> Die Slaves dürfen sich nicht aktiv zurückmelden, sondern müssen warten, bis sie gefragt werden. Der Master muss sie pollen, d.h., er muss die Slaves zyklisch abfragen, bis sie eine Antwort senden. Ist ein Slave noch beschäftigt, könnte er den TWI-Interrupt deaktivieren. Der Master würde dann wahrscheinlich ein Timeout bekommen - müsste man ausprobieren.
    Soll kein Polling stattfinden, muss man sich einen anderen Weg ausdenken, wie die Slaves dem Master mitteilen können, dass sie fertig sind. Z.B über spezielle Interrupt-Leitungen...

    Gruß, Achim.

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    22.01.2005
    Beiträge
    23
    @ Achim
    Den TWI-Interrupt zeitweise zu deaktivieren ist die denkbar einfachste und beste Lösung.

    Ist es möglich, dass ich alle µC zu Slave´s deklariere und Sie nur dann zum Master „um Programmiere“ wen Sie was zu sagen haben UND SCL kein Takt mehr hat? Das würde doch eine Buskollision zu 99% ausschließen weil einfach kein Bus mehr da ist oder?
    Achso zum Multimaster,,, ich hab nichts dagegen aber bis jetzt keine brauchbaren Quellen gefunden wie er aufgebaut ist.

    Gruß Sven

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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