Hi,
I am planning to make 8x8 RGB Led Table. Firstly i made a 4x4 prototype, i used 74HC595 for the anodes and TLC5940 for the R, G, B. Anodes in the columns connected together and R,G,B in the rows connected together as shown in the scheme.
!(http://[
http://s29.postimg.org/7uusbwpt3/multiplex_scheme.jpg
The 74HC595 and TLC5940 are connected to the Arduino. I didn’t use any capacitors or transistors.
The problem is that when i want to light up all the Red leds (or Blues or Greens) first row lights well without flickering but all the other leds are flickering and they are dimmer than the first row. I need help what could be the problem?
The code ise given below.
#include "Tlc5940.h"
int latchPin = 6;
int clockPin = 7;
int dataPin = 5;
byte data;
byte dataArray[10];
void setup() {
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
Tlc.init(0); // initialise TLC5940 and set all channels off
Serial.begin(9600);
dataArray[1] = 0x01;
dataArray[2] = 0x02;
dataArray[3] = 0x04;
dataArray[4] = 0x08;
dataArray[5] = 0xFF;
}
void loop() {
digitalWrite(latchPin, 0);
shiftOut(dataPin, clockPin, dataArray[5]);
digitalWrite(latchPin, 1);
for(int j=0;j<12;j=j+3)
{
Tlc.clear();
Tlc.set(j, 4095);
Tlc.update();
}
}
// the heart of the program
void shiftOut(int myDataPin, int myClockPin, byte myDataOut) {
// This shifts 8 bits out MSB first,
//on the rising edge of the clock,
//clock idles low
//internal function setup
int i=0;
int pinState;
pinMode(myClockPin, OUTPUT);
pinMode(myDataPin, OUTPUT);
//clear everything out just in case to
//prepare shift register for bit shifting
digitalWrite(myDataPin, 0);
digitalWrite(myClockPin, 0);
//for each bit in the byte myDataOut?
//NOTICE THAT WE ARE COUNTING DOWN in our for loop
//This means that %00000001 or "1" will go through such
//that it will be pin Q0 that lights.
for (i=7; i>=0; i--) {
digitalWrite(myClockPin, 0);
//if the value passed to myDataOut and a bitmask result
// true then... so if we are at i=6 and our value is
// %11010100 it would the code compares it to %01000000
// and proceeds to set pinState to 1.
if ( myDataOut & (1<<i) ) {
pinState= 1;
}
else {
pinState= 0;
}
//Sets the pin to HIGH or LOW depending on pinState
digitalWrite(myDataPin, pinState);
//register shifts bits on upstroke of clock pin
digitalWrite(myClockPin, 1);
//zero the data pin after shift to prevent bleed through
digitalWrite(myDataPin, 0);
}
//stop shifting
digitalWrite(myClockPin, 0);
}