Using BC327 instead of BC337 but not working as expected?

Are you still using the BC327 that you had backward ? I would get rid of the 470 ohm resistor then set IREF pin of TLC5940 to a max of 10mA

No I have swapped that BC327 out!

Ok, just tried a 3.9k on the iref pins so should be around 10mA. taken out the 470R but still gets blisteringly hot

edit. DOH looks like I had this one back to front too! I'm getting mixed up with the symbols!

Seems to work OK now and keep the heat down! Only thing is the range seems inconsistent, with writes of anything >1000 (range is 0 - 4095) the bulb seems almost at max intensity? Is the 1K pullup effecting the base too much?

Pnp are bad players. Have you checked to see how much current there sourcing. I still stay there not t turning on like they should

What I see happening is your not pulling the PNP low enough. If your feeding 12 volts the base is only pulling down to 2.5 volts it needs to be below 2 volts if your using pwm. take some readings at the base to see if it's going low enough.

Seems to work OK now and keep the heat down! Only thing is the range seems inconsistent, with writes of anything >1000 (range is 0 - 4095) the bulb seems almost at max intensity? Is the 1K pullup effecting the base too much?

The 1 k pullup is to switch the PNP off 1 K looks about right the 470 set the base voltage to high because the dang TLC is doing the same thing.

The only thing I see would be to change the IREF to 25mA

The gray scale takes

Figure 18 shows the grayscale data packet format which consists of 12 bits x 16 channels, totaling 192 bits. The
format is Big-Endian format. This means that the MSB is transmitted first, followed by the MSB-1, etc.

When VPRG is set to GND, the TLC5940 enters the grayscale data input mode. The device switches the input
shift register to 192-bit width. After all data is clocked in, a rising edge of the XLAT signal latches the data into

I think the problem is that the LED lamps contain capacitors, so every time you turn them on there is a big current surge. Controlling them via the ADJ pin is the way to go. See the attached schematic. I included the diode because I know there is a bridge rectifier between the lamp supply pins and the regulator chip, and you don't want to drive the ADJ pin below the local ground of the regulator chip.

Thanks all, I will give that circuit a go controlling them via the ADJ pins, shame I broke the leg off of the ZXLD1360 though :frowning:

I see you show an arduino output, will it work on the TLC5940 outputs?

maybe in the meantime I will try a higher current on the base of the 327's and see if that increases PWM performance, only set to 10mA at the moment?

I just tried that circuit from DC on the MT7201, could see some dimming, but i'd only say 75%-100%. I tried a few different resistors on the base but still the same. I tried it connected to the arduino and running the 'Fade' sketch from the basic examples.

I keep thinking the ADJ pins are connected to something, I could measure about 0.5M ohm between it and some of the others so I tried lifting it, but managed to snap this one too. No ADJ pins to play with anymore, but I have some more bulbs on order :frowning:

The datasheet for the MT7201 says of the ADJ pin:

Multi-function On/Off and brightness control pin:
? Leave floating for normal operation.(VADJ=VREF=1.2V giving nominal average output current IOUTnom=0.1/RS)
? Drive to voltage below 0.2V to turn off output current
? Drive with DC voltage (0.3V<VADJ<2.5V) to adjust output current from 25% to 200% of IOUTnom
? Drive with PWM signal from open-collector or open-drain transistor, to adjust output current. Adjustment range 25% to 100% of IOUTnom for f>10kHz and 1% to 100% of IOUTnom for f<500Hz
? Connect a capacitor from this pin to ground to increase soft-start time. (Default soft-start time=0.8ms. Additional soft-start time is approx. 0.8ms/nF)

So you should be able to get 1% to 100% of Iout using the Arduino default PWM frequency of 490Hz. Note that the PWM will work in reverse, i.e. analogWrite(pin, 255) should turn the LED off, while analogWrite(pin, 0) should turn the LED fully on. I'm assuming that you haven't bypassed the bridge rectifier in the current regulator, that's why I included the diode in the circuit (to prevent Vadj going more than 0.3V below the ground connection of the MT7201).

To drive it from a TLC5940 I suggest this circuit. I've moved the diode to the emitter so that you can share 1 diode between all the channels.

To avoid breaking off the ADJ pin, I suggest you use a fine enamelled copper wire to make the connection to it.

Thanks DC! I notice that the same info is in the ZXLD1360 datasheet too. I hope the that the other bulbs use the same regulators. Shame I will have to wait for them to arrive, hopefully won't be too long.

I'm looking forward to trying your circuit when they do get here, hopefully I won't break the pins off! I used some kynar wire to connect to them but I tried to lift the pins in case the PCB connected them to anything else but I don't think it did :frowning:

I have not removed the diode bridge from them, it would be nice not to have to modify them too much. So am I right in thinking that I should connect all the emitters to the the same diode?

Many thanks

dtokez:
I'm looking forward to trying your circuit when they do get here, hopefully I won't break the pins off! I used some kynar wire to connect to them but I tried to lift the pins in case the PCB connected them to anything else but I don't think it did :frowning:

The only thing it might be connected to is a capacitor, to increase the soft-start time. You could use a multimeter to see whether the pin is connected to anything else, in particular to any capacitors.

dtokez:
I have not removed the diode bridge from them, it would be nice not to have to modify them too much. So am I right in thinking that I should connect all the emitters to the the same diode?

Yes. Make sure that each lamp you are controlling has a good connection between one of the pins and ground. To avoid damage in the event of a broken ground connection, you might want to connect a resistor of about 470 ohms or 1K between the transistor collector and the ADJ pin.

Thanks DC! I don't think they were connected to anything, I lost the pad on the MT7201 but the pad on the ZXLD1360 seems to be O/C

Looking forward to the other bulbs arriving now for more testing! Hopefully we can get it to work :slight_smile:

Great stuff, just hooked up the circuit on one of the bulbs that arrived today (the last example posted by DC) and it works, with no excessive heat from the BC327.

The only thing is that the lamp will not turn fully off if I send 4095, very nearly off but not fully. Also I only notice any dimming effect at sends of approx >3500.

I have tried both 10 & 20mA current on the tlc with both configurations of the base pull ups - 4.8k pulled to 5v and 10k pulled to 12v but all of the above gives the same results?

Thanks!

Your original photo.

You'll find it's amplifying the current eg 1ma in 500ma out gain out of 500...

also the highest voltage out is base pin - voltage drop.. not the best way.

Sorry I don't quite understand what you mean?

It seems to me that the transistor is not switching on hard enough, any ideas why?

The last example I sent uses an npn transistor e.g. BC337, not a pnp transistor like BC327. Your BC327 is acting as a diode. Replace it by an non transistor. This will make the dimming work the right way round e.g. 0 should be off and 4095 will be max brightness.

Hi DC, my mistake many thanks for pointing that out. I will try right away when I finish work!

Do you think this will solve the problem of the lamp not being switched all the way off when I send a 0?

Many thanks as always

Yes. When you set the pwm to the maximum value 4095 then the output drivers are turned on for 4095/4096 of the time. So if you invert the pwm as you have done by connecting it incorrectly, with pwm set to 4095 the led will be on for 1/4096 of the time.

IT WORKS! I'm very happy now, many thanks for the guidance David! :grin:

I hooked up a POT and started some serial debugging to test and the range seems pretty good in corresponding to the bulb's brightness, but I think it seems to be weighted a little towards the ON end of the spectrum - in other words it gets pretty bright to early. How could I fine tune this?

The way it is hooked up now is with 10mA current set in the TLC (20mA works just as well) and with the 337 base pulled up to 12v through a 10k. Before I go ahead and build the 12 channels on some strip board and install the lot in my lounge ceiling I'd just like to check that this would be the preferred setup if you were making the same thing?

Pretty impressed with the TLC5940 now and the £2 3W eBay special bulbs are not too bad either :slight_smile:

Thanks again

dtokez:
I hooked up a POT and started some serial debugging to test and the range seems pretty good in corresponding to the bulb's brightness, but I think it seems to be weighted a little towards the ON end of the spectrum - in other words it gets pretty bright to early. How could I fine tune this?

The eye does not perceive brightness linearly. So you need to change the relationship between pot setting to LED power from linear to a power law or exponential law. Currently, you are probably doig something like this:

  unsigned int potVal = analogRead(pot);
  unsigned int ledVal = potVal/4;    // convert 0..1023 from analogRead to 0..4092 for TLC5940

A very simple modification is to use square law (warning: untested code!):

  unsigned int potVal = analogRead(pot);
  unsigned int ledVal = ((unsigned long)potVal * (unsigned long)potVal)/256;    // convert 0..1023 from analogRead to 0..4092 for TLC5940

Another way is to use exponential law (warning: untested code!):

  const float factor = 0.002;  // adjust this to get required response
  unsigned int potVal = analogRead(pot);
  unsigned int ledVal = (unsigned int)(4095 * exp(potVal * factor)/exp(1023 * factor));    // convert 0..1023 from analogRead to 0..4092 for TLC5940

dtokez:
The way it is hooked up now is with 10mA current set in the TLC (20mA works just as well) and with the 337 base pulled up to 12v through a 10k. Before I go ahead and build the 12 channels on some strip board and install the lot in my lounge ceiling I'd just like to check that this would be the preferred setup if you were making the same thing?

Using a 10K pullup to +12V is a good choice, and provides 1.2mA BC337 base current. This has to be sunk by the TLC5940 to turn the transistor off. So any current setting for the TLC above 1.2mA will do.

Thanks again David, I was not aware about the way we perceive brightness. I will certainly implement another law when I come to mapping values in the project :slight_smile:

I would also like to use 3 of the channels to control some RGB strips. I have a TIP122 wired up as per the attached schematic (not using a regulator though just a simple led load), linked from the arduino playground (base connected to TLC output via 1k and base pulled down to gnd through a 12k). But it does not work how I had hoped.

I have a LED hooked up through a resistor to 12v and the cathode to the emitter, but it is on full time with the TLC set anywhere between 0-4095.

Any ideas what could be happening here?
TIP122 datasheet: http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/DATASHEET/CD00000911.pdf