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.

Thursday, June 30, 2005

Assemblyline production (part deux)

LED Driver Boards

I must be getting better and more efficient at this soldering business.

It took me 3 hours to do boards #2 & #3 on Monday night. But by the end of board #3, my brain was kinda fried and I ended up soldering 2 of the headers on the wrong side of the chip before I realized it. It wasn't a big deal because they're just the headers for the LEDs, but it was still a screw-up.
Last night I decided to eschew the cross-pin resistance checking. I figured that it was just wasting time and probably making the solder connections worse in the end. Any sort of resistance was probably being caused by the flux and not because the solder between pins was "getting too close" to each other. I also decided to move towards a more-assemblyline approach and did 5 boards at once.

In total, it took me a shade over 3 hours to do all 5 boards.
On the top side, I spent 50 minutes doing all 10 driver chips, which included everything from fluxing the pads to doing connectivity testing and pin short testing. This comes out to being 12.5 seconds per pin. Not too shabby.
The bottom side faired even better for speed. It took me only 30 minutes to do all 10 driver chips. This comes out to be 7.5 seconds per pin, or 8 pins per minute. Basically, it was taking me about 1.5 minutes to place, align, and solder the chip, and another 1.5 minutes to test it.
Of the 480 driver chip pins that I soldered last night, there was only 1 pin that wasn't soldered correctly the first time and none of the pins were shorted. Yippie me!

I can't do any more boards at the moment because I've run out of driver chips. My initial order was only for 40 and I've used a few here-and-there for testing previously. So I need to order a few more of those before I can continue.


Wall Construction

I only spent a little bit of time on Tuesday cutting wood, but I basically doubled the amount that I had before and started on 6 more internal pieces. I realized that I need a lot more 1/2"x3" pieces and that the way I was cutting the small 5.5" pieces wasn't the way that the majority of them would need to be. Luckily, I only cut 4 of them this way (I need either 8 or 16 of them)... Wood is cheap anyway, so it wouldn't have been much of an issue either way.


Planning

I'll have to really dig into designing the microcontroller board now. I'm going to run out of stuff to do with the two current projects relatively soon, so I need to work on the other areas as well. I also need to decide on LED's. I still haven't purchased any large amounts of them or the resistors to go with them. I need to get a power cord for my power supply too, so I can test the LED's with the correct voltage.

Labels: , ,

Monday, June 27, 2005

Assemblyline starting

LED Driver Boards

I got my 60 driver boards on Friday, and boy do they look sweet:



I soldered up 1 of the boards on Friday night... It "only" took me about 3 hours to do it from start to finish, so hopefully I can find some ways to speed that process up. I was having some problems soldering the 3rd driver chip to the board. No matter what I did, it always seemed to screw up the cross-pin resistance (i.e. make the resistance smaller). I was really worried about losing the first board (kinda makes it a bummer to have the very first board not work), so I went and grabbed a bottle of hydrogen peroxide and a cue tip and completely went over all the contacts with it. There was a lot of "slag" on the pins and I couldn't seem to get rid of it... The H2O2 fixed that problem wonderfully.
In the end, I managed to get >1MOhm between every single adjacent pin pair. The entire first chip I did was >10MOhm... far exceeding my initial expectations. All of these measurements were taken directly after soldering the connections too. I will be going over the whole board with 99% isopropyl alcohol (hydrogen peroxide you get from the store is generally 70% at most) and then baking the chips at ~250F for about 6-12 hours. That should clear up any remaining issues with cross-pin resistance.


Wall Construction

I also stopped by Home Depot and picked up a bunch of wood and some tools to work with. My apartment isn't all that big and I don't really have any really-available working space, so I converted my kitchen into a woodshop. For the size and quantity I'm dealing with on this project, it's not too big of an issue.
For the exterior walls, I bought some 1/2"x3" planks. They were sorta spendy ($3.50 per 4') but I only need about 22' of it, so it's not all that bad. For the internal walls, I bought some 1"x3" planks. These were much cheaper; on the order of $1.50 per 8', and I only need 24' of them. The only internal walls that are going to be wood are the horizontal sections that have distance sensors on them (see the picture in Acrylic + Contact Paper = Super-Happy Fun Time). For all of the other internal walls, I'm going to be using some sort of thin metal (flashing?).
I only cut a few pieces on Saturday night (the top & bottom exterior pieces, an internal piece, and 2 of the zig-zag pieces on the side), just to test the feasibility of my work environment. It all seems to work OK, so that's yet another part of the project I'm able to work on.

Labels: ,

Monday, June 20, 2005

More parts

Not any big updates yet... My whole weekend was busy with another task and I had no time to do any real work on this project.

I ordered 60 LED driver boards with a modified layout from the original one. I had to enlarge all of the header vias. I also grew the board by 0.1" on each side (to 1.9" square) and moved stuff around a bit to adjust for this. "rev 3b" of the board should be here by about Friday or possibly Monday.

I also ordered a bunch of other stuff from DigiKey today. It was mainly just components for soldering the driver boards, but I also ordered the power supply I had picked out.
It's a power supply that outputs 5.1V and up to 13.6A (normal convection cooling) or 19A with forced-air cooling. If all 15*16*3 (720) LED's are on at 20mA each, that means that the wall will draw at-most 14.4A. I will probably mount a small (10mm or so) fan to blow across the power supply just in case.

Labels:

Friday, June 17, 2005

Driver boards

Before going off into the driver boards, I did a small amount of searching online and found that the Budweiser Times Square ad has been in place since at least late 1998. As you can see in this picture:

The countdown timer says 369 days, 7 hours, ?? minutes, 24 seconds to the millenium, which puts the date of the picture somewhere about December 27th at around 5pm, 1998. The display is 16 triangles wide and about 42 triangles (41 + 2 halves) high (my approximation of 16x45 was pretty damn close). Thankfully, as this picture shows, the display can show more than just red, white, blue, and tan.
From this picture:

you can sort-of see that each triangle pixel is made up of 21 smaller hexagonal pixels (wow... nested coolness, huh?) and the nifty-looking stars they were displaying for the US flag.

Driver Boards and Soldering

Man, I'm glad I only ordered 2 of those boards and w/o silk screening or a solder mask. They look really sweet:

but I found out that the holes I specified for the headers were way too small and unusable. I had to redesign the layout slightly because the power traces I layed out couldn't fit between the largened holes any more. The design increased only 0.1" on each side and left me with slightly more room to work with (it doesn't really matter a whole lot because the minimum area for cost is 4 square inches.

I've got that basically done and I think I'm going to put in an order for about 50 or so tonight. I only need 12 for the entire wall, but I've got to plan for screw-ups. The little bit of soldering I did on one of the boards was rather troublesome. I'm getting better, but I've still got a long way to go if I want to make 12 completely-working boards. The main issues I'm having are that there ends up being non-infinite resistance between the pins. Anything under 1 MOhm, I've found, is just asking for trouble. Hopefully, the solder mask will help fix all of those issues.

Even with the holes being way too small, I was able to solder the headers on (with a ton of solder) and test the board out. Of the 4 chips soldered on one of the boards, I've only really been able to get 1 of them working properly.


Not a whole lot of progress other than that... I've got another list of random things I need to order from Digi-Key next, but they can wait until I have something else more critical to order.

Labels: ,

Monday, June 13, 2005

Acrylic + Contact Paper = Super-Happy Fun Time

So I was informed (and it makes sense) that most people really don't have any idea what the wall will actually look like. I've talked a lot about it, but never really had any visual aide to go along with it. Well, here you go:



A small amount of explanation is in order for these pictures. The black-and-white one is fairly simplistic... just showing the pixels and the locations of the distance sensors. The heavy dark line running across the middle is the division between the two microcontrollers. One will be controlling the top half of components, another will be controlling the bottom half. The 2 zig-zag lines and the other 2 horizontal lines are meant to show how the LED driver boards are to be partitioned. Each board (with 4 driver chips) will cover a single region. Each of the 4 ADC's that I'm going to be using for the distance sensors will cover 2 rows of distance sensors.

If needed (for framerate reasons), I can also split the design up into 4 microcontroller regions, so each microcontroller has 60 pixels and 8 distance sensors. This may be a better approach, because I really have no idea how much computation or communication time is going to be needed for the ADC's. Switching over from 2 to 4 microcontrollers shouldn't be too much of an issue either. The colored plan is merely to illustrate the arrangement of driver chips to LEDs that they would be controlling. A single driver chip would be controlling all same-colored, touching triangles in a given region. So all of the bright yellow triangles on the first row are controlled by 1 driver chip, all of the darker yellow ones below it are controlled by a 2nd driver chip, etc. This makes 48 driver chips in total.


Acrylic + Contact Paper

So I picked up a smallish piece of acrylic, an acrylic knife, and a hard plastic "squegee" today for testing out my diffuser idea. First, I tried cutting the 0.093"-thick acrylic with the knife. It took about 10-20 scoring attempts before I was finally able to break it. If I were to use acrylic that thickness for the final project, I'll probably do 20-40 instead. It didn't quite shear perfectly.
After that, I attempted to apply contact paper to the thin strip I snapped off. It went OK, except that a few stray random hairs and other debris managed to get between the contact paper and the acrylic. The contact paper ripped rather easily if there is something hard under it when I was trying to remove air bubbles from under it. The effects of the rip were minimal and recoverable, but certainly not desirable.

For my second attempt, I moved to a safer area and tried to keep it as clean as possible. I was working on a much larger piece, one that required 2 full widths of contact paper to cover completely, so I had a much harder time getting it on there straight. I faired much better with debris between the contact paper and the acrylic, but it still wasn't perfect.

The results were, however, vastly superior to the paper I had been using before.
Here are 2 videos of the latest incarnation of microcontroller + driver chip test board with the acrylic and contact paper diffuser:

Dark Room (4.2MB)
Lightly Lit (3.7MB)


Of interest (that you can't tell at all from those videos) is that those 5 pixels are being driven by 2 driver chips. The first chip is driving the 2 pixels on the bottom (starting from the blank area) and the second chip is driving the remaining 3 pixels.
This setup is such that the contact paper is on the bottom side of the acrylic. I tried it the other way around (with the contact paper on the top surface) and it was far too fuzzy. My guess is that the light was getting diffused slightly through the acrylic and then hit the contact paper, which diffused it more, instead of the contact paper diffusing it completely and then the acrylic just transmitting the light. I'm no optics expert, but I do know what looks better.


Parts

I also got in another shipment of parts from DigiKey today. This shipment contained all the headers, sockets, and caps I'll need for the driver test boards that should be here on Wednesday. Progress marches on...

Labels: ,

Sunday, June 12, 2005

Driver board and parts

OK, it's been over a week since my last post again. My posts will probably be only 2-3 per week (or less, depending on how things go). It's summer and my desire to sit inside has waned slightly.

Driver Board Design

Last Friday/Saturday, I set out to design a board with 1 driver chip per board. This was fairly trivial, because it was just a single 24-pin chip, 2 resistors, 1 capacitor, and a bunch of headers (for input signals, LED power, and LED wires). The limiting factor on how small I was able to make it was the headers along the outside edge of the board. The final board for that design was 1.1" x 1.3".
Sunday/Monday, I decided to put 2 driver chips on a board. When I had computed the cost for ExpressPCB's "Production" service, they had a minimum area per board (for cost reasons) at 4 square inches, so if I ordered 48 driver boards, the per-area cost was very high. Also, I had a ton of dead space on the back side of the board (I basically didn't use it at all) and I could easily put the 2nd chip on the bottom of it without too much issue. The final size of that board was 1.2" x 1.3". I had expected it to grow a bit more than that, especially since I had switched to headers that were 2 rows instead of just 1.
Since the 2-board area was still well under 4 square inches, I decided to try to see how a 4-chip board would be. Man, oh, man was that rough to route. I placed the chips and optimized the routing so that the LED signal pins were the shortest and easiest to deal with, mainly because there are 60 on the board. What that left me was 4 chips (2 on each side of the board) basically in opposite corners all pointing at each other. While not extremely hard in itself, there are 3 common signal pins, power, ground, and a unique signal pin per chip that needed to be routed. And they all need to cross each other in the center of the board. Oh yeah, and I had to design the LED voltage source to be able to handle at least 1.2 amps (20mA per LED * 60 LEDs) so the traces needed to be pretty wide.

Here is the end result of 2-4 days of layout and tinkering:

Top + SilkscreenBottomTop + Bottom


This board is 1.8" x 1.8" (which is over double the area of the 2-driver board, but this one was designed better with ground plane in mind. All of the shaded areas on those images are part of the ground plane. The thick traces running along the bottom edge of the board are able to hold at least 1A (and there's complementary traces on the top and bottom sides of the board to help distribute the power).
I ordered up 2 boards with just the "Standard" service (It doesn't have the silkscreen layer--the yellow outline in the first picture, nor does it have a solder mask--any non-via and non-contact areas are coated so the metal can't be soldered) to see how things work with it.

I also ordered a bunch of headers for the boards and a 12-bit, 8-channel ADC from DigiKey. The ADC has almost the same pin pitch as the driver chips (the ADC has a pitch of 0.65mm, which is 25.6mils) and has 16 pins, so that should be "fun" to test. With 14 distance sensors per half of the wall, that means I need 2 of those chips per half. I still really don't know how I'm going to test them, since their package is so small and I don't want to order up another batch of DIP adapter sockets. I will probably just design the board for them and see how it goes. The only major issue is that each chip is $8.10. Granted, I only need 4 of them, but if anything goes wrong, then that's potentially $16 I've wasted on lazyness.

Wall Construction Design

Since I had no suggestions about other materials to use for the pixel walls, I had to start hitting up people about any ideas they might have. One of my coworkers had a great idea of using tin to separate the pixel walls. It's light, opaque, relatively-easy to work with, and cheap. Since I need to be able to mount the distance sensors in every-other row, I need those rows to still be wood, but the off rows can be tin dividers. Also, each row's pixel divisions can be all tin as well. The outside walls will still need to be wood, as will the floor of the pixels (which will be about an inch down from the top).
To counter the fact that some rows will have a wide piece of wood and others will have a very thin piece of tin, I think the best approach is just to paint the underside of the acrylic black to make a uniform pixel boundary. I should be able to get straight-enough lines by using masking tape and then using some sort of black paint (I'm not sure which will stick to acrylic best yet... I'll take any suggestions/comments on it).

I also came up with a great idea for a different diffuser. I had some contact paper just lying around and decided one day as I was walking out the door to go to work to see how well it would work. I grabbed a roll, peeled off enough backing to stick it over a pixel, and turned the pixel on. It was amazing! Completely solid color with no "pulpy-ness" to the diffusivity. I actually kill 2 birds with 1 stone with this too. Not only does it diffuse amazingly well, it's also its own adhesive to the acrylic. I just have to stick it on and that's it. That's not to say that getting contact paper to stick to a large area without any creases or air bubbles is easy, but it would certainly be easier (and look better) than using a bunch of sheets of paper.



Once I get these test driver boards in and wire up more than 5 pixels, I will get some more cool-looking videos for everyone. (They better be cool-looking).

Labels: ,

Friday, June 03, 2005

Soldering and code update

Sorry for the delay in posting... It took me a day or two to get back into it after my vacation.

Vacation Report

Budweiser has this billboard in Times Square in Manhattan that uses triangular pixels. I didn't even know it existed until this last weekend when I noticed it there. It was on the south end of the 7th Ave/Broadway intersection, right below the Cup-o-Noodles billboard.
The triangle orientation was rotated 90 degrees compared to what I'm planning on doing and it had about 3 times as many pixels as mine (its width was about the same as the height for mine, but its height was about 3x my width... in raw pixels that is, not dimensions). Unfortunately, it was a Budweiser ad and the only colors they ever used were red, white, blue (for the flag, of course) and tan (for beer and foam, along with white). I was really hoping to see other colors from it, but alas... that was all.

When I went back to look at it at night, I noticed that each of the pixels was made up of about 50 or so smaller pixels. I couldn't tell if the subpixels were rectangular or triangular, but I'm willing to bet that they're rectangular. There were a rather large number of the subpixels that had one or more of the RGB component colors blown out. For example, magenta where it should have been white, indicating that the green component was blown. Still, it looked really awesome from a technical standpoint (I really couldn't care less about the actual content of the ad).


Soldering

I got my new soldering iron and it works wonderfully. Wednesday night, I tried it out and I was amazed at how much easier the 1/64" (about 15 mils) tip was than the 50-mil tip I had before (imagine that). I was able to solder 2 driver chips onto 2 adapters without much problem. That being said, I still have some room for improvement. The first one I soldered had WAY too much solder on it and I had to use wick across all of the pins just to pull enough out. In the end, the worst cross-pin resistance I had was in the low MOhms. The second one faired much better (although I still had too much solder) and the cross-pin resistance increased an order of magnitude. Hopefully, by the time I actually start soldering the driver chips to the board, I won't get any resistance at all.


Coding

I spent the better part of this evening working on abstracting out some common tasks on the code to deal with programmatically setting pixel values better. At this point, I can call a function when I want to set any single register on a particular driver chip and I have a decent amount of automation in place for the 8-register writing necessary for all 15 LED intensity values.

I noticed that the code I had running before was resetting the driver chip each time it was writing out the intensity values, so by removing that code from the infinite loop, I was able to speed the code up immensely.

Currently, I have 2 driver chips hooked up and I can access each of them individually and assign a color to a particular pixel with relative ease.



I think I'm ready to lay out the driver chip board (should be easy... a header or two... the driver chip... and a couple of resistors) and possibly place an order on them. Progress continues!

Labels: , ,