Has anyone made an LED driver based on LM3463 6 channel driver IC?

Maybe you should let DK know where they can find some when their customers are calling :lol: Heck I think they offer 3000 count reels,...they need to put a call into the Allegro.
 
Well everyone must be out working in their gardens,....no more discussions happening,...I'm missing the all the good input.:wavehand:
 
Well everyone must be out working in their gardens,....no more discussions happening,...I'm missing the all the good input.:wavehand:

Hey Rick!

I'm patiently waiting for the "Man in the Brown Van" to deliver some more PcB's that I ordered last week. I redesigned my 5up A6211/ Atmega combo PcB a little bit in order to add a little more protection to the micro-controller. I added current limiting resistors and 5.1V Zener diodes to all five PWM channels, just in case one of the A6211's goes up in smoke. I also added a few diodes here and there to isolate the 5V and 12V feeds from each other and to provide a bit of reverse polarity protection. I'll post some pictures after I've had a chance to solder a couple of them up.:beer:
 
I wish these things were easier to build. Each one takes me about an hour to complete. At least they're "Purdy" this time around. I like the look of the copper heat sinks against the Royal Blue. I made a few changes in this version. I reduced the number of 47uf caps from five to two and added some protection for the micro-controller by adding current limiting resistors and Zener diodes to each PWM output + a couple of diodes near the 5V regulator for reverse polarity protection. Hopefully the changes will make the micro-controller a little harder to destroy LOL.

Here's some photos-

012_zps73984f23.jpg


009_zpse7636e6e.jpg


Here's a close up showing the newly added current limiting resistors and Zener diodes.

013_zps514dcaff.jpg
 
Looks like the A6211/A6213s have vanished from stock everywhere again - and I was getting excited for this as a cheaper and higher current option to the LM3404.
 
That is one sweet looking board O2 ! The blue really makes the parts pop. I recognize the top half of the board, but not the lower right. I see you added a RTC :thumbsup: and pins for 18b20"s, but have you added the controller also? What are all the pins at the bottom? I know you can plug fans in, what else does that baby do? :wavehand:---Rick
 
That is one sweet looking board O2 ! The blue really makes the parts pop. I recognize the top half of the board, but not the lower right. I see you added a RTC :thumbsup: and pins for 18b20"s, but have you added the controller also? What are all the pins at the bottom? I know you can plug fans in, what else does that baby do? :wavehand:---Rick

Rick- This version has all the same features as the previous "black" version. I just tried to bullet proof this one a little bit, by adding a few bits of protection circuitry. This PCB features-

5 independently controllable driver channels w/ 4 user selectable current levels ( 300, 700, 1000, 1400ma )

12V & 5V on board power for powering cooling fans and the Micro-controller.

User programmable on board Atmega328-AU w/ DS1307RTC (Can be overridden by an external controller easily, as all on board "outputs" are tied to screw header or female pin "inputs".)

(2) I2C connections with prewired pulldown resistors.
(2) Dallas OneWire connections with prewired pullup resistors.
On board fan controller circuitry with 2 connection points for 2,3,&4 wire cooling fans.

very serious looking board well done

Thanks Dale!
 
Have people had problems blowing the controllers? Mine still seem to be fine, despite 500 set ups, strip downs and the odd muppet event (me wiring things up wrong). Only issue I have is getting them to talk to each other over I2C. Got code that works fine from an arduino mega to one board but can't get the same code to work using two of the black boards :(

Tim
 
I know I've said it before, but I feel the need to repeat - they are cracking boards :)

Thanks O2Surplus :)

Tim

Thanks Tim!

To answer your question, the answer is NO. Nobody has blown up anything yet. I'm just making improvements to the design as time permits to help harden the components against accident that could occur in the future. The changes add a bit of expense, and a few minutes to the build time, but I feel that it's cheap insurance.
 
Finally - a simple bit of code for using one controller to tell another one what to do with the PWMs of the LEDs attached to it. Also can get temperature (only integers so probably not ideal for tank temp control, but fine for heat sink).

Probably not done in the best way, as it is my first attempt at arduino (and C)! Any critique welcome :)

Master
Code:
#include <Wire.h>
int slaveADDR1 = 4;
byte LEDChannel[5] = {3, 5, 6, 9, 10};
unsigned int LEDBrightness[17] = {0, 1, 2, 4, 8, 16, 32, 64, 128, 64, 32, 16, 8, 4, 2, 1, 0};
unsigned int Temp = 0;

void setup()
{
  Serial.begin(115200);
  Wire.begin(); // join i2c bus (address optional for master)
}

void loop()
{
  for (int i=0; i <= 4; i++){
    for (int j=0; j <= 16; j++){
      writePWM(slaveADDR1,LEDChannel[i],LEDBrightness[j]);
      delay(100);
    }
    getTemp(slaveADDR1);
    Serial.print("Temp ");
    Serial.println(Temp);
  }
}

void writePWM(int ADDR,byte channel,unsigned int PWMLevel)
{
  byte c[2];
  c[1] = highByte(PWMLevel);
  c[2] = lowByte(PWMLevel);
  Wire.beginTransmission(ADDR);
  Wire.write(channel);
  Wire.write(c[1]);
  Wire.write(c[2]);
  Wire.endTransmission();
}

void getTemp(int ADDR){
  byte tempChar;
  Wire.requestFrom(ADDR,1);
  while(Wire.available())
  { 
    tempChar = Wire.read();
  }
  Temp = word(0, tempChar);
}

Slave
Code:
#include <Wire.h>
unsigned int newPWM = 0;
int channel;
byte c[2];
char flag = 'N';
unsigned int temp[4] = {20, 25, 30, 35};
int i = 1;

void setup()
{
  Wire.begin(4);                // join i2c bus with address #4
  Wire.onReceive(receiveEvent); // register event
  Wire.onRequest(requestEvent);
  Serial.begin(115200);         // start serial for output
  pinMode(3,OUTPUT);
  pinMode(5,OUTPUT);
  pinMode(6,OUTPUT);
  pinMode(9,OUTPUT);
  pinMode(10,OUTPUT);
}

void loop()
{
  if (flag == 'Y') {
    newPWM = word(c[1],c[2]);
    analogWrite(channel, newPWM);    
    flag = 'N';
  }
}

void receiveEvent(int howMany)
{
  flag = 'Y';
  if (howMany == 3) {
    channel = Wire.read();
    c[1] = Wire.read();
    c[2] = Wire.read();
  }
}

void requestEvent()
{
  Wire.write(byte lowByte(temp[i]));
  i++;
  if (i > 3){
    i = 0;
  }
}
Obviously will need updating to fit in with whatever code you want to use for actually deciding on the PWM and reading the temp from temp probes. But that should (hopefully) be easy enough.

If anyone finds it useful (or has any questions/issues), please let me know :)

Tim
 
It will run as many LED channels as you want. Essentially all it does is call a procedure with I2C address and two numbers (one is LED channel, the other the PWM) which then get written to the I2C device at the address you specify. The code for the slave reads them in and then writes that PWM level to the analogue pin matching the channel number.

Also, the master device can request the temperature from the slave, so an integer is passed from slave to master.

These are really just code snippets which can work as standalone now just for me to check they actually worked, but to be of any real use, people will have to integrate them into whatever code they are using for actual control.

I posted it in here as it allows one arduino (be it running jarduino or whatever) to control LEDs on O2Surplus' 5up boards with built in arduino, but since I haven't actually built my lights yet, I haven't integrated it into any control programs (I'll be writing my own as opposed to using jarduino, anyway).

Tim
 
Back
Top