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:
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...
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....
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...
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....
Lesezeichen