Chromoflex per PC ansteuern

  • hi Community,


    habe mir ein Chromoflex besorgt und will das Gerät über den PC ansteuern um mir meine Farbwechsel mit VB zu Programmieren.
    Nachdem ich alles mögliche veranstaltet habe um auf das Gerät mittels PC zuzugreifen, habe ich es endlich geschafft, den Comport auszulesen um zu sehen welche Datenpakete von der Software (Cf_Edit) losgeschickt werden. Habe mir dann die Daten abgespeichert (verschiedene Farben, Effekte) die ich nun direkt aus VB an den Chromoflex schicken kann.
    Klappt einwandfrei :lol:


    Jetzt aber zu meinem Eigentlichen Problem:
    Da das Protokoll vom Chromoflex immer eine CRC16-Modbus Checksumme an die zu sendenen Daten dranhängt, kann ich nur fertige Datenpakete senden, die ich am Comport mitgelesen habe.
    Das ist LÄSTIG :evil:, weil ich 100erte Einstellungen mitlesen müßte, die ich gerne verwenden will.


    Da in der Beschreibung "Chromoflex Usp3_com.pdf" der CRC16 in C++
    beschrieben wird -> ich aber kein C++ kann :oops: wollte ich doch hier mal anfragen, wer dieser Sprache mächtig ist und mir den Rechenvorgang mal erläutern kann, damit ich ihn in VB reinkriege.
    Barthelme scheint ja nicht in der Lage oder Willens zu sein auf Fragen diesbezüglich zu antworten :evil:
    Es könnte aber auch gleich ein CRC16-Programm in VB sein, vieleicht hat ja jemand eines auf seinem Rechner rumliegen!?
    Die Berrechnung muß als Ausgabe einen HEX-Wert und keinen ASCII-Wert haben. Gebe mal ein Beispiel:
    Wenn ich den Hexwert 0xCA berechne, muß als Lösung: 0x173F rauskommen und nicht 0xB0F0.
    Wenn ich das nämlich noch hinbekomme, dann kann ich mittels PC das Gerät komplett steuern.


    Also interessierte Chromoflex Benutzer, bitte helft mir, =D> damit ich mich von den eingebetteten Effekten vom Chromoflex verabschieden kann.


    Gruß vom Chromoflex-User
    Lobo

  • Zitat von "Lobo"


    Also interessierte Chromoflex Benutzer, bitte helft mir, =D> damit ich mich von den eingebetteten Effekten vom Chromoflex verabschieden kann.


    Helfen kann ich leider nicht, aber großes Intresse an den veränderten Effekten habe ich! Also wenn du das nas laufen bekommst wäre ich sehr verbunden über das eine und andere Script von dir 8)


  • Das Winamp Plugin habe ich schon mal vor längere Zeit getestet, muss leider sagen das es grotten schlecht ist.


    Wenn du da was bessere proggen kannst bist du mein Held! =D>

  • tja LedBob, das ist genau mein Problem -> ich muß das Rad neu erfinden, denn die CRC's im Netz liefern alle den ASCII-Code oder rechnen völlig falsch.
    Der C to VB Converter ist Cool :lol: , das bringt mich schon mal ein bischen weiter -> der Übersetzt den C-Code in VB.net und ich hab VB6, aber da wird sich sicherlich auch noch was machen lassen.


    Zu dem Winamp PlugInn kann ich wie bene auch nur sagen das es totale Scheiße ist. Zu der dll bräucht ich aber sowieso die Anweisungen auf welche die dll reagiert.


    Wenn ich weiterkomme, poste ich das dann


    Gruß Lobo

  • Zitat von "Lobo"

    sch... ist. Zu der dll bräucht ich aber sowieso die Anweisungen auf welche die dll reagiert.


    Die dll stellt folgende Funktionen bereit:


    _download
    _e2_adr
    _e2_cmd
    _e2_data
    _e2_len
    _e2_percent
    _exit_usp3
    _fade_rgbx
    _firmware_reset
    _init_usp3
    _load_e2_file
    _set_group
    _set_rgbx
    _set_serial
    _usp_frame_send
    _xd_prog
    _xd_reset


    Der Code für den Winamp-Plug benutzt nur diese vier:


    _init_usp3
    _exit_usp3
    _set_rgbx
    _fade_rgbx


    [code:1]
    typedef int (*init_usp3)(int comnr, int baud);
    //int init_usp3(int comnr, int bd); // bd=0 fuer Default


    typedef void (*exit_usp3)(void);
    //void exit_usp3(void)


    typedef void (*set_rgbx)(int adr, unsigned long rgbx);
    //void set_rgbx(int adr, unsigned long rgbx); // R: LL .. X: HH


    typedef void (*fade_rgbx)(int adr, unsigned long rgbx, unsigned int incspeed, unsigned int inc_red, unsigned int inc_green, unsigned int inc_blue, unsigned int inc_x);
    //void fade_rgbx(int adr, unsigned long rgbx, unsigned int incspeed, unsigned int inc_red, unsigned int inc_green, unsigned int inc_blue, unsigned int inc_x);
    [/code:1]


    Die zu übergebenden Parameter sind im Code beschrieben, müsstest du also eigentlich auch in VB verwenden können. Die Parameter für die anderen Funtkionen sind ohne Beispielcode nur schwer rauszufinden...


    Gruß


    LB

  • hey LedBob,
    Du bist ja ganz gut auf dem laufendem :o
    ich danke Dir erst mal für die vielen Info's


    Werde aber erst mal mein Projekt, diese Checksummeberechnung weiterverfolgen, weil ich schon soviel Zeit darin investiert habe. :wink:
    Ich bin jetzt auch nicht der Super-Progammierer in VB und mit den neuen Info's von Dir müßte ich mich auch erst mal wieder kümmern, wie ich die dll in VB einbinde. Habe vorhin schon mal ein bischen damit rumgespielt, aber VB konnte trotz richtiger Pfadangabe die dll nicht finden --> wer weiß wo dran es liegt --> bleibe aber wahrscheinlich trotzdem noch dran, falls das mit CRC-Code nichts wird.


    Wo hast Du eigentlich die Info's zur dll her --> wenn man mal ganz direkt fragen darf?


    Thx

  • laut barthleme wird die komplette API in zukunft bereitgestellt..
    hab ich von mein Programmierer erfahren, der kontakt zu Barthleme hatte.


    bei mir läuft die komplette Steuerung für 15module z.Z unter debian.
    da ich demnächst wieder 15Module in ein anderen Projekt verbaue wäre es gut mal seitens Barthleme Unterstützung zu bekommen.. da Ihre XD software sehr "schrottig" ist.

  • Zukunft, genau da sehe das Problem!
    Das kann nächste Woche sein, oder aber erst in einem halben Jahr. :lol:
    Debian sagt mir jetzt erst mal nix --> aber damit kannst du auch direkt auf die Hardware über die SR232 zugreifen?

  • Zitat von "Lobo"

    Wo hast Du eigentlich die Info's zur dll her --> wenn man mal ganz direkt fragen darf?


    Klar darfst du. Die Infos kann man direkt aus der DLL auslesen (z.B. mit PE Explorer). Die DLL muß ja mitteilen welche Funktionen sie importiert und exportiert... Wie gesagt ist das mit den benötigten Parametern nicht so leicht.


    Zum CRC16 - hier hab ich noch eine Implementation in Delphi gefunden:
    http://www.ibrtses.com/delphi/dcrc.html


    Nur zur Sicherheit: Das innerhalb der Packete $CA gegen $CB$00 und $CB gegen $CB $01 ausgetauscht werden muß hast du in der Implementationsbeschreibung gesehen?


    Gruß

    LB

  • ja, das habe ich mitbekommen, das betrifft aber nicht die Berechnung der Checksumme, sondern das eigentliche Protokoll.


    Wenn ich den Comport mitlese, wird an den gesendeten Daten nichts verändert, also CA bleibt CA.
    Wenn ich aus Docklight die Daten sende, so wie ich sie empfangen habe klappt das --> ich muß also nichts an dem Datenstream verändern, das es funktioniert.
    Deshalb habe ich mich um das USP3-Protokoll aber auch nicht weiter gekümmert.


    Ach ja, Delphi, schön wenn man's kann :roll: :-), hab mir aber die Beschreibung mal Vorsichtshalber gezogen.


    Gruß
    Lobo

  • Zitat von "bene"

    Helfen kann ich leider nicht, aber großes Intresse an den veränderten Effekten habe ich! Also wenn du das nas laufen bekommst wäre ich sehr verbunden über das eine und andere Script von dir.


    Tja bene, an den Effekten arbeite ich ja gar nicht, sondern ich will mir die Effekte mittels meiner PC-Software zusammenbasteln.
    Das ganze soll dann meine Treppenhauswände in farbigen Licht erstrahlen lassen. Und die Farben sollen sich dann nach Aussentemperatur, Jahreszeit und Uhrzeit verändern.

  • Warum machst du dir denn die Mühe ein bestehendes Gerät zu ändern. Steck doch deine Energie in ein eigenes Gerät. Es gibt hier im Forum doch schon einige Beispiele für die Realisierung. Im Grunde musst du nur noch die Effekte programmieren und deine Temperatur und Zeitsteuerung reinbringen.

  • hätt ich's vorher gewußt, hätte ich mich evtl. auch für die eigene Hardwarevariante entschieden.
    Ich habe mich zwar noch nicht weiter nach eigenen Hardwarelösungen hier im Board umgeschaut, werde das aber auf jedenfall noch mal in Angriff nehmen.
    Habe aber jetzt auch die Lösung für die Checksumme-Berechnung vom Chromoflex gefunden und kann endlich über VB oder VBA auf das Gerät zugreifen. \:D/


    Lobo

  • Hallo Leute,
    seit über einem halben Jahr habe die Chromoflex als Steuerung für die Wohnzimmerlampen im Dachboden verbaut. Die Ansteuerung soll aus einem eigenen VB Programm heraus erfolgen. Aufgrund von Verständnisproblemen des Protokolls habe ich damals die Sache erst mal beiseite gelegt, da andere Aufgaben erst mal Vorrang hatten. Jetzt wo die wichtigsten Sachen erst mal erledigt sind (Hausumbau), möchte ich das Kapitel mit der eigenen Ansteuerung noch mal in Angriff nehmen. Die Lampen jedesmal nur mit dem CF Editor zu bedienen ist irgendwann zu blöd.
    Leider ergibt die Suche im Internet keine größeren Anhaltspunkte und mit dem Abhören der Schnittstelle mittels Portmon komme ich auch nicht so recht weiter. Und jetzt lese ich hier, das das mit einem VB Programm bereits möglich ist. Könntet ihr mir bitte auf die Sprünge helfen? Ein klitzekleines Beispiel vielleicht? Nur das ich wenigstens irgendwie mal einen Anhaltspunkt über das Protokoll habe?


    Rene

  • Hmmm, da muß ich mal nachdenken wie man am besten anfängt..... :-k


    Als erstes schau mal hier nach: http://www.ledstyles.de/ftopic1805.html und scrool bis zu den Registern (schätzungsweise warst du schon mal da) :lol:


    So, fangen wir mal an das Protokoll aueinander zu nehmen... 8)
    Ich schreibe alles in HEX!


    Jeder Sendebefehl fängt mit -> CA <- an.


    Dann folgen 3bytes für die Adressierung, gehen wir davon aus, das alle Chromoflex angesprochen werden sollen
    jetzt haben wir -->

    Zitat

    CA 00 00 00


    Jetzt kommen noch 2bytes für die länge, die gleich als Befehl gesendet werden sollen >> komme ich gleich noch mal drauf zurück.
    jetzt haben wir -->

    Zitat

    CA 00 00 00 00 00


    Jetzt kommt es darauf an, ob du einen Farbwert setzen willst, oder ein internen Effekt --> wir gehen erst mal von einer Farbe aus, kommt also noch ein FE dazu.
    jetzt haben wir -->

    Zitat

    CA 00 00 00 00 00 7E


    so, nun kommt noch 1byte, um dem Chromoflex zu sagen ab welcher Adresse im Register du schreiben willst, schau da mal in dem Link von oben nach. Ich wähle mal einen einfachen Farbwert, also ab Adresse 4 in HEX also 04
    jetzt haben wir -->

    Zitat

    CA 00 00 00 00 00 7E 04


    dazu kommen jetzt 4bytes Farbwerte (RGBX).
    So, ich möchte jetzt die Farbe grün mit 100%
    also 00 (kein rot)
    und FF (grün 100%)
    00 (kein blau)
    00 (kein X)
    macht also zusammen 00 FF 00 00
    alles zusammen -->

    Zitat

    CA 00 00 00 00 00 7E 04 00 FF 00 00


    kommen wir jetzt noch mal auf den Anfang zurück, nämlich auf die 2bytes länge. Alles was nach, bei Farbe 7E kommt, ist die zu sendende länge.
    Das heißt, wir wissen jetzt, das unser "Paket" 5bytes lang sein wird
    -->

    Zitat

    CA 00 00 00 00 05 7E 04 00 FF 00 00


    Jetzt muß aus diesem ganzen, die 2byte lange CRC-Checksumme berechnet werden. In diesem Fall lautet sie B5 E1, das kommt noch hinten dran und somit lautet die gesamte Nachricht, die an das Chromoflex gesendet werden soll
    -->

    Zitat

    CA 00 00 00 00 05 7E 04 00 FF 00 00 B5 E1


    Es gibt da noch einige Problemfälle, wo man am besten mehrere Pakete sendet, das aber zu einem späteren Zeitpunkt!


    Um die anderen Effekte anzusteuern müsste man mal gesondert besprechen --> wird sonst ein bischen lang das ganze, für den Anfang sollte das aber erst mal reichen.


    Ich hoffe, Du kannst mit meiner Erläuterung was anfangen und ich konnte Dir das Protokoll etwas näher bringen!? :wink:




    Gruß
    Lobo

  • Mensch Lobo, Du bist ein Schatz.


    Ich habe mal schnell eine Form genommen, Port geöffnet und mal ein Datenpaket gesendet - und es geht. :lol:


    Also der Anfang ist gemacht, werde mich mal am WE hinsetzen und mal etwas mehr einarbeiten. Aber anhand deiner Erklärung sind die Startschwierigkeiten erst mal behoben. Einfach klasse, ich melde mich dann nochmal . . .


    Bis dahin, schöne Grüße


    refo