Stap 50: Software: de werking van de TLC5940
Elke TLC5940 wordt zestien 12-bits PWM outputs toegevoegd aan onze schakeling die we combineren bepalen de RGB peulen te controleren van de LED-ringen en bal sluitringen. De TLC5940 betrekt haar gegevens verschoven serieel, dus we controleren van gegevens, klok en andere besturingsseinen om het stuurprogramma moeten te laten functioneren. PIN 18 is het signaal van de GSCLK welke behoeften een hoge frequentie PWM tarief om te houden van de uitgangen bijgewerkt, hiervoor zullen we de PWM2 module van de microcontroller offeren. Een uitsplitsing van de pinnen zijn hieronder:
XLAT: Gebruikt om de gegevens in van het TLC5940 klink nadat alle gegevens heeft verschoven.
Leeg: Markeert het einde van de cyclus van een PWM. Wanneer zal getrokken hoog zal alle van de uitgangen, onbruikbaar wanneer het lage trok de uitgangen weer in te schakelen en start een nieuwe cyclus van de PWM.
GSCLK: Hiermee bepaalt u de kloksnelheid voor de PWM-cyclus. We gebruiken PWM2 op de microcontroller te updaten met een snelheid van 250KHz.
DCPRG: Hiermee selecteert u de bron van de huidige limiet-register. Dit wordt gebruikt in Dot foutcorrectie.
VPRG: Gebruikt om de huidige limiet registreert of de taakcyclus registreert voor schrijven.
XERR: Wij gebruiken geen deze pin. Het zal u laten weten als de chip is oververhitting of een verbrande uit LED heeft.
SCLK: Houdt elke chip gesynchroniseerd terwijl het verschuiven van de gegevens.
SIN: Dit is waar de gegevens wordt verschoven naar de TLC5940.
Zuid: Dit zijn de seriële gegevens uit van de TLC5940. Dit verbindt met de volgende trapsgewijze TLC5940 SIN input die ons in staat aan daisy chain meerdere TLC5940 van elkaar stelt.
In mijn code, heb ik de gegevens die is verschoven naar de TLC5940 op een zodanige wijze dat we één van de SPI-modules in de microcontroller gebruiken kunnen om de gegevens te verzenden verpakt. Dit is een enorme plus zoals SPI gegevens veel sneller verzenden kunt dan als we moesten doen in software met bit bonzen. Hier is een analyse over hoe je een TLC5940 geconfigureerde en te activeren:
1) TLC5940_Init() uitvoeren om te initialiseren alle pinnen en vlaggen.
2) PWM2 voor GSCLK draaien op een frequentie van 250 KHz inschakelen. Wij vernieuwen de TLC5940 bij 60Hz (16384μs per vernieuwen) en elke uitgang heeft 4096 stappen (12-bits).
GSCLK-vernieuwingsfrequentie = (60 Hz * 4096 stappen) = 245760 Hz = ~ 250 KHz
3) alle timer interrupts die de TLC5940s bijwerken. Dit wordt gedaan door te bellen naar Modules_Init().
4) instelt van de dot-correctie voor elk TLC5940 door te roepen Dot_Correction(). Dit stuurt 96-bits voor elke TLC5940 en past de hoeveelheid stroom die afkomstig is van elke uitgang. Ik gebruik gewoon de standaardwaarden (0x3F).
5) met tekensetgegevens voor de initiële grijswaarden. Na deze routine, wij zullen de grijswaarden gegevens automatisch bijwerken met SPI2 via XLAT_Interrupt(), maar de eerste grijswaarden gegevens routine heeft voor het verzenden van een extra bit aan elke TLC5940. Aangezien wij niet het wijzigen van de SPI-module voor het verzenden van een extra beetje, doen we dit alles in de software door te bellen naar Set_Initial_Grayscale().
6) nadat de initiële grijswaarden is vastgesteld, wij de tweede module van de SPI instellen kunt en onze XLAT_Interrupt() routine zal beginnen met het verzenden van gegevens met de SPI-protocol. Op dit punt noemen we SPI2_Init().
7) de TLC5940s zijn nu volledig operationeel en kan hebben gegevens geschreven naar hen. Voordat ik begin mijn hoofdlus van code lopen ik ook een functie genaamd Reset_All_Variables() die alle vlaggen en globale variabelen die we voor het bier pong tafel gebruiken wordt opnieuw ingesteld. Op deze manier weten wij welke gegevens wordt opgeslagen in alle variabelen bij start up.
Voel je vrij om het gegevensblad TLC5940 opzoeken als het gaat veel meer in de diepte dan ik deed. Zoals ik eerder heb gezegd, het is goed om te weten hoe de chip werkt maar het is niet essentieel in dit project als de gegevensoverdracht en signaal besturingselementen automatisch worden verwerkt in de interrupts.