-
        

Ergebnis 1 bis 6 von 6

Thema: Frage zu TWI oder anderen Systemen und deren Auswirkungen

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    04.01.2005
    Ort
    Bayern
    Alter
    31
    Beiträge
    795

    Frage zu TWI oder anderen Systemen und deren Auswirkungen

    Anzeige

    Guten Morgen,

    Wie so oft habe ich da mal eine Frage.

    Ich bin nun dabei mich in das Gebiet I²C bzw. TWI und ISP einzuarbeiten.

    Zunächst würde ich zuvor gerne noch ein paar Sachen wissen, um später nicht enttäuscht zu sein.

    Wenn Ihr euch bitte mal das Bild unten anseht:

    Ich habe mehrere geschlossene Regelkreise (links) an meinen Hauptcontroller.

    Bei den Regelkreisen handelt es sich um Getriebemotoren, deren Stellung durch ein Potentiometer erfasst wird. Der "Hauptcontroller" hat die Aufgabe eine Stellung zwischen 0 und 255, welche vorgegeben wird zu halten.

    Funktioniert perfekt!

    Nun will ich aber das ganze aus weiterer Entfernung und von mehreren Positionen aus steuern können.

    Ich brauche aber um jedes Display Anzusteuern, und um alle Drehpotentiometer abzufragen eine imense Anzahl an Ports.

    Meine erste Lösung wäre gewesen, da ich ja immer nur eine Position brauche, alle Signalleitungen mit Analog-Multiplexer umzuschalten.

    Funktioniert auch gut, aber ich habe immer noch so viele Pins an meinen Hauptcontroller, und ich befürchte dass das Spätere LCD Menü den Controller bremst und die Funktion der Regelktreise beeinträchtigt.


    Meine nächste Idee währe gewesen (wie in der Skizze unten), dass ich für jeden Posten einen µC habe, der die Werte der Potis erfasst und diese an den Hauptcontroller sendet. Dieser wiederum sendet die aktuellen Stellwerte an den Posten und dieser gibt die am LCD aus.

    Nun meine Frage,

    Wird der Hauptcontroller durch das ständige Senden und Empfangen von Daten so stark ausgebremst, dass meine Reglekreise nicht mehr richtig funktionieren?

    Es werden immer folgende Werte in zum Hauptcontroller geschickt:

    Drehpoti1 0....255 8Bit
    Drehpoti2 0....255 8Bit
    Drehpoti3 0....255 8Bit

    Menüknopf1 1 Bit
    Menüknopf2 1 Bit
    Menüknopf3 1 Bit
    Menüknopf4 1 Bit

    Und folgende Werte werden zum PostenController geschickt:

    RegelkreisAktuell1 0....255 8Bit
    RegelkreisAktuell2 0....255 8Bit
    RegelkreisAktuell3 0....255 8Bit

    Menüoption 8Bit
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken system132213.jpg  

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    29.12.2004
    Ort
    Bayern
    Alter
    38
    Beiträge
    90
    Hallo,
    ist prinzipiell machbar...
    Faktor 1: Wie weit sind die Posten vom Hauptcontroller weg? I2C möglich? oder RS485?
    Wie ist der Hauptc. mit dem Regeln beschäftigt? D.h. wieviel Zeit hast Du um Interrupts abzuarbeiten?
    Grüße Ralf
    Ach ja, hab heute das erste Mal erfolgreich einen mega8 als I2C-Slave laufen lassen, werde in absehbarer Zeit mal was ins Forum stellen, weil dieses Thema, so scheint es mir, oft angesprochen aber mangelhaft beantwortet wird...

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    04.01.2005
    Ort
    Bayern
    Alter
    31
    Beiträge
    795
    Hallo Rapo,

    Die "Posten" sind maximal 25m Entfernt, also 25meter abgeschirmtes 4-Adriges Telefonkabel hätte ich verwendet.

    Allerdings gehen alle Kabel der 3 Posten am Hauptcontroller zusammen, macht ja eigentlich nichts, dass das ganze mehr sternförmig aussieht wie bus-förmig... Alle hängen zusammen....

    Ich verwende TWI, also I²C von Atmel = TWI.

    Habe in den Artikeln ein bisschen weitergeschnuppert, für strecken über 50m gäbe es sogar eine art "verstärker" für den I²C bzw. TWI - Bus.

    Guggst du hier ganz unten:
    http://www.roboternetz.de/phpBB2/zei...rag.php?t=4585

    Ich werd es jetzt einfach mal mit meinen zwei Testboards für den ATmega8535 ausprobieren.

    Vorerst mal vielen Dank,

    Gruß
    Franz

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    04.01.2005
    Ort
    Bayern
    Alter
    31
    Beiträge
    795
    Hier bin ich wieder.

    Laut ATmega8535-Datenblatt habe ich gefolgert, dass man immer nur eine 8Bit breite zahl in das "TWI Data Register - TWDR" schreiben kann.

    Find ich für meine Anwendung ein bisschen doof.

    Hat von euch jemand Erfahrung wie man folgendes realisieren kann:

    Man habe eine Bussystem mit µC1 , µC2, µC3 und µC4
    Man habe die Variablen A B und C.
    Jeweils auf 8Bit deklariert.

    Der µC1 weiß immer die aktuellen Werte für A, B und C. Diese Werte soll nun auch µC3 wissen.

    Wie stell ich das am sichersten an, ohne dass ich Vertauschungen riskiere?

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    29.12.2004
    Ort
    Bayern
    Alter
    38
    Beiträge
    90
    Hallo nochmal,
    na mit einem Protokoll...
    Du verwendest TWI, also hat jeder uC eine Adresse (Slave oder Master mit R/W bit)
    Übertragung: Start-Slaveadresse-ACK-ByteA-ACK-ByteB-ACK-ByteC-NoACK-Stop
    So überträgst Du und in genau der Reihenfolge empfängst Du.
    Wenn Du noch sicherer gehen willst, kannst Du den Bytes A-C eine Art Pionterbyte zuordnen.
    Start-Slaveadresse-ACK-Pointerbyte-ACK-RepeatetStart-ByteA-NoACK-Stop.
    Das heißt, Du schickst dem Slave schreibend ein Byte, dieses verarbeitet er und verzweigt nach der RepeatetStart Condition in eine Routine, in der er das nächste empfangene Byte genau zurodnen kann... So kompliziert würde ich aber das nicht machen, TWI ist da eh recht dankbar, weil eben alle Daten schön der Reihenfolge nach kommen...

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    04.01.2005
    Ort
    Bayern
    Alter
    31
    Beiträge
    795
    Hallo Rapo,

    Vielen Dank für deine Tipps!

    Habe noch kleine Schwierigkeiten TWI in Ganz zu setzen, aber das wird schon....

    Ich habe soeben in einem anderen Beitrag über TWI ein Beispiel gesehen, in dem jemand versucht hat diesen "20fach Servo - Controller" anzusprechen.

    Hierbei sah die Übertragung folgendermaßen aus:

    START-Slaveadresse-ACK-SERVONUMMER-ACK-STELLWERT-NoACK-STOP

    Wäre eine Möglichkeit wenn man nicht immer alle Werte übermitteln braucht.

    Aber die Möglichkeit die du vorgeschlagen hast:
    START-Slaveadresse-ACK-WERT1-ACK-Wert2-ACK-Wert3-ACK-Wert4-NoACK-STOP

    Wird wohl die Auserwählte sein

    Weiß nur nochnicht wie das mit dem Reciever aussieht. Wie der die Daten varstaut, wenn die nacheinander reinkommen... aber das werd ich mir schon noch irgendwo erlesen....

    Gruß
    Franz

Berechtigungen

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