Leuk dat er zo veel mensen met de TLC5940 aan het experimenteren zijn, maar ik heb op dit forum nog nergens iets kunnen vinden over de manier waarop ik 'm aan wil gaan sturen.

Wytse Talsma had op http://www.circuitsonline.net/forum/view/87666 iets staan wat hij deels "geleend" had van http://www.picbasic.co.uk/forum/archive/index.php/t-11603.html, waar iemand geprobeerd heeft een Arduino-programma om te zetten naar PIC-Basic. Dat zal vast wel werken, maar die PIC is meer bezig met het genereren van simpele clockpulsen dan met "nuttige" zaken. Prima voor zijn simpele toepassing (of was dat alleen een testje?), maar volgens mij niet de manier.

Ik zit meer in de richting te denken van http://sites.google.com/site/artcfox/demystifying-the-tlc5940. Die pakt het volgens mij slimmer aan door de PIC-clock rechtstreeks als PWM-clock te gebruiken (wat bij de TLC5940 dan "GSCLK" heet) en een tellertje mee laat lopen die na 4096 clockpulsen via een interruptroutine bekijkt of er nog nieuwe data in moet worden gelezen en vervolgens een nieuwe PWM-cyclus van 4096 pulsen start.
Alleen hij doet het in C en met een ATmega328P, ik wil zoiets met een PIC16F886 doen in PIC-Basic.

Nu hoef je niet dat hele verhaal te gaan zitten lezen (overigens wel heel interessant!), mijn vraag is eigenlijk alleen maar als volgt:

Ik wil dezelfde clock voor de PIC ook gebruiken als GSCLK voor de TLC5940 (mag ook Fosc/4 zijn) en Timer2 van de 16F886 (die op Fosc/4 loopt) via een Postscaler van 1:16 na iedere 4096 pulsen (= 256 * 16) een interrupt laten genereren, dan wordt de PIC zelf niet belast met het "dom" genereren van die clockpulsjes en kan die zich ondertussen mooi bezighouden met het inlezen/bedenken van volgende lichtpatroontjes/effecten.
Volgens mij kan dat alleen maar door de interne oscillator van de 16F886 te gebruiken (max. 8MHz in dit geval) en de clockpulsen van pin 10 (CLKOUT) af te halen?
Liever zou ik een extern kristal gebruiken van 20MHz, maar hoe krijg ik die pulsjes dan op mijn TLC? Is dat te maken?

hello

eerste sorry voor mijn nederlands ben ik franstaalijk

Maar ja uw kunt een PWM (hardware van u PIC16) gebruiken met 50% duty cycle om een mooie GSkCL te genereren.
so kun je zonder interrupt werken en het geeft meer tijdt op uw code te runen.

ecler2003

hmm..lijkt me sterk om dat uit de hardware PWM te trekken.
Laten we uitgaan van minimaal 100Hz PWM.
De PWM klok moet dan 4096*100 = 409kHz zijn.
Kun je dat halen??

En dan zal je nog steeds de blank pin moeten sturen na elke 4096e puls. Wordt toch een interrupt denk ik.

Nee, die GSCLK kun je beter direct uit je oscillator halen lijkt me.
Maar dat gaat niet echt lukken met een extern crystal.

Wat is er mis met de interne oscillator?

Dag

Op dit moment ik werk met een PIC18F4520 en met dit pic ik geruikt PWM1 op ccp1 met 410khz en duty cycle van 50% en elke 10ms (met een twwede pwm hardware met 100hz dus elke 4096 gsckl heb ik ook een blank plus xlat plus blank (zo ik set niewe waard in de counter pwm)
naturlijk de pic draait met 40mhz clock

maar als je heb een pwm waard van 8bit (0-255) je kan laten draien 25500hz (100*255) dus elke 255 gsckl (met de tweede pwm) geven Blank en Xlat

maar je moet werken met 8 bit waard en de TLC5940 werkt op 12bit dus ik stuur 8bit (via spi) dan 4*0 plus half of de tweede waarde dan det tweede deel van de tweede waard plus 4*00

zo XXXX XXXX eerste waard
0000 XXXX 1/2 half
XXXX 0000 2/2 half en.......

Ecler2003 en DIY bedankt, eindelijk na ruim een week toch nog wat antwoorden, ik had het eigenlijk niet meer verwacht...

De PWM van een 16F886 kan niet meer dan 20kHz halen, dus die 410kHz gaat daarmee echt niet lukken, dan kom ik een factortje 20 - 21 aan snelheid tekort. Die optie valt af, tenzij ik een ander type PIC ga gebruiken, maar wil ik dat?

Wat er mis is met de interne oscillator? Op zich niets, 8MHz is ook mooi. Dan heb ik op mijn pin 10 (CLKOUT van de PIC) mooi 2MHz voor de GSCLK van mijn TLC5940. Maar 20MHz is sneller en sneller is soms beter, behalve bij auto's en bij vrouwen, maar da's misschien iets voor een ander forum...

Ik weet eigenlijk niet hoeveel ik precies nodig heb om mijn LED's niet te veel te laten flikkeren, want ik heb nog nooit iets met PWM gedaan?
Om mijn openingspost niet nog langer te maken ben ik namelijk "vergeten" te vertellen dat ik aan de 16 uitgangen van die TLC5940 niet genoeg heb, ik wil namelijk 19 RGB-LED's aan gaan sturen, dat zijn dus eigenlijk 3 * 19 = 57 uitgangen.
Ik moet dus of die uitgangen nog een keer of 4 gaan multiplexen (4 * 16 = 64), of 4 van die TLC's in serie gaan zetten.
Naast het vullen van de TLC('s) met PWM-waardes en/of het multiplexen van de TLC-uitgangen heeft die PIC nog genoeg andere dingen te doen, vandaar dat ik 'm dus eigenlijk liever op 20MHz zou willen laten draaien.
Maar goed, misschien gaat het met die 8MHz ook wel lukken, ik denk dat ik maar 's een poging ga wagen met mijn idee van vorige week.
Tenzij er vandaag of morgen nog iemand anders met een geniaal idee komt, of als morgen blijkt dat die 27,5 miljoen van de Staatsloterij niet in Noord-Holland maar in Eindhoven is gevallen, dan schuif ik mijn vraag wel door naar een paar slimme Philips-ingenieurs... ;-)

Thanx!

Op 10 maart 2011 21:05:35 schreef ecler2003:maar je moet werken met 8 bit waard en de TLC5940 werkt op 12bit dus ik stuur 8bit (via spi) dan 4*0 plus half of de tweede waarde dan det tweede deel van de tweede waard plus 4*00

zo XXXX XXXX eerste waard
0000 XXXX 1/2 half
XXXX 0000 2/2 half en.......

Je Frans Nederlands is zo beroerd nog niet hoor, er zijn genoeg Nederlanders die het slechter doen, maar dit kon ik in eerste instantie niet helemaal volgen. Ik denk dat ik het nu begin te begrijpen en dan is dat helemaal nog niet zo'n gek idee!
Ik heb helemaal geen 12 bits per uitgang nodig, met die "goedkope" Made-In-China-LED-stripjes kun je toch geen tig-miljoen verschillende kleuren maken, als je al 16 verschillende kleuren kunt onderscheiden dan mag je al blij zijn. Daar moet ik nog 's even over nadenken (maar niet nu, ik ga slapen), denkt er even iemand hardop mee?
Maar waarom je de laagste 4 van die 12 bits "afplakt" met nullen als je er maar 8 wilt gebruiken is me (nog) niet helemaal duidelijk. Is het niet logischer om de hoogste 4 bits dan niet te gebruiken? De gedachtegang die daar achter zit dringt nog niet helemaal tot me door. Of heeft dat iets te maken met "MSB-first" of zo? Worden die getallen omgedraaid?
Whatever, ik denk er morgen nog wel even over na, ik heb mijn hersens vandaag al genoeg gepijnigd (ook op m'n werk).
Nogmaals, Merci!

Zit je vast aan die 16F PIC?
De PIC die ecler2003 suggereert heeft ook een interne oscillator, en deze heeft ook een PLL.
Dit betekent dat je 8MHz naar buiten kunt trekken en je code draait ook op 8MHz. (Met een 20MHz crystal op die 16F draai je op 5MHz).
Voor het afhandelen van die TLCs heb je weinig code nodig, en als je 3 van die TLCs daisy chained heb je naar mijn idee nog steeds plenty tijd over om allerlei andere zaken te regelen.

De 8bit 12bit conversie met de 4 nullen:
Als je een 8bit woord in een 12bit woord wilt stoppen en maskert de hoogste 4 bits met nullen, wordt je bereik 0 - 255 op een 4096 schaal. Dit schiet dus niet op, je LEDs zullen niet hoger komen dan 10% intensiteit.

Als je de laagste 4 bits met nullen vult is je bereik 0-4096, met de kattekening dat je increment met 16 stapjes ipv 1.
Maakt niet uit, je maakt op deze manier gewoon 8bit resolutie in een 12bit formaat.
Het heeft nog een tweede voordeel:
Je kunt een lineairiteits tabel maken omdat je nogal wat bitruimte overhebt. Deze 'gamma correctie' zorgt ervoor dat je in het hoge bereik nog steeds zichtbaar kunt regelen en je gemakkelijker fade-patronen kunt aanmaken.

EDIT/
Zoals je ziet lijkt het dus handiger om een 18F te nemen. De optie die ik je geef heeft een interrupt nodig, maar geen extern crystal. De optie die ecler2003 geeft heeft wel een extern crystal nodig, maar geen interrupt.
Ik sta overigens versteld van die 410kHz. Ik had niet gedacht dat je dat kon halen met die hardware PWM. Mooie oplossing ecler2003!
Anyway, 2 opties die werken, alleen met een 18F ipv 16F.

Dag allemal

ja DIY je heb gelijk, maar als je zet een mask op de MSB van de TLC dus je heb zo en format 0000 XXXX XXXX inderdaad je moet niet meer de TLC tot 4096 laaten tellen maar tot 255 en op dit moment een blank sturen dus tussen twee (PWM hardware of Interupt)heb je meer tijd om uw PIC18 iets laten doen.

100hz met 4096 stappen geeft een frequencie van 410KHZ
100HZ met 255 stappen geeft een frequencie van 25500 hz of 25,5 khz

om een antwoodt geven over de frequencie om geen flikker ledje hebben ik zeg alitjd dat je met 50hz iets ziet maar niets meer meer 60hz .

als je heb tooltje nodig om pwm hardare een timer configureren heb ik 2 programen gevond .

jean claude

smart! je reset de GSCLK gewoon na 256 pulsen. Had ik nog even niet gerealiseerd.

Om de flikker weg te krijgen hou ik altijd minimaal 200Hz aan. Ik denk dat 60Hz een beetje krap is.
Maar goed, experimenteren zal het bewijs geven.

Ik heb die TLCs nu draaien op 1800Hz, en dat heeft een nadeel dat als je met je oog snel langs de LED gaat, je de PWM trein kunt zien! Dus te hoog PWM-en is ook niet helemaal handig.

[Bericht gewijzigd door DIY op (68%)]

Nee hoor, ik zit nog nergens aan vast, ik ben nog niet verder dan een schemaatje op klad, maar van die 16F886 heb ik er toevallig nog een paar liggen, vandaar dat ik er daar eentje van wou gebruiken.
Zoals ik gisteren al zei weet ik nog niet eens of ik die uitgangen van de TLC ga multiplexen, of dat ik 4 TLC's aan elkaar ga knopen. Ik heb er nu maar 1 liggen, dus als ik voor die laatste optie kies dan moet ik toch ergens iets gaan bijbestellen en kan ik er net zo goed een of ander 18F'je bij doen.

In ieder geval (allebei) bedankt voor de goede tips, hier kan ik wel iets mee!

[EDIT:]
Ha, weer 2 antwoorden er tussendoor die ik nog niet had gezien.
Dat die GSCLK dan nog maar tot 256 hoef te tellen had ik (na de tip van ecler2003!) ook al gezien; na die 256 zijn toch alle LED's uit en heeft verder tellen tot 4096 geen zin meer. Inderdaad slim.
Maar dan moet je dus wel 0000 XXXX XXXX sturen en niet XXXX XXXX 0000 zoals je gisteren zei? Was dat een vergissing, of heeft dat iets te maken met MSB-/LSB-first op die SPI?

[Bericht gewijzigd door henk040 op (28%)]

Op 11 maart 2011 11:12:10 schreef henk040:
Maar dan moet je dus wel 0000 XXXX XXXX sturen en niet XXXX XXXX 0000 zoals je gisteren zei? Was dat een vergissing, of heeft dat iets te maken met MSB-/LSB-first op die SPI?

Je moet dan inderdaad 0000 XXXX XXXX sturen. Ik had dat verkeerd begrepen, want ik ging uit van 12bit resolutie.
Het is een slim trucje om met een lagere GSCLK te kunnen werken.
Let wel op dat je dan geen gamma correctie meer kunt toepassen zoals ik beschreef. Ik weet niet of je dat wilt of niet.

Ik zie het topic nu pas, anders had ik iets eerder van mij laten horen.

Ik heb een RGB led lichtkrant willen maken met de 5940, helaas niet gelukt door flikkering. µC was langer bezig met die 4096 klokpulsen dan iets anders. De volgende data werd ingeklokt terwijl die 4096 pulsjes gegeven werden, dus softwarematig ging het niet veel sneller.

Toen kwam ik de TLC5947 tegen, deze heeft een interne GSCLK van 4MHz. Dus geen 4096 pulsjes die door de µC gegenereerd moeten worden, maar door de TLC zelf gegenereerd worden. Hiermee denk ik dat het wel moet lukken, maar ik heb er niets mee gedaan dus kan er ook geen uitsluitsel over geven. Maar misschien interessant voor henk040.

Ik heb met de TLC5947 gewerkt en dat is inderdaad een stuk eenvoudiger. Je hebt nog meer uitgangen ook (24).
Deze chip was alleen in de laatste 9 maanden van vorig jaar nergens meer te krijgen. (niet bij farnell, niet bij RS, niet bij digikey)
Daarom ben ik noodgedwongen overgestapt op de 5940.
Ik zie nu dat ie bij Farnell weer voorradig is (wel een stukje duurder dan die 5940).
Let alleen wel op dat deze chip een andere footprint heeft dan de TLC5940!

dag vdebeck

Ja je heb gelijk ook het is ook voor mij een goed oplosing maar de tlc 5947 is alleen in smd formaat ik find dat heel kelin om te solderen .

Maar heb ik ook een modul van Brildea met 8 RGB led en een TLC5947 ales werkt perfect (www.Brildea.com)

De intern Clock is een grrot vorrdeel van deze TLC ik heb zoeen in DIP fromaat gezocht of en andere type maar niets gevond.

als u vindt of kent iets anders .... ben ik geinteresserd.

jean claude

De 5947 is enkel in HTSSOP en QFN package te verkrijgen, beide 32 pins. Grote voordeel is de interne oscillator van 4MHz, maar ook de 24 uitgangen (goed voor 8 x RGB led, wat bij de 5940 moeilijker is met 16 uitgangen).

Jammer dat die 5947 alleen als SMD verkrijgbaar is, ik heb nog nooit met SMD's gewerkt en ik zie daar eigenlijk wel een beetje tegenop. Maar misschien moet ik het gewoon eens proberen...

16 uitgangen, 24 uitgangen, maakt mij allemaal niet uit, ik heb er 57 nodig. Ja, raar getal ja, maar het is nu eenmaal zo.

Dat kant-en-klare spul op Brilldea.com is wel mooi, maar veel te duur! Afgezien van de prijs bedenk ik toch liever zelf een oplossing, dan kan ik ook zelf de afmetingen en aansluitingen bepalen, ik heb niet zo veel ruimte voor al die connectors aan de zijkant.
Ik heb ook eens gekeken naar die A6281 chip die ze op hun "LED Painter II-8" gebruiken. Leuk dingetje, maar dan heb ik er veel te veel nodig (1 per RGB-LED) en dan wordt het misschien ook een kostbaar geheel. Toch eens uitzoeken waar die A6281 te koop is en wat ze kosten per 20 stuks...

Maar bij het zoeken naar de datasheet van de TLC5947 kwam ik toevallig ook nog dit tegen:
http://e2e.ti.com/support/power_management/led_driverslcd_bias/f/192/t…
Ik ben op het moment niet in de gelegenheid om die (eventuele) mogelijkheid verder uit te zoeken a.d.h.v. datasheets e.d., maar ik ga daar toch eens naar kijken.
Deze persoon wil helemaal geen GSCLK gebruiken, hij wil de LED's "regelen" met de DC (dotcorrectie) van de TLC. Daarvoor zet hij wel eerst een paar clockpulsjes op GSCLK, stopt de GSCLK en daarmee dus ook de teller, waardoor de uitgangen hoog blijven en hij het verder met de dotcorrectie kan regelen in plaats van PWM? Het schijnt nog te werken ook (zegt hij)...
Okay, dan haal je dus geen 12-bits resolutie, maar dat was ik toch al niet van plan.

Dat gezegd hebbende en verder over de TI-website struinende begin ik trouwens steeds meer te twijfelen over het gebruik van die TLC5940. Waarom zou ik die gebruiken? Omdat "iedereen" daar mee bezig is?
Ik denk dat ik ook 's moet kijken naar de TLC5971 (speciaal voor RGB-LED's). Of misschien moet ik het wel veel simpeler aanpakken, zonder PWM, met een TLC5927, of een TLC59116, of ehhhh....
Ze hebben er zo veel!

[Bericht gewijzigd door henk040 op (11%)]

Ben je nog verder gegaan met de TLC5940? En, zo ja, heb je hier nog een stuk voorbeeldcode van?