Step 71Hardware debugging: Broken LEDs
We had a couple of LEDs break actually. Luckily the hardest one to get to was only one layer inside the cube.
To remove the LED, just take a small pair of needle nose pliers and put some pressure on the legs, then give it a light touch with the soldering iron. The leg should pop right out. Do this for both legs, and it's out.
Inserting a new LED is the tricky part. It needs to be as symmetrical and nice as the rest of the LEDs. We used a helping hand to hold it in place while soldering. It went surprisingly well, and we can't even see which LEDs have been replaced.
| « Previous Step | Download PDFView All Steps | Next Step » |





























































































![Hard Wired LED Cube: [No Programming]](http://img.instructables.com/files/deriv/FTD/SF1T/GO8DC8KW/FTDSF1TGO8DC8KW.SQUARE.jpg)















http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1286718155
I simply used an LM386 with an Elecret microphone. 1K resistor between mic and Vcc (for power/signal) and use the 200 gain capacitor as suggested in the spec sheet with the output going to PA7:
http://www.national.com/mpf/LM/LM386.html
I have a (for me) very odd problem with my led cube, two rows of my cube don't work properly, they seem to display one column of an animation copied to all of the rows columns. And here's the tricky part, if I move my finger near one of the misbehaving ICs, they go completely crazy, blinking all leds of the respective row completely randomly.
I trieb to switch them, but with no result. The wiring looks good so far, I checked for shorts each time a new line of the latch array bus was completed and found none.
Could someone help me with this? Because right now I'm completely clueless.
thank you
guess i just need to recheck all of the joints. is there any good advice on doing that? is it enough to simply heat them up and hope for a better connection or should i worry about removing any of the old solder and applying new?
thanks!
btw. while measuring the voltage I found that nearly no IC got the whole 5V VCC, they all measured around 3.5 to 4.5 Volts, but most ICs worked correctly.
I assume the filtering caps in front of the ICs are either soldered badly, as the voltage in front of the caps measures 5.2V constant, it looks like 300°C wasn't enough temp for soldering correctly in a cold basement.
But i found it very interesting that the ICs would go completely nuts when I moved my finger near them, I didn't need to touch them, hovering 5-10mm above the ICs was enough to trigger the random behaviour.
You're absolutely right, I wired them in series.
No clue why I thought they had to be soldered like that,
I'll try to resolder them and see if that fixes the problem.
Thank you.
I have got the same problem
but I have one question Can be use DM74LS574N
Instead of 74hc574
Is this the problem?
thank you !
LS stands for LOW Power Schottky and can only run UP TO 5v!
D0-D3 = data bus
D8-D10 = latch select
D11 = OE
A0-A3 = layer transistors
Simple enough.
The super slimmed down code (slimmed to simply turn one LED on) looks like this:
#define AXIS_X 1
#define AXIS_Y 2
#define AXIS_Z 3
volatile unsigned char cube[8][8];
volatile int current_layer = 0;
void setup()
{
int i;
for(i=0; i<14; i<plus><plus>)
pinMode(i, OUTPUT);
DDRC = 0xff;
PORTC = 0x00;
TCCR2A = 0x00;
TCCR2B = 0x00;
TCCR2A |= (0x01 << WGM21);
OCR2A = 10;
TCNT2 = 0x00;
TCCR2B |= (0x01 << CS22) | (0x01 << CS21);
TIMSK2 |= (0x01 << OCIE2A);
}
ISR (TIMER2_COMPA_vect)
{
int i;
PORTC = 0x00;
PORTB &= 0x0f;
PORTB |= 0x08; // output enable off.
for (i=0; i<4; i<plus><plus>)
{
PORTD = cube[current_layer][i];
PORTB = (PORTB & 0xF8) | (0x07 & (i<plus>1));
}
PORTB &= 0b00110111; // Output enable on.
PORTC = (0x01 << current_layer);
current_layer<plus><plus>; //not sure why this wouldn't show in the post
if (current_layer == 4)
current_layer = 0;
}
void loop(){
int i,x,y,z;
while (true)
{
setvoxel(0,3,2);
}
}
// Set a single voxel to ON
void setvoxel(int x, int y, int z)
{
if (inrange(x,y,z))
cube[z][y] |= (1 << x);
}
// This function validates that we are drawing inside the cube.
unsigned char inrange(int x, int y, int z)
{
if (x >= 0 && x < 4 && y >= 0 && y < 4 && z >= 0 && z < 4)
{
return 0x01;
} else
{
// One of the coordinates was outside the cube.
return 0x00;
}
}
The problem is that in addition to voxel 0,3,2 turning on, the entire row 0 plane comes on too (that is, the 16 voxels from 0,0,0 to 3,0,3). I loaded the effect_planboing function just to see what would happen and same thing, the XZ planes along the Y axis for row 1, 2 and 3 work fine, but the row 0 plane just stays full on.
So, any ideas? I checked the latch for row 0 thinking there might have been a problem causing it to be stuck "ON" but that doesn't seem to be it.
Thanks for any suggestions!
LSC
i be thanks full (^ ^)
First thing you have to do is identify where the problem is.
1) To check if the problem is with the ground layer transistors, try to connect one of the layers directly to ground. If it lights up, your transistors aren't working properly.
2) To check if there is a problem with the latches, connect VCC to one of the columns, via a resistor. If the column lights up, there is a problem with your latch array.
Does the ATmega boot up? It should blink the status LEDs until the main button is pressed. If the code is compiled for the wrong chip etc, it can fail or reboot itself over and over.