Jinx! - LED Matrix Control ... und die nächste Matrix Software ...

  • Hallo Ottmar,


    die Sequenznummer im Artnet Paket hatte ich mal drin aber wieder raus genommen, weil man manche devices damit mehr durcheinander bringen kann als das es hilfreich wäre. Kann ich aber gerne schaltbar machen in der nächsten Version, dann kann jeder selbst entscheiden ob er die sequenz haben möchte oder nicht :) Im Regelfall sollte die im Netzwerk aber in der richtigen Reihenfolge ankommen, ist ja kaum traffic.


    Den Jitter hab ich noch nie nachgemessen und auch noch nie ein Problem damit, wundert mich auch ein bisschen wo der her kommt. Die Ausgabe läuft in einem eigenen Thread und ist Timer gesteuert, da dürfte eigentlich nichts aus dem Takt laufen. Es läuft zwar die komplette Ausgabe am Stück, sprich die buffer der einzelnen generatoren mergen usw. und dann ausgeben bzw auf den Bildschirm pinseln aber das sollte eigentlich schnell genug gehen. Ich sehe nur gerade das ich erst auf den Bildschirm pinsel und dann die Daten rausschicke, das könnte ich umdrehen, denn Bildschirm pinseln ist unter Windows immer mal langsamer/mal schneller je nachdem was Windows gerade so macht. Das könnte eventuell den Jitter erklären. Ich häng dir maldie V1.51b hier nochmal an, wo ich das mal angepasst habe. Könntest du mal messen ob es mit dieser besser ist ?


    Ach ja, wenn ich Emailadressen oder generell Kontaktdaten auf einer Homepage suche, fange ich immer beim Impressum an ;)


    Grüße
    Sven

  • Hallo Seddi,


    vielen Dank für die super schnelle Hilfe. Ich habe die angepasste Version getestet. Der Jitter ist nun viel besser. Die Refresh Rate schwankt nur noch zwischen 36ms bis 44 ms. Meine Artnet Software kann diesen Jitter nun ausgleichen und die LED´s mit exakt 40ms ansteuern.
    Auf der Jinx Homepage "http://www.live-leds.de" habe ich leider kein Impressum gefunden. Daher auch meine Frage nach deiner email Adresse. Ich kenne auch nicht deinen Namen und wie du in Bezug auf "Ledstyles.de" zu finden bist.
    Vielleicht kannst du mir die email adresse zukommen lassen.
    Kannst du schon etwas über die kommende neue Version 2.0 sagen ?


    Liebe Grüße, Ottmar

  • Hallo,
    Ich habe ein Arduino Mega und Neopixel 8x8 Matrix verbunden und die Glediator Arduino sketch geladen. Nichts an den Code geänderd, pin 6 benutzt.
    Arduino hat USB strom und die Matrix eine externe Stromversorgung, beide Gründe geteilt.
    In Glediator kann ich den COM-Port auswählen (RXTX funktioniert? Win 8.1) und Serial Open wahlen.
    Arduino RX blinkt aber nichts leuchtet auf der Matrix.
    Hilfe, was mache ich falsch?
    (Übrigens, ich habe das gleiche Problem mit JInx....)
    Dennis

  • Hello folny,


    i think the maximum number is about 5440, which has the restriction of WIZ820io receive buffer. I patched the ethernet library to have 16384 Bytes of Wiznet W5200 chip receive buffer.. This is 32 DMX universes by 512 DMX channels ( 170 RGB LED ) and this gives 5440 pixel. If you use all 8 outputs of Teensy with OctoWS2811, you can control 680 LED´s of every output. So the maximum refresh rate with this number of LED´s is about 48 Hz.
    I have not tested this number of LED´s. I am currently using 42 * 80 Matrix which gives 3360 RGB pixel of WS2812 LED´s. Every output line has 420 LED´s connected.


    Regards


    Ottmar

  • Hello folny,


    the 1360 pixels come from the standard ethernet buffersize of 4096 byte. The teensy is not able to read out he receive buffer fast enough through SPI interface. 1360 / 170 = 8 UDP packets a 512 Byte = 4096 Bate buffer size. Look into ethernet / utility / w5100.cpp . There you can find the settings for the W5200 buffer sizes. I changed it to 16384. But i can then have just one default socket and not 4.
    My changes:
    SPI.beginTransaction(SPI_ETHERNET_SETTINGS); // We use whole 16K receive buffer from W5200 for Socket 0... this gives us the 20 Universes without lost packets

    if(isW5200()) {
    CH_BASE = 0x4000;
    SSIZE = 16384;
    SMASK = 0x3FFF;
    TXBUF_BASE = 0x8000;
    RXBUF_BASE = 0xC000;
    for (i=0; i<1; i++) {
    writeSnRX_SIZE(i, SSIZE >> 10);
    writeSnTX_SIZE(i, SSIZE >> 10);
    }
    for (i=1; i<8; i++) {
    writeSnRX_SIZE(i, 0);
    writeSnTX_SIZE(i, 0);
    }


    } else {
    Serial.println("no chip :-(");
    chip = 0;
    SPI.endTransaction();
    return 0; // no known chip is responding :(
    }
    for (int i=0; i<1; i++) {
    SBASE[i] = TXBUF_BASE + SSIZE * i;
    RBASE[i] = RXBUF_BASE + SSIZE * i;
    }
    SPI.endTransaction();


    i use Arduino 1.0.6 and Teensyduino 1.2


    in W5100.h i change SPI frequency from 12 MHz to 24 MHz:


    #define SPI_ETHERNET_SETTINGS SPISettings(24000000, MSBFIRST, SPI_MODE0)



    Regards


    Ottmar

  • @Ottmar
    Hab da gerade mal softwaretechnisch getestet, hab einen software Artnet Node den ich immer zum testen nehme damit ich nicht immer Hardware aufbauen muss, hab hier nun mal die Abstände mitgeloggt in denen die
    Pakete reinkommen, lag hier dann alles zwischen 38,2367 und 42,8491 ms. OK, war quasi mit dem loopback auf dem gleichen Rechner, da fehlt dann noch der ganze Netzwerkkartenquatsch, der aber nur eine Latenz erzeugen sollte keinen weiteren Jitter. Aber prinzipiell scheinen die Pakete in annehmbaren Abständen von Jinx! gesendet zu werden. Aber Jinx! mag in der Bildschirmdarstellung abhängiger zu sein vom Versatz her als Madrix, da ich nicht über DirectX ausgebe (im Vergleich zu Madrix), daher spielen hier auch Windows Effekte eine Rolle, nachdem bisher erst auf den Bildschirm gemalt wurde und dann die Daten rausgeschoben. Daher bin ich mal gespannt ob deine Messwerte mit der Binary von gestern besser sind.

  • Hi
    Ich habe in den letzten zwei Tagen eine kleine LED Matrix aus WS2812 Pixel Strips zusammengelötet. Angesteurt wird das ganze natürlich mit Jinx! über einen Arduino UNO auf dem das Glediator Protokoll läuft.



    Herzlichen Dank an Seddi für die super Software!
    Es macht wirklich spass, damit rumzuspielen.


    Gruss
    Ibis93

  • Ja ich muss auch sagen je mehr man sich mit der Software beschäftigt um so mehr entdeckt man und findet immer wieder was neues herraus.


    Nochmal eine Frage, ist es sehr aufwendig ein scrollen Effekt für Bilder zu programmieren, wenn diese Funktion drin wäre ist die Software perfekt für mich und evtl für nachfolgende Lightpainter, hier mal ein paar erste Ergebnisse,


    LG

  • Nochmal eine Frage, ist es sehr aufwendig ein scrollen Effekt für Bilder zu programmieren, wenn diese Funktion drin wäre ist die Software perfekt für mich und evtl für nachfolgende Lightpainter, hier mal ein paar erste Ergebnisse,
    LG


    Die Frage kann ich Dir nicht beantworten. Falls Du Dich mit Programmierung ein wenig auskennst, kannst Du ja mal die Script-Funktion testen. Da sind auch einige Beispiele dabei. Könnte mir gut vorstellen, dass man damit das hin bekommt.


    Meine eigentliche Frage zum Licht-Malen: Sind die Ergebnisse hier mit einer einzelnen Spalte und Lanzeitbelichtung entstanden?

  • Sind Pixelsticks jetzt wieder angesagt oder wie?


    Dachte die wären tot nachdem sie 2010/11 von Scott etc so extrem oft benutzt wurden und sich jeder einen gebaut hat :D


    Aus der Zeit des Hypes gibt es noch die Software von Phil, damals kamen dann erst die WS2801 und HL1606 waren Standard.


    http://www.wright-online.com/


    Man speichert die Muster auf einer SD Card mit TFT Vorschau etc und dann kann man sie durchschalten, ist für komplexere Bilder unerlässlich.


    Allerdings nur mit WS2801, Source ist aber anscheinend noch da, könnte man also nachträglich einbauen.

  • Hello folny,

    which Hardware are you using ? which ethernet adapter ? do you use the W5200 chip ? or just the W5100 ?
    i have seen in the message i send there is a mistake from copy / paste: so following again:



    for (int i=0; i<1; i++) {
    SBASE[i] = TXBUF_BASE + SSIZE * i;
    RBASE[i] = RXBUF_BASE + SSIZE * i;
    }

    SPI.endTransaction();
    return 1; // successful init
    }

    in your ArtnetOctoWS2811.ino sketch you should put the ledsetpixel(....) different, otherwise the setPixel takes too much time for every universe.


    // send to leds when all Universes received
    if(sendFrame) {

    for (int i = 0; i < ledsPerStrip * numStrips; i++) {
    leds.setPixel(i, channelBuffer[(i) * 3], channelBuffer[(i * 3) + 1], channelBuffer[(i * 3) + 2]);
    }
    leds.show();
    // Reset universeReceived to 0
    memset(universesReceived, 0, maxUniverses);
    }


    Regards, Ottmar

  • Hallo Seddi,


    wie ich schon in meiner letzten Nachricht geschrieben habe, sind die Messwerte jetzt bedeutend besser. Der Jitter schwankt nur noch zwischen 36 bis 44 ms.
    Nochmals vielen Dank für deine schnelle Hilfe.
    Am besten dur scrollst mal nach oben und schaust nochmals meine letzte Nachricht an dich an.


    Viele Grüße, Ottmar

  • @Ottmar
    Danke für die Rückmeldung, hat sich irgendwie überschnitten und ich hab deine Nachricht wohl übersehen, sorry ... und ... Ach ja ... impressum heisst im englischen Imprint ;)


    Die Version 2.0 wird hoffentlich demnächst fertig, viel verraten tue ich aber noch nicht :P
    Aber ich denke es geht nochmal einen guten Schritt nach vorne, auch wenn bisher keine neuen Effekte geplant sind ...

  • Hello Ottmar


    Thank you for your help looks like everything is already alright I tried to edit the sketch to work with FastLed library but it failed me please you if you look at it and say how I should do to make it work properly.


    #include <Artnet.h>
    #include <Ethernet.h>
    #include <EthernetUdp.h>
    #include <SPI.h>
    #include "FastLED.h"


    const int ledsPerStrip = 170; // change for your setup
    const byte numStrips= 4; // change for your setup
    DMAMEM int displayMemory[ledsPerStrip*6];
    int drawingMemory[ledsPerStrip*6];
    CRGB leds[ledsPerStrip];


    // Artnet settings
    Artnet artnet;
    const int startUniverse = 0; // CHANGE FOR YOUR SETUP most software this is 1, some software send out artnet first universe as zero.
    const int numberOfChannels = ledsPerStrip * numStrips * 3; // Total number of channels you want to receive (1 led = 3 channels)
    byte channelBuffer[numberOfChannels]; // Combined universes into a single array


    const int maxUniverses = numberOfChannels / 512 + ((numberOfChannels % 512) ? 1 : 0);
    bool universesReceived[maxUniverses];
    bool sendFrame = 1;


    byte ip[] = {192, 168, 2, 9};
    byte mac[] = {0x04, 0xE9, 0xE5, 0x00, 0x69, 0xEC};


    void setup(){

    FastLED.addLeds<WS2812B, 2, GRB>(leds, ledsPerStrip);

    Serial.begin(115200);
    artnet.begin(mac, ip);


    artnet.setArtDmxCallback(onDmxFrame);
    }


    void loop()
    {
    artnet.read();
    }


    void onDmxFrame(uint16_t universe, uint16_t length, uint8_t sequence, uint8_t* data)
    {
    sendFrame = 1;


    if (universe < maxUniverses)
    universesReceived[universe] = 1;


    for (int i = 0 ; i < maxUniverses ; i++)
    {
    if (universesReceived[i] == 0)
    {
    sendFrame = 0;
    break;
    }
    }


    for (int i = 0 ; i < length ; i++)
    {
    int bufferIndex = i + ((universe - startUniverse) * length);
    if (bufferIndex < numberOfChannels)
    channelBuffer[bufferIndex] = byte(data[i]);
    }


    for (int i = 0; i < ledsPerStrip * numStrips; i++)
    {
    leds.setPixel(i, channelBuffer[(i) * 3], channelBuffer[(i * 3) + 1], channelBuffer[(i * 3) + 2]);
    }

    if (sendFrame)
    {
    FastLED.show();
    memset(universesReceived, 0, maxUniverses);
    }
    }

  • Hallo Seddi,


    jetzt ist mir klar, warum du dich wahrscheinlich wunderst, dass ich das Impressum nicht finde... grins.
    Ich habe dir als ANhang mal den Screenshot von meinem Firefox Browser unter XP SP3.
    Da wird kein "IMPRINT" angezeigt. Daraufhin habe ich mir das unter Firefox auf WIN8 angeschaut. Und siehe da.. Plötzlich ist
    ein Menü Punkt "IMPRINT" vorhanden.


    Somit hat sich auch das geklärt.


    Viele Grüße, Ottmar