Sketch Behavior Affected by Tlc.init Placement

I’m working on a light clock that grabs the time from a RTC and displays it using LEDs and have come some strange results. In the following sketch:

#include <Time.h>
#include <Wire.h>
#include “Tlc5940.h”
#include <DS1307RTC.h> // a basic DS1307 library that returns time as a time_t

int HourHold;
int MinuteHold;
int DimFactor = 13;
int MaxBright = 3900;
int CurrSec;
int UpIntensity;
int UpChannel; // channels 1-12
int DownIntensity;
int DownChannel;
int HourChannel; // channels 17-28
int DigitOne;

void setup() {
Tlc.init(); 1
Serial.begin(9600);
setSyncProvider(RTC.get); // the function to get the time from the RTC
if(timeStatus()!= timeSet)
Serial.println(“Unable to sync with the RTC”);
else
Serial.println(“RTC has set the system time”);
// Tlc.init(); 2

}

void loop()
{
ChannelCalculate();
LEDParameterDisplay();
LEDDisplay();
digitalClockDisplay();
delay(1000);
}

void ChannelCalculate()
{

HourChannel = (hour() % 12) + 17; // Determine which LEDs to illuminate
CurrSec = ((minute() % 5) * 60) + second(); // and set the intensity of the
UpIntensity = CurrSec * DimFactor; // minute LEDs
DownIntensity = MaxBright - UpIntensity;
DownChannel = minute()/5 + 1;
if(DownChannel == 0){
DownChannel = 12;
}
UpChannel = DownChannel + 1;
if(UpChannel == 13){
UpChannel = 1;
}
}

void LEDParameterDisplay()
{
Serial.print("Hour Channel: ");
Serial.println(HourChannel);
Serial.print("Up Channel: ");
Serial.println(UpChannel);
Serial.print("Up Intensity: ");
Serial.println(UpIntensity);
Serial.print("Down Channel: ");
Serial.println(DownChannel);
Serial.print("Down Intensity: ");
Serial.println(DownIntensity);
}

void LEDDisplay()
{
Tlc.clear(); // address the appropriate LEDs thru the two
Tlc.set(UpChannel, UpIntensity); // TLC5940NTs
Tlc.set(DownChannel, DownIntensity);
Tlc.set(HourChannel, MaxBright);
Tlc.update();
}

void digitalClockDisplay(){
// digital clock display of the time
Serial.print(hour());
printDigits(minute());
printDigits(second());
Serial.print(" “);
Serial.print(day());
Serial.print(” “);
Serial.print(month());
Serial.print(” ");
Serial.print(year());
Serial.println();
}

void printDigits(int digits){
// utility function for digital clock display: prints preceding colon and leading 0
Serial.print(":");
if(digits < 10)
Serial.print(‘0’);
Serial.print(digits);
}

If the Tlc.init() is in position 1 above, I get an erroneous time and date from the RTC but the LEDs display as expected. If the Tlc.init() is in position 2, the time and date are correct, but the LEDs flicker terribly. I have also noticed that, if I pull the connection from Arduino pin three to the 5940s before starting processing, the time and date are read correctly - but that disables the 5940s driving the LEDs.

It is more likely due to a wiring error.

For example one fellow in here, who was encountering weird TLC5940 behavior, realized that he had connected the VPRG pin to GND rather than Vcc.

Start by carefully checking your wiring to the TLC5940.