Jurek and the Amazing Techno, Colored DreamWall

Jurek and the Amazing Techno, Colored DreamWall

The title is mostly a placeholder, as I haven't really figured out a name for it yet. This project is a wall hanging that consists of semi-large triangular pixels using discrete RGB LED's and PWM to control intensity levels of each LED, resulting in a 4096-color display.

Saturday, April 22, 2006

Progress Update

LED Triplets
17 more done, leaving 193 left to go. I probably won't need many more triplets with 12" 4-conductor sections. They're quite long and way more than I need for most of the pixels.

I've made 60 holes (half of what I need) in the section I have (mostly) constructed. One per pixel, each slightly larger than 1/4". The largest drill bit I have is 1/4" and one LED head fits through just fine, but I need to feed the other two LED heads through as well, the last of which also has 4 wires to contend with as well. A few swipes with a circular file slots the hole well enough to fit everything fine.

That is all. Nothing major, just more busywork.

Labels: ,

Tuesday, April 18, 2006

Success after bug fixing

Well, I spent quite a few hours reducing code and trying to identify problem areas and in the end, I finally figured out the root of my problems.
I had a "while" loop that was supposed to be updating the data to be written out on the TWI bus each cycle, but with the mode that the driver chips were put in for 8 consecutive bytes being written, the while loop wasn't getting executed really at all. So it was basically writing the same first 1-byte register to each of the 8 1-byte registers. I had to disable, rework, and hard-code lots of sections until I figured this out, but after a quick code fix (the data to write is updated after the previous data is ACK'ed in the interrupt handler), this is now working wonderfully.

Unfortunately, there really isn't a whole lot to show yet. I was hoping to have a few nice videos for everyone of everything blinking nicely, but as it is right now, it's just a bunch of LEDs on the ends of wires. Once I get some holes drilled into the wall section, then I can actually get some pixel visualization and snazzyness.

Until then, lots of soldering left to do. I've decided that this next batch of 17 will use only a 6" piece of 4-conductor wire instead of a 12" piece. I'm still not entirely sure what lengths I'll need for where, so I'm not going to go off and make 200 triplets with 12" 4-conductor segments. So hopefully, this will give me a little bit better testing possibilities.


Friday, April 14, 2006

Driver board success

Sorry for the lack of updates this week. Lots of stuff going on and it's nice outside.

Driver Boards
So several hours after I made Saturday's post about getting 30 LED triplets done, I finally got the driver board with 4 driver chips communicating properly with the microcontroller. There were several levels of debugging involved.
  • The first was physical. There were two or more communication wires that weren't terminated properly on one end, causing the driver board to not be getting the correct signals. Time To Fix: ~1.5-2 hours (eek)
  • The second was logical. The /RST line going into the boards was being pulled low instead of high. I thought I had hooked it up to a power pin on the microcontroller starter kit board, but I guess I had it hooked up to ground. Time To Fix: ~20 mintues?
  • The third was functional. There were a lot of coding changes that needed to be made to get the uC to talk to 4 chips serially and found several "inconsistencies" with how I was doing it before with just 2 chips.

Programming Issues
I had the TWI slave device address set to active-low, meaning that the port that was low was the active chip. In a 2-chip situation, this wasn't an issue because one was low and the other was high. This was an easy fix; just point to the correct address (0x24 instead of 0x20).

There were a lot of "issues" I thought I was having with software that ended up being the wiring issue above. This caused me to spend most of my time debugging software, trying to figure out what was wrong. In the end, I figured it out, but I had been barking up the wrong tree. As such, I had lots of fun ripping out all the debugging code.

I had been storing each LED intensity value as an unsigned int (hah!). This is 4x the amount of storage space per LED that I needed. 4 bits needed vs. 16 bits per unsigned int. I then converted it to use 1 unsigned int per pixel, leaving only 4 bits per pixel wasted (instead of 36). However, this increased the overhead to store/retrieve the value of any given LED intensity, as I now needed to go through encoder/decoder functions.

I was still having issues getting each pixel to display a random solid color. I would get one of white, green, magenta (red+blue), or black. At first, I was scratching my head as black should have never been coming up. Then I realized that the processor was only 8 bits and an int would only be 8 bits as well. After some calming (count 10... 9... 8...) and looking in the processor spec, I finally find that ints really are 16 bits wide. I spent a little bit of time using the debugger to see if red, green, and blue were getting encoded and decoded properly (it appears they are). I still am not sure why red is showing up as black and blue is showing up as red+blue (or the other way 'round). Hopefully another debugging session will fix all of this.

LED Triplets
Some small progress to the soldering fun. Not much, but 1% is 1%.


Saturday, April 08, 2006

Slow week

Yeah, yeah... sorry about no updates. This week has been a little busy for me and I didn't have a whole lot of time to work on anything until today.

LED Triplets
I've finished the batch of 14 I was working on, so now I'm up to 30 of 240 done (12.5%).

Now that I have at least 20 LED wire segments, I'm going to stop working on construction and soldering for a bit. I need to verify that the TWI and the driver boards work correctly. The boards each have 4 driver chips and each driver chip can drive 5 pixels, so that gives me 20 pixels per driver board.
So all of my work for a while will be coding and wire crimping (not a whole lot of this).

Once I get the communication working properly, then I can continue on with everything else.
Hopefully, there won't be any major snags. I am prepared for one or more of the chips and/or boards not working properly, but if none of them work, then I'm going to have a lot of testing and re-engineering to do.

If all goes well, I'll have some nice, pretty movies of everything working properly in a week.

Labels: ,

Sunday, April 02, 2006

More updates

16 of 240 done... decent progress on the next 14

I've got both the backing pieces cut, along with the zig-zag edging on one side of each of them. I also attached them to the lattice with liquid nailz. Perhaps it was a little overkill to use that over wood glue, but I wasn't entirely sure how well the wood glue would adhere to the marker board; it's pretty smooth and wouldn't take the glue like normal wood would (hah!).

I ended up buying another dozen (!!!) clamps to make sure the wood was aligned properly as the glue was curing. They aren't light, so it made it quite awkward to handle the wall while it was drying (I had to flip it over after gluing and clamping it to make sure that the marker board properly stayed flat against the lattice).

Here's the progress so far:

It's decent and pretty sturdy now. Before, it was a bit flimsy and I had to be careful where and how I moved it.
There are still tiny air gaps between the floor and the lattice here and there, but a little silicone or caulk will tighten all that up. I'm not entirely worried about it, because the aluminum foil will be covering everything up anyway.

Labels: ,