Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Re: I²C beschleunigen Kategorie: I²C-Bus (von Detlef - 4.01.2011 9:06)
Als Antwort auf Re: I²C beschleunigen von Wurl - 2.01.2011 19:09
Ich nutze:
C-Control II Station
> > > Hallo.
> > >
> > > Ist es moeglich die I2C-Schnittstelle irgendwie zu beschleunigen?
> > >
> > > Ich möchte eine grosse Haussteuerung mit 16 I2C-Modulen machen.
> > > D.h. pollen von 16 Input-Ports und 16 Output-Ports, weshalb ich grausame Reaktionszeiten befuerchte.
> > > Meine Busleitung is insgesamt nur ca 2 Meter lang, und die I2C-Chips sollten ja normalerweise schnell genug sein.
> > >
> > > MfG,
> > > Wurl
> >
> > Hallo.
> >
> > Es ist nicht notwendig die I2C Schnittstelle zu beschleunigen,
> > ich betreibe eine Haussteuerung mit insgesamt 18 MAX 7311 und insgesamt 20m Busleitung ohne Probleme.
> >
> > Dabei werden insgesamt 30 Taster per Polling abgefragt, die irgendwie an den MAX7311 hängen.
> > Auch Tasterabfragen wie "3x Drücken", also die einzelnen Betätigungen zu zählen,
> > ist ohne Probleme möglich.
> > Und dann ist es immer noch möglich, Aktoren zu steuern, die auch an dem BUS hängen.
> > Dazu kommen Dimmer, die langsam auf- und abdimmen. Das Auf- und Abdimmen wird ebenfalls
> > ĂĽber den BUS abgewickelt, indem nacheinander bis zu 60 Helligkeitswerte an die Dimmer gesendet
> > werden. Erst beim Dimmen mehrerer Lampen gleichzeitig merkt man, dass es langsamer auf- bzw. abdimmt.
> >
> > Aber die Eingangsabfrage ist auch dann immer noch problemlos.
> >
> >
>
>
> Dank fĂĽr die Antwort.
>
> Bei mir sollen es bis zu 112 (14x8) digitale Eingänge (Taster, Bewegungsmelder etc.) sein.
> Gut die Hälfte davon mit Auswertung von Lang-Halten und Mehrfach-Druck.
> (Das benötige ich für 12 Jalousien, 6 Dimmer, etc. um sie mit nur je 1 Taste angenehm zu steuern.)
> Insgesamt gibt es auch bis zu 112 digitale Ausgänge zu verwalten.
> Daneben sind noch 48 Analogkanäle abzutasten (braucht aber blos einer alle zwei Zyklen zu sein).
>
> Ich habe schon Code gehackt fĂĽr die Tasterauswertung, und fĂĽr die Jalousiesteuerung.
> (Vielleicht schaffe ich auch eine Drag&Drop Funktion ;-)
>
> Den system.timer() möchte ich verwenden um mich darauf zu synchronisieren (warten auf bit7 und höher).
> Die ganze Schleife soll also möglichst im festen Raster von 128ms ablaufen.
> (Alle Eingänge pollen, Auswertung, und alle Ausgänge aktualisieren.)
>
> Leider ist noch nichts verdrahtet, und ich muss auch noch ein wenig fertig programmieren.
> Aber so ein Gefühl für die zu Erwartende Performance (Reaktionszeiten) wäre nicht schlecht.
>
> MfG,
>  Ewald

Hallo Ewald, ich habe das ähnlich abgewickelt, aber ohne feste Zeiten.
Bei mir gibt es erstmal eine Initialisierung um alle angeschlossenen Eingänge zu erfassen.
Danach läuft ein Thread, der alle Eingänge einliest und alle aktiven Eingänge in einem Array A abgelegt.
Im zweiten Durchlauf werden wieder alle Eingänge erfasst, aber nur noch die neu aktiven in einem
Array B abgelegt. Im dritten Durchlauf werden alle neu aktiven Eingänge wieder in Array A abgelegt usw...

Während Array A beschrieben wird, liest ein zweiter Thread Array B aus und startet entweder weitere
Treads oder einfache Funktionen.

Das Ganze ist gegeneinander verriegelt, Lesezyklus B kann erst starten wenn Array B komplett
ausgelesen ist und umgekehrt.

In der Praxis gibt es dabei überhaupt gar keine Probleme bei dem Einlesen der Eingänge. Das ist
superperformant, und man hat das Gefühl einer instantanen Reaktion. Auch bei ca. 60 Eingängen.





    Antwort schreiben


Antworten: