TLC59711 inconsistent behaviour - randomly powers off my LED

CircuitPython on hardware including Adafruit's boards, and CircuitPython libraries using Blinka on host computers.

Moderators: adafruit_support_bill, adafruit

Please be positive and constructive with your questions and comments.
Locked
User avatar
Pawelkosi
 
Posts: 18
Joined: Thu Jul 08, 2021 1:10 pm

TLC59711 inconsistent behaviour - randomly powers off my LED

Post by Pawelkosi »

Hi Guys,

Hope someone will be able to help me here as I am stumped as to what next should I do / check.
I will do my best to be as brief as possible.

I am using TLC59711 breakout board to drive 4 IR emitters (IR LEDs).
When I assemble everything on a breadboard (using jumper wires) it works, and works well. LEDs stay on and keep on (although I did not try to leave them on for longer than 5 min).
Just FYI I had to solder in an additional resistor (1.2k Ohm) to the breakout board as I needed more power to drive my IR LEDs.

Here is my problem:

When I move to my own custom PCB something goes wrong.
  • My custom PCB is exact copy of the wiring from a breadboard (I triple checked) and that in turn is taken from adafruit learn article for TLC59711.
  • Instead of jumper wires I use ribbon cable (2x20) to connect my Xavier NX (dev board from nVidia with the same interfaces and pinout as RaspberryPi) to my custom PCB (more on that later as I think it has something to do with the issues I am having)
  • When ribbon cable is connected the LEDs light up, stay on for several seconds and just power off. If I run a test script again to switch them on, they switch on and then go off again.
  • When I connect my custom PCB with jumper wires I get entirely different result. The LEDs power on, stay on for 60 - 90 sec and then start to blink roughly every second. The blink is short and seems consistent.
  • I do not use all the lanes from the ribbon cable, only 8 (SPI, 3.3v, GND and 3 other general IO pins for lighting normal LEDs directly from the board.
  • FYI the TLC59711 is powered by external PSU (I have tried 5v 15W 3A and 12v with similar ratings and results are the same) - the four LEDs in total draw about 240 mA.
So it seems that the ribbon cable makes a difference?

Reading about it online (could not find anything specific for my use case) it seems that the clock timings might be affected by the extra PCB between TLC59711 and Xavier NX? Am I on the right track, and if so how would I go to fixing that - I am really stumped on where to start.

Secondly, do I need to use different connector / cable combo that ribbon cable as it seems that it is interfering?
  • I tried making the ribbon cable very short (about 2cm / 1 inch) and the same issue happened. Just power off and never come back on.
Below is the code I am using to test the TLC59711:

Code: Select all

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# CircuitPython

# SPDX-FileCopyrightText: 2021 s-light
# SPDX-License-Identifier: MIT
# Author Stefan Krüger (s-light)

"""TLC5971 / TLC59711 Example."""

__doc__ = """
tlc59711_singlechip_autoshow.py - TLC59711AutoShow minimal usage example.
simple demo of the TLC59711 16-bit 12 channel LED PWM driver.
Shows the minimal usage - how to set pixel values.
the TLC59711AutoShow class automatically writes the pixel values on each change.
this makes it very slow on lots of pixel changs but is convenient for only a handfull of pixels..
Author: Tony DiCola, Stefan Krueger
Enjoy the colors :-)
"""

import board
import busio
import time

import adafruit_tlc59711

print(__doc__)

# Define SPI bus connected to chip.
# You only need the clock and MOSI (output) line to use this chip.
spi = busio.SPI(board.SCK, MOSI=board.MOSI)
pixels = adafruit_tlc59711.TLC59711AutoShow(spi)

# Ways to set the values:
# just a list or tuple with 3 integer values: R G B
# each 0 - 65535 or 0.0 - 1.0
# every chip has 4 RGB-LEDs (=12 Channel)
#pixels[0] = (50111, 50111, 50111)
#pixels[1] = (0, 0, 100)
#pixels[2] = (0.01, 0.0, 0.01)
#pixels[3] = (0.1, 0.01, 0.0)

# You can also explicitly control each R0, G0, B0, R1, B1, etc. channel of the first ic
# by getting and setting its 16-bit value directly with properties.
# For example set channel 2 to 1/4 green (i.e. G2):
pixels.r3 = 65535
pixels.g3 = 65535
pixels.b3 = 65535

pixels.r2 = 65535
pixels.g2 = 65535
pixels.b2 = 65535

pixels.r1 = 65535
pixels.g1 = 65535
pixels.b1 = 65535

pixels.r0 = 65535
pixels.g0 = 65535
pixels.b0 = 65535

User avatar
Pawelkosi
 
Posts: 18
Joined: Thu Jul 08, 2021 1:10 pm

Re: TLC59711 inconsistent behaviour - randomly powers off my

Post by Pawelkosi »

Hey Guys, just wondered if anyone can help me?

I have found the solution to the issue of flickering - the chip was overheating. A small radiator and a fan solved that issue.
With the other issue of just powering off I still have no idea - but I was able to rule out that ribbon cable being the culprit.

Maybe I have not given you enough information so I will try to better describe what is going on.
  • I use the TLC59711 breakout board to drive 4 IR LEDs
  • I had to solder in an additional 1.2k Ohm resistor to the breakout board
  • In the same project I also run a BNO085 breakout board from adafruit.
  • TLC59711 uses Pin 19(MOSI), 23 (SCK) and GND, power is delivered from external 5v 3A PSU. GND from the PSU is connected to a common ground.
  • BNO085 uses I2C (Pins 3 and 5 on RasPi / nVidia Xavier), pin 1 (3.3v) and GND
  • When I wire everything like I mention above on the breadboard it works just fine. I can get readings from the BNO085 and the LEDs stay on
  • On my own custom PCB (which is nothing more than exact copy of the wiring I tested on the breadboard) I can run the TLC59711 on its own with no problems (with all the jumper wires for BNO085 disconnected)
  • However when I connect even just the wires for the BNO085 the TLC59711 switches the LEDs off.
  • I can restart the TLC59711 by setting full brightness of the LEDs - but as long as the wires and / or the BNO085 is connected they simply go off in a matter of 2 seconds (it is always around 2 seconds)
  • The PCBs are extremely simple, basically pin sockets for the breakouts, traces, barrel jack for power and IDC sockets for ribbon cables
  • I should mention there are two PCBs - first one has the 40 pin socket to connect to RaspberryPi / Xavier where I take the six lanes I need plus GND and run them to TLC59711 and to a 10 pin IDC socket. The 10 pin IDC socket has both the three lanes + GND needed for BNO085 and +V plus 4 out signals from TLC59711. Second PCB has four LEDs in a constellation and a pin socket for BNO085. Apart from the breakouts there is no other logic on the PCBs. I use the smaller PCB for infrared tracking with a rotation data from BNO085
What I tried:
  • Apart from what I mention above
  • I have checked all the connections on the PCBs - they are so simple that there is very little room for error. All traces go where they should and there is no shorts.
  • I can always get the data from BNO085 - it does not care if TLC is there or not. It just always works
  • TLC59711 will only keep LEDs on if BNO085 and its jumper wires are disconnected.
  • I have tried several power supplies to the same effect
  • I have reconstructed the same circuit several times on the breadboard and it works fine. Which is the most baffling thing, and the reason why I thought that the issue was in the ribbon cables.
Reading this post: viewtopic.php?f=47&t=123614 made me wonder if maybe the issue is in some interference in the GND. The breadboard power supply uses that breakout board that fits nicely into the + / - lanes. I tested my circuit (on my PCBs) using normal off the shelf PSU (from RS Components) - I've tried three to the same effect. That is the only thing I can think of.

Below are the circuit diagrams:
Jig.jpg
Jig.jpg (166.65 KiB) Viewed 67 times
Adapter.jpg
Adapter.jpg (376.77 KiB) Viewed 67 times

User avatar
Pawelkosi
 
Posts: 18
Joined: Thu Jul 08, 2021 1:10 pm

Re: TLC59711 inconsistent behaviour - randomly powers off my

Post by Pawelkosi »

Figured out that the issue was with the PSU, lots to learn for me here but using the PSU for breadboard that has all that circuitry to 'clean' the signals was what I needed. It all works now.

Locked
Please be positive and constructive with your questions and comments.

Return to “Adafruit CircuitPython”