Hi folks,
I'm having a bit of trouble with my latest project and require some help.
I'm still quite new to the world of diy electronic stuff and have only built a couple of LED cubes and a couple of other things so far.
I am now working on an RGB LED cylinder,(The 1 in the pic is not mine, this is the original by Dave Clausen) but I am having a nightmare with it and came here hoping to get the break I need.
The circuit consists of 2 boards.
The lower board is basically an arduino with an ATMEGA168, but it will also work with an ATMEGA328. The top board contains 5xIRLU3715PBF N channel Mosfets run by 3x TC4427ACPA Mosfet drivers and 4 daisy chained TLC5940NT's. see attached schematics
All the parts I have used are the same as the original cylinder, trying to source parts that are no longer made (IRLU3715PBF) is a real headache.
The trouble I am having is that none of the 4 TLC5940NT shift registers work right.
Only pin 28 is working on the first 3 registers, pin 28 chip 4 isn't on because there is no led connected to that pin.
The result of this is that only 3 of the 19 columns light up, and only in 1 colour.
The circuit is built on a breadboard because the pcb I etched is shorting out between almost all solder points.
No matter how many times I rebuild the circuit, I always get similar results but have never had my cylinder display more than it does now.
Basically the help I need is....
Why is only the first outpin on the shift registers working ?
Could it be a code problem, I am doing this project without really understanding it because all parts are provided (Eagle files for both boards and code).
This is the introduction to the code...
// this is technically an Arduino sketch but it is basically just straight ANSI C
#include <avr/pgmspace.h>
#define spi_wait() while (!(SPSR & (1<<SPIF))) {}
#define nop() asm volatile ("nop")
#define xlat_high() PORTB |= (1 << PB2)
#define xlat_low() PORTB &= ~(1 << PB2)
#define blank_high() PORTB |= (1 << PB1)
#define blank_low() PORTB &= ~(1 << PB1)
#define gsclk_high() PORTD |= (1 << PD5)
#define gsclk_low() PORTD &= ~(1 << PD5)
#define PIXELS_PER_PLANE 19
#define PLANE_COUNT 5
#define PIXEL_COUNT (PIXELS_PER_PLANE * PLANE_COUNT)
static byte pixels[PIXEL_COUNT * 3];
#define OUTPIXEL_COUNT 64
static byte plane_trans[] = {
0, 2, 4, 1, 3
};
in case anyone can help me, and I hope you can.
This project has cost me too much money to just shelf it, I must finish it.
PLEASE HELP, if you can that is. Everything
I'm having a bit of trouble with my latest project and require some help.
I'm still quite new to the world of diy electronic stuff and have only built a couple of LED cubes and a couple of other things so far.
I am now working on an RGB LED cylinder,(The 1 in the pic is not mine, this is the original by Dave Clausen) but I am having a nightmare with it and came here hoping to get the break I need.
The circuit consists of 2 boards.
The lower board is basically an arduino with an ATMEGA168, but it will also work with an ATMEGA328. The top board contains 5xIRLU3715PBF N channel Mosfets run by 3x TC4427ACPA Mosfet drivers and 4 daisy chained TLC5940NT's. see attached schematics
All the parts I have used are the same as the original cylinder, trying to source parts that are no longer made (IRLU3715PBF) is a real headache.
The trouble I am having is that none of the 4 TLC5940NT shift registers work right.
Only pin 28 is working on the first 3 registers, pin 28 chip 4 isn't on because there is no led connected to that pin.
The result of this is that only 3 of the 19 columns light up, and only in 1 colour.
The circuit is built on a breadboard because the pcb I etched is shorting out between almost all solder points.
No matter how many times I rebuild the circuit, I always get similar results but have never had my cylinder display more than it does now.
Basically the help I need is....
Why is only the first outpin on the shift registers working ?
Could it be a code problem, I am doing this project without really understanding it because all parts are provided (Eagle files for both boards and code).
This is the introduction to the code...
// this is technically an Arduino sketch but it is basically just straight ANSI C
#include <avr/pgmspace.h>
#define spi_wait() while (!(SPSR & (1<<SPIF))) {}
#define nop() asm volatile ("nop")
#define xlat_high() PORTB |= (1 << PB2)
#define xlat_low() PORTB &= ~(1 << PB2)
#define blank_high() PORTB |= (1 << PB1)
#define blank_low() PORTB &= ~(1 << PB1)
#define gsclk_high() PORTD |= (1 << PD5)
#define gsclk_low() PORTD &= ~(1 << PD5)
#define PIXELS_PER_PLANE 19
#define PLANE_COUNT 5
#define PIXEL_COUNT (PIXELS_PER_PLANE * PLANE_COUNT)
static byte pixels[PIXEL_COUNT * 3];
#define OUTPIXEL_COUNT 64
static byte plane_trans[] = {
0, 2, 4, 1, 3
};
in case anyone can help me, and I hope you can.
This project has cost me too much money to just shelf it, I must finish it.
PLEASE HELP, if you can that is. Everything
Attachments
-
33.5 KB Views: 88
-
82.8 KB Views: 84
-
25.7 KB Views: 56