Results 1 to 6 of 6

Thread: Barnabybear - Thank You

  1. #1
    Junior Elf member
    Join Date
    Aug 2014
    Location
    Pearland, TX
    Posts
    4

    Barnabybear - Thank You

    I wanted to thank you for your pixel controller (Posting: 1 universe 170 pixel (WS2811)). I used your original design but, I used sn75176bp for the RS485s. I made a 4 output controller and burned it with the hex file provided, the board worked 'perfectly' this season. I have a mix of E682s (bought and assembled), ESPixelSticks clones I designed myself, PX1s and your board. While some of the wireless crated a few issues, the wired E1.31 boards performed well. Once again thank you for your hard work.
    Attached Thumbnails Attached Thumbnails IMG_1343.jpg  

  2. #2
    Frosty member
    Join Date
    May 2016
    Location
    UK about the middle - S80 postcode.
    Posts
    796
    Hi Joey, how cool is that! When I post my waffle I’m never sure if it will ever be used by anyone other than me so the feedback is appreciated. Your example is exactly what I hoped would happen a DIY pixel controller even down to the home etched board. This just goes to demonstrate that you don’t need to spend hundreds of dollars on controllers to be part of this hobby.

    A few questions if I may.

    You used the 4 E1.31 Universe input and 1 Universe per pixel output code?

    As you got this working you figured out the notes, setup sketch and hex file. Did it all make sense or does it need more work? I’m never sure how good my instructions are.

    How many pixels did you have on each output?

    What distance was it to the first pixel?

    What timing is your sequence, 50mS (20FPS)?

    What do you estimate the total cost per board at?
    Last edited by Barnabybear; 01-05-2019 at 03:50 PM.

  3. #3
    Junior Elf member
    Join Date
    Aug 2014
    Location
    Pearland, TX
    Posts
    4
    I actually made three different boards: 1, with just 340 out on one port (using a different ENC28J60, not the shield), 1, which used used two outputs (with the shield) and the 4 outputs.
    The 4 port I used for this Christmas had 4 different universes with 114 pixels on first, 117 pixels on second, 78 pixels on third and 140 pixels on the last. Only the first port was directly wired to a prop and it was 4 feet away. The other three used pixel extenders I designed from previous examples.

    Your instructions were great: I used the EEPROM setter to enter all universes, etc.. and the Xloader for the HEX files. (p.s. I would love to see the difference in the code from the 340 .'ino' you posted, for the 4 port. I figure you are just turning on the appropriate output to enable the RS485 for the correct universe on the 4 port)

    My show is set for 50ms. I did not observe any real issues with dropped packets or delays. But to be honest I was staring madly at various ESP8266 props that were lagging every once in awhile. Next year I am going to be using a mix of WS2801 and WS2811. I have controllers made for both and I will just use pixel extenders. Way less headaches. I am running about 20,000 channels on 60 universes, of which 18 universes were over wireless and everything else ethernet.

    I am posting a picture of a board I am having made by EasyEDA.com. I have been using them last year for about 8 different projects. They do a great job, and for 10 boards its $20 ($2 for boards and ~ $17 shipping DHL) delivered in about 7 - 10 days. They are awesome for prototyping. The cost of the 'home etched' board, shield, Nano, sn75176b(s) 7805, re-settable fuse, discreet components and connectors = $16.75 (with board done for me $17.75). Really hard to beet that price. I figure if I paid you for the time you spent on the project it would round out at about $1800, give or take.

    Thank you for your hard work.
    Attached Thumbnails Attached Thumbnails Top.jpg   Bottom.jpg  

  4. #4
    Iíve been really happy with EasyEDA.com as well. Both for generating my schematic/PCB, and very quick/inexpensive delivery of the boards.

  5. #5
    Frosty member
    Join Date
    May 2016
    Location
    UK about the middle - S80 postcode.
    Posts
    796
    Hi, the PCB’s look great.

    Quote Originally Posted by Joey_tx View Post
    Your instructions were great: I used the EEPROM setter to enter all universes, etc.. and the Xloader for the HEX files. (p.s. I would love to see the difference in the code from the 340 .'ino' you posted, for the 4 port. I figure you are just turning on the appropriate output to enable the RS485 for the correct universe on the 4 port)
    You figured correctly. If you want the full code let me know and I’ll send it to you, I’m just trying not to post it lots of places that I lose track of then and then can’t maintain it.
    Code:
    THIS IS INCOMPLEATE CODE – IT WILL NOT RUN!
    
    #include <EtherCard.h>
    #include <IPAddress.h>
    #include <EEPROM.h>
    
    int pix_out;
    unsigned int Universe;
    unsigned int Dcount;
    
    #define STATIC 1  // set to 1 to disable DHCP (adjust myip/gwip values below)
    
    #if STATIC
    // ethernet interface ip address
    static byte myip[] = { (EEPROM.read(16)), (EEPROM.read(17)), (EEPROM.read(18)), (EEPROM.read(19)) };
    // gateway ip address
    static byte gwip[] = { (EEPROM.read(20)), (EEPROM.read(21)), (EEPROM.read(22)), (EEPROM.read(23)) };
    #endif
    
    // ethernet mac address - must be unique on your network.
    static byte mymac[] = { (EEPROM.read(10)), (EEPROM.read(11)), (EEPROM.read(12)), (EEPROM.read(13)), (EEPROM.read(14)), (EEPROM.read(15)) };
    
    // the universe numbers to listen for.
    const unsigned int uni1 = ((EEPROM.read(25) << 8) + (EEPROM.read(26)));
    const unsigned int uni2 = ((EEPROM.read(27) << 8) + (EEPROM.read(28)));
    const unsigned int uni3 = ((EEPROM.read(29) << 8) + (EEPROM.read(30)));
    const unsigned int uni4 = ((EEPROM.read(31) << 8) + (EEPROM.read(32)));
    
    byte Ethernet::buffer[1193]; // tcp/ip send and receive buffer
    
    //callback that runs the pixel loop
    void sACN_data(uint16_t dest_port, uint8_t src_ip[IP_LEN], uint16_t src_port, uint8_t *data, uint16_t len) {
    
      // check to see if the packet is an ASC-E1.17 type
      if (!((data[4] ^ 0x41) && (data[5] ^ 0x53) && (data[6] ^ 0x43) && (data[7] ^ 0x2D) &&
            (data[8] ^ 0x45) && (data[9] ^ 0x31) && (data[10] ^ 0x2E) && (data[11] ^ 0x31) &&
            (data[12] ^ 0x37))) {
    
        // check to see if the universe number is correct
        if (!((uni1 ^ data[114]) + (uni1 >> 8 ^ data[113])) ||
            !((uni2 ^ data[114]) + (uni2 >> 8 ^ data[113])) ||
            !((uni3 ^ data[114]) + (uni3 >> 8 ^ data[113])) ||
            !((uni4 ^ data[114]) + (uni4 >> 8 ^ data[113]))) {
    
              
              Dcount = ((data[124]) + (data[123] << 8));
              
          // enable the output that matches the universe number
          Universe = ((data[114]) + (data[113] << 8));
          if (!(Universe ^ uni1)) PORTC |= B00000001; // enable A0 as output
          if (!(Universe ^ uni2)) PORTC |= B00000010; // enable A1 as output
          if (!(Universe ^ uni3)) PORTC |= B00000100; // enable A2 as output
          if (!(Universe ^ uni4)) PORTC |= B00001000; // enable A3 as output

  6. #6
    Junior Elf member
    Join Date
    Aug 2014
    Location
    Pearland, TX
    Posts
    4
    Thank you again for the code.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •