-
        

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

Thema: Hilfe bei TWI

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    08.07.2008
    Beiträge
    49

    Hilfe bei TWI

    Anzeige

    Guten Tag,

    ich habe folgendes Problem:
    Ich möchte eine TWI Verbindung zwischen 2 bis 7 µC aufbauen wo über einen bestimmten Kontroller bestimmte Daten zu den anderen µC (1 bis 6) gesendet werden. Diese sollen die Daten erkennen, vergleichen und dann darauf antworten.

    Ist dies mit dem Normalen Master Slave Betrieb möglich?

    Oder geht diese nur im Multimaster Betrieb?

    Die Berichte im Wiki hab ich gelesen bin aber nicht viel schlauer daraus geworden....

    MfG Dämmi

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Wenn nur einer das große Wort führt und die anderen nur was tun, wenn sie gefragt werden, reicht "normaler" Master-Slave Betrieb völlig. Is ja auch so bei den Port expandern und div. Sensoren.
    Multimaster brauchst du nur dann, wenn einer der "slaves" von SICH AUS auf die Idee kommt, er müsse den anderen µC's jetzt sofort was erzählen
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    08.07.2008
    Beiträge
    49
    Hi danke für die Antwort

    Also meine Idee war diese es gibt einen Master und max 6 Slave.

    Der Master schickt ein befehl an die Slaves das diese in einen besonderen Modus gehen sollen. Jetzt kann an den Slaves bestimmte inputs auf High gesetzt werden und der Slave sendet ein bestimmtes Byte an den Master der Speichert diesen ab. Wenn der Anwender genug Bytes gespeichert hatt setzt er ein Input am Master auf High und lässt alle Slaves aus den besonderen Modus gehen.

    Ich habe die Vorlagen für Slave Receiver und Transmitter unter TWI Praxis in 1 Funktion und 1 Unterprogramm geschrieben. Jetzt wird Unterprogramm fürs Empfangen beim Master immer wieder durchgelaufen und nur wenn ein Input gesetzt wird soll er die funktion fürs senden aufrufen.
    Der Master ist dann ja nur im Empfang Modus. Aber dieser empfängt nun auch Signale wenn der Slave auch Signale empfangen soll...

    Hm kann leider keinen Code Schicken sitz grade in der Firma und ich müsste diesen noch einmal neu Schreiben reiche ihn heute Nachmittag nach.

    Ich hoffe mir kann geholfen werden.....

    Noch mals Danke
    MfG dämmi

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    08.07.2008
    Beiträge
    49
    Hi,

    Also bin nun schon ein Stück weiter daher habe ich auch meinen Code nicht beigefügt weil dieser nun schon erweitert wurde und ich glaube das Problehm im grunde gelöst zu haben.

    Aber eine frage habe ich noch...

    Immer wenn mehrere Slaves mit unterschiedlichen Adressen Bytes an den Master senden wollen und der Master die Adressen nach und nach abfragt gibt es bei mir fehler. Kann man das überhaubt so machen und ist das Normal das es dann fehler gibt oder soll ich meinen jetztigen Code mal anhängen?

    Danke für jede Hilfe

    mfg dämmi

  5. #5
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Wenn mehrere Teilnehmer einfach irgendwann gegenseitig was senden wollen, sind "collisions" (BusLost) immer möglich.

    http://www.roboternetz.de/wissen/ind...ster#Konflikte
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    08.07.2008
    Beiträge
    49
    Hi danke für die schnelle Antwort.

    Also wenn ich das nun so richtig verstehe ist das was ich vorhabe doch nur mit dem Multimaster möglich?

    Also im Prinzip will ich nichts anderes als ein Master an 6 Slaves ein befehl schickt. Wenn die Slaves den Befehl erhalten haben soll über eine tasteingabe an den Slaves Bytes in einen Zwischenspeicher glegt werden. Wenn nun wieder ein Befehl an die Slaves geht sollen diese die im Zwichenspeicher liegenden Bytes hintereinander zum Master senden bzw der master soll diese abrufen.

    Das klappt bei mir auch alles leider nur mit einem angeschloßenen Slave...
    Sobald 2 Slaves angeschloßen sind bleibt das Prog stehen wenn der Master die Daten wieder abholen soll....

    mfg dämmi

  7. #7
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Ich glaub', du denkst zu kompliziert

    In deinem Fall gehst du am besten von EINEM Master aus.
    1) Der sendet an seine Slaves mit Master-WRITE ein Byte, das den Modus dieser Slaves bestimmt.
    d.h. dieses Kontrollbyte kriegen sie einfach irgendwann auf's Auge gedrückt.
    2) Der holt von seinen Slaves mit Master-READ die Zwischen-Speicher-Bytes ab.

    Beides kann er mit den stink-normalen Bascom I2c-Funktionen machen.

    Die Slaves machen zwei Sachen:
    1) je nach dem gerade aktuellen Kontroll-BYte kümmern sie sich um Tasten oder sonstwas
    2) Sie lauschen am I2C Bus, dabei kommen zwei Status-Varianten:
    2 a) Slave Receive: es kommt ein neues Kontroll-Byte
    2 b) Slave Transmit: sie schicken ihre Datenbytes
    Das geht am lockersten wohl mit der TWI-Interrupt Funktion, da haben sie die Hände frei für 1)

    Konflikte und Reibereien am Bus kann es da nicht geben
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    08.07.2008
    Beiträge
    49
    Danke für die Antwort,

    Also so wie du es beschrieben hast wollte ich das auch machen..... klappt nur nicht ^^ also doch überlegung richtig also mus dann ja der Code falsch sein. Dieser ist nun aber schon sehr lang im Atmega32 18% beim Master.

    Also schreibe ich einfach ma Code Auszüge wo es Probleme macht.

    Master:

    Ersoll an einer stelle allen Slaves hintereinander den befehl geben den Status zu Wechseln das macht ich so:

    Code:
    i2cstart
    i2cwbyte &h40
    i2cwbyte &h09
    i2cstop
    
    waitms 1
    
    i2cstart
    i2cwbyte &h41
    i2cwbyte &h09
    i2cstop
    
    usw.....
    und die Slaves laufen einfach die Slave Receiver routine aus dem TWI Praxis durch und sollen auf das ankommene Signal reagieren.

    Nur bei 2 Slaves gehts nicht der erste Slave bekommt den Befehl noch der 2 nicht mehr.....

    So das als erster Fehler, wenn das Klappt können wir bzw ich ja weiter schauen.

    Danke für die großartige Hilfe

    mfg dämmi

  9. #9
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Beim Zeus, die nächste Adresse nach &H40 kann nur &H42 sein
    (&H41 ist der selbe slave, aber lesen )

    Wichtig: Alle Slaves haben gerade Adressen
    Das bit 0 = 1 bedeutet LESEN (vom Slave)
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  10. #10
    Benutzer Stammmitglied
    Registriert seit
    08.07.2008
    Beiträge
    49
    Ups hab mich auch verschrieben. Es geht auch nicht, wenn der 2 Slave mit &h50 adressiert ist und der 3 mit &h60 usw.

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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