Art and Technology are Friends

Aurora 9×18 on Instructables

Aurora 9×18 is now on Instructables! Which means you can learn how to build one of those yourself!×18-RGB-LED-art/

9 Responses

  1. I have reproduced somehow the schema you provided in the instructable, RGB bus, 1 PWM output, 3 R G B outputs and 9 cols.
    What confuses me is the mix of hardware and software PWM.
    Can you explain just a little bit about the logic workflow, frequency, etc … it’s been in my head for several days now without finding out :(((
    I don’t have a PIC so I can’t use your firmware to help me understand.
    Thank you in advance.

    June 27, 2011 at 7:29 am

    • You might want to look closely at the timing chart that I have on the Instructable. If you don’t think about the PWM, the circuit is basically a multiplex grid of LEDs. (9 x 3)
      Only additional thing is that R/G/B drivers need two input – PWM on high and R/G/B DRV on low to activate the bus. Software wise, you might want to start without implementing PWM first. Just select one of the RGB DRV low and PWM pin high. Then turn the next RGB DRV low, and so on. (You can keep the PWM pin high during this test)
      Remember that only one of R/G/B DRV should be low at any given time.
      You should be able to produce 7 different colors on each LED without PWM. (R, G, B, Yellow, Magenta, Turquoise, & White)
      Once you get that working, you can start implementing the PWM control.


      June 27, 2011 at 9:33 am

      • Ok, I understand this multiplex part, I have done a similar setup with a 7*5 led module, an interrupt that toggle one row at a time and turns on/off the desired column, very basic and no PWM. With the same setup I tried to apply PWM on the columns instead of just LOW or HIGH, but that didn’t work, something was out of sync, maybe because of 8bit controller or the interval I used, but I’m too new to this to understand what went wrong :(
        Are you adjusting PWM on each cycle/R/G/B ? or do you use it in ‘stand alone’, going from 0 to 255 and back to produce a breathing effect on all 3 buses ?
        I’m sorry to bother, I am still confused by your timing chart.

        June 28, 2011 at 5:07 am

        • My method can be confusing, but the basic idea originates from ordinary “software PWM”. I’m comparing the brightness level of each LED with the duty level, and turning each LED on/off. The problem with this approach is that there is too much “jitter” – the on/off timing of LEDs are never exactly precise – due to the varying interrupt latency. Second problem is the PWM resolution. It’s vary hard to get more then 7 or 8 bits (128 – 256 levels) of resolution with software PWM. I needed at least 12 bits. This is to compensate for the human vision’s “gamma” curve.
          Long story short, you can think of one PWM phase created by 255 pulses of varying width. You might be right in saying “breathing effect”. The benefits of this approach are jitter-free pulses (since the pulses are generated in hardware), and effective gamma correction (by increasing the pulse width as you go up in the PWM duty level.)

          It took me a while to solidify this theory (and I built it up piece by piece), so it might be complicated for others…


          June 28, 2011 at 12:52 pm

          • pim

            I’m sure it took you a while to figure this out, and I appreciate very much that you are sharing this with all of us, and especially giving some extra lesson to a rookie like me ;)
            I think I got it all figured out now, hardware PWM 12 bits 0-4095/4095-0 for the ‘breathing’ effect, interrupt to multiplex rows and cols, and logic to ‘animate’ the colors. Please tell me I am right, I would be so happy ;))) Unfortunately I can’t try it right now :((
            arduino is 8 bits so I wont be able to pull 12 bits PMW resolution, right ? unless I use a dedicated IC ?
            I wrote a javascript library for animating things and colors, it uses easing equations to customize motion, I’m rather a scripting dude, and I would like to translate it into physical world.
            What you did is really fascinating.

            June 28, 2011 at 3:30 pm

            • You are almost right, but you’d only have to go one way 0-255 or 255-0. I say 255 here because you will get the total of 1+2+3…+255 = 32,640 (am I right?) That’s like 15 bit resolution.
              In practice I’m skipping even numbers so there are only 127 steps to go through in software, but that’s still 8,128 levels (mapped to 128 palettes).
              BTW most (if not all) Audrino can do 16 bit PWM.

              “Translating into physical world” was precisely the motivation behind my starting LED objects. I think “concepts” & “ideas” are overrated when you don’t make them into reality.


              June 28, 2011 at 6:41 pm

  2. Great work! Add me to the list of fans :)
    Thanks for sharing the schematics, but I’d kill for a PCB or PCB file.

    June 20, 2011 at 9:06 am

  3. Jeff Easter

    Can you make the file/plan available to order the PCB?

    June 19, 2011 at 10:10 pm

  4. Paul Mendelsohn

    A very pleasing blend of art and technology !

    I think it has social value and may be able
    to set moods in various environments…

    Furthermore it may have value as a tool in
    the medical arts.

    Is there a way to contact you ?

    June 18, 2011 at 1:01 pm

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>