Jump to content
greeeg

120 LED Ring Clock

Recommended Posts

Got my components, soldered up the first completed controller board.
 
post-274-0-39697500-1396616473_thumb.jpg
The small level shifter, is designed around a dual n/p mosfet. This will probably be changed to a dedicated level shifter in the future. Due to gate capacitance of the mosfets, the output isn't as square as the input. Luckily it gets close enough to work. This is mainly due to the high frequency of the LEDs signal.

 

The accelerometer is connected via IIC, which I have never used extensively before. I still haven't worked out the repeated start condition, which the accelerometer requires for individual register reading.

post-274-0-12001800-1396617895_thumb.jpg post-274-0-06478300-1396618069_thumb.jpg

 

so it's proven that the G2553 has enough grunt to run all 120 LEDs. 70% of RAM is used as a rgb framebuffer, with 152 bytes left there is still plenty for some rich applications.

 

And since people don't read anything these days here is a video. (sorry about the audio, I thought I should pick something ;))

 

Even though I've bought a fancy DSLR photographing/filming LEDs is very difficult. I've been experimenting with settings, but this still does look better in real life.

Share this post


Link to post
Share on other sites

Update for users that have requested controller boards.

 

post-274-0-17915400-1396883697_thumb.jpg

They've all be soldered up, and they all program fine.

 

I just want to make sure that the accelerometers work, and that these boards can actually drive LEDs :P

 

I hit a wall with my demo program, and the i2c code I was using, it didn't support repeated start, which this accelerometer needs to read from any registers other than accelerometer data.

I only made progress when I started using an ez430-rf2500 board, hooked upto a sensor board, (both MSPs have UCB0 for i2c), using my scope I finally got some code to work.

 

Unfortunately as I'm a full time uni student, I might not have enough time (during business hours) to post the boards off tomorrow. But it will happen later this week.

 

Edit:

I think others mentioned they've measured current, but I couldn't find their results.

I don't have any high powered +5v sources (except maybe some PC ATX power supplies hmmmm)

 

So 3 LEDs max brightness (r,g,b ), measured 0.28A @ 5.0v

so, following that logic, all 120LEDs would come to 0.28 * (120/3) = 11.2A, which is about 56W

 

If you wanted to run them at that brightness they do start to generate heat. But it is a possibility ;)

Share this post


Link to post
Share on other sites

You're running the LEDs off a G2553, that's quite impressive. I tried to drive WS2812 using the USCI, failed, and then tried the timer, also failed. I'm assuming you're driving them directly using cycle-counting?

 

As for I2C restarts, USCI does support them, but the stock TI code (TI_USCI_I2C_master.c) does not seem to. I vaguely remember being annoyed about this in the past, but this is not the first time I was annoyed at the sad state of TI-supplied libraries. This is why I wrote my own USI I2C library, after all.

 

Some I2C devices that are specified to use repeated start will also let you read in two phases, with a stop condition inbetween, remembering the register address. You might try if that works for you.

Share this post


Link to post
Share on other sites

You're running the LEDs off a G2553, that's quite impressive. I tried to drive WS2812 using the USCI, failed, and then tried the timer, also failed. I'm assuming you're driving them directly using cycle-counting?

 

As for I2C restarts, USCI does support them, but the stock TI code (TI_USCI_I2C_master.c) does not seem to. I vaguely remember being annoyed about this in the past, but this is not the first time I was annoyed at the sad state of TI-supplied libraries. This is why I wrote my own USI I2C library, after all.

 

Some I2C devices that are specified to use repeated start will also let you read in two phases, with a stop condition inbetween, remembering the register address. You might try if that works for you.

Not cycle counting. I'm using the USCI_A. clocked at just the right frequency. I can transmit a 0x80 or 0xe0 to correspond to the '1' or '0' state. This function is written in assembly, but it doesn't have to be as the timing between pulses isn't as critical as the +width.

 

Here is code that @@RobG wrote. (maybe out of date) but it's the exact same method that I am using. His timings are slightly different. 

 

Yes, I have the USCI_B I2C working now. I only implemented my particular case, START write 1 byte, START read x bytes STOP. I did this with polling rather than an interrupt driven approach, because I can't be too generous with static RAM. 

 

The libraries provided give a bit of insight into how the hardware works. But you will learn more if you can write your own functions though, it just takes time. which may or may not be valuable. 

 

The MMA8453 resets it's address counter when a STOP is received. Alot of people online have found this frustrating :P 

Share this post


Link to post
Share on other sites

Not cycle counting. I'm using the USCI_A. clocked at just the right frequency. I can transmit a 0x80 or 0xe0 to correspond to the '1' or '0' state. This function is written in assembly, but it doesn't have to be as the timing between pulses isn't as critical as the +width.

 

Here is code that @@RobG wrote. (maybe out of date) but it's the exact same method that I am using. His timings are slightly different. 

 

Yes, I have the USCI_B I2C working now. I only implemented my particular case, START write 1 byte, START read x bytes STOP. I did this with polling rather than an interrupt driven approach, because I can't be too generous with static RAM. 

 

The libraries provided give a bit of insight into how the hardware works. But you will learn more if you can write your own functions though, it just takes time. which may or may not be valuable. 

 

The MMA8453 resets it's address counter when a STOP is received. Alot of people online have found this frustrating :P 

 

USCI! That's even more impressive, then. I never managed to get the timings just right, and I couldn't get new data to the USCI in time

Share this post


Link to post
Share on other sites

I've hit a wall when I started testing some of the boards. 

They all program fine. They all seem to be able to drive LEDs.

 

But, for half of the bards, the crystal oscillator doesn't start.  :'(

 

This is the particular crystal I have on all the boards. It is working perfectly on half of the boards, but not on the other half. :/

I've been reading This app note from TI, and am experimenting with some of the solutions provided.

Share this post


Link to post
Share on other sites

Turns out that the solution was a lot simpler.

After trying various load capacitance values, and testing some parallel resistances I discovered that the did boards had a parallel resistance 1-2M ohm. The working board did not.

The culprit. Flux that hid from my washing process.
post-274-0-17765800-1397306749_thumb.jpg
Looks fine once I had soldered and washed the board to remove flux residue. But let's look underneath.
post-274-0-77504700-1397306907_thumb.jpg

Because this is a low power oscillator this is enough to render it useless. I have hot air removed/cleaned/hot air reworked all the non working crystals. And they now all work.

Shipping Monday when the PO opens up. Thanks for everyone's patience :)

Share this post


Link to post
Share on other sites

an update.

 

I've never encased a full electronics project in clear resin before, but thought it would make the ring look more professional.

post-274-0-34063400-1398175793_thumb.jpg

 

I've got to wait a day or two to make sure it's fully cured, then I have to find out how to remove it safely from my mold.

post-274-0-90428400-1398175411_thumb.jpg

 

 

It'll either be awesome, or a complete failure. :P

Share this post


Link to post
Share on other sites

So I must have got my portions wrong when I mixed in the catalyst with the resin, because it's only just beginning to dry. and it's been a few days already.

 

I can't sand/buff it until it is completely hard, so it might be a few more days u_u

 

@@igendel that's a pretty cool project. I was hoping to have this clock finished to a reasonably high standard to enter the same competition on instructables.

 

Also see here, adafruit now sell a 1/4 segment of a 60 pixel ring.

Share this post


Link to post
Share on other sites

I thought of your clock when I saw that Neopixel ring. Perfect if someone wants to make a smaller simpler clock along the same lines as yours.

Share this post


Link to post
Share on other sites

Positioning the LEDs like they do would be a pain to hand solder. I know that adafruit probably Pick 'n Place and reflow this board.

 

I regret soldering the LEDs on my ring before the capacitors, I melted the edges of a few of the LEDs. :/

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×