Interaktiva LED öl Pong tabell (50 / 87 steg)
Steg 50: Programvara: hur en TLC5940 fungerar
Varje TLC5940 lägger till sexton 12-bitars PWM utgångar till vår krets som vi kombinerar att kontrollera RGB skida och att styra LED ringen och boll brickor. TLC5940 får sina data skiftat i seriellt så vi måste kontrollera data, klocka och andra styrsignaler för föraren att fungera korrekt. PIN 18 är GSCLK signalen som behöver en hög frekvens PWM att hålla utgångarna uppdaterad, för detta kommer vi offra PWM2 modulen om mikrokontroller. En uppdelning av stiften är nedan:
XLAT: Används för att spärren data in i TLC5940 efter att alla data har flyttats i.
Tomt: Markerar slutet på en PWM cykel. När drog hög det kommer att inaktivera alla output, när drog låg det kommer åter aktivera utgångarna och börja en ny PWM cykel.
GSCLK: Styr av klockfrekvensen för PWM cykeln. Vi använder PWM2 på mikrokontroller för att uppdatera denna med en hastighet av 250KHz.
DCPRG: Väljer källan till nuvarande gräns registret. Detta används i Dot korrigering läge.
VPRG: Används för att välja den aktuella gränsen registrerar eller intermittensen register för att skriva.
XERR: Vi använder inte detta stift. Det kommer att låta dig veta om chippet är överhettning eller har en utbränd LED.
SCLK: Håller varje chip synkroniseras samtidigt flytta data.
SIN: Detta är där data får flyttas in i TLC5940.
SOUT: Detta är datan ut från TLC5940. Detta ansluter till den nästa överlappande TLC5940 synd input som tillåter oss att seriekoppla flera TLC5940 tillsammans.
I min kod, har jag packat data som skiftas in i TLC5940 så att vi kan använda en av SPI modulerna i mikrokontroller för att skicka data. Detta är ett stort plus som SPI kan skicka data mycket snabbare än om vi skulle göra det i software med lite smällar. Här är en uppdelning på hur till få en TLC5940 konfigurerade och igång:
1) kör TLC5940_Init() att initialisera alla stift och flaggor.
2) aktiverar PWM2 för GSCLK kör en frekvens på 250 KHz. Vi uppdaterar TLC5940 vid 60Hz (16384μs per uppdatering) och varje utgång har 4096 steg (12 bitar).
GSCLK uppdateringsfrekvensen = (60 Hz * 4096 steg) = 245760 Hz = ~ 250 KHz
3) aktiverar alla timer avbrotten som uppdaterar TLC5940s. Detta görs genom att ringa Modules_Init().
4) ange dot korrigeringen för varje TLC5940 genom att ringa Dot_Correction(). Detta skickar 96-bitar för varje TLC5940 och justerar hur mycket ström som kommer från varje utgång. Jag använda bara standardvärden (0x3F).
5) anger den inledande gråskala. Efter denna rutin, vi kommer att uppdatera gråskala data automatiskt med SPI2 genom XLAT_Interrupt(), men den första gråskala data rutinen skicka ett extra lite till varje TLC5940. Eftersom vi inte kan ändra en SPI-modul för att skicka en extra bit, gör vi allt detta i programvaran genom att ringa Set_Initial_Grayscale().
6) efter den inledande gråskalan har ställts in, vi kan ställa upp den andra SPI modulen och vår XLAT_Interrupt() rutin kommer att börja sända data med SPI-protokollet. Vi kallar SPI2_Init() på denna punkt.
7) the TLC5940s är nu helt drift och kan ha data skrivs till dem. Innan jag börjar min huvudloop kod köra jag också en funktion som kallas Reset_All_Variables() som återställer alla flaggor och globala variabler som vi använder för tabellen öl pong. Detta sätt vi vet vilka data lagras i alla variabler på starta.
Välkommen att leta upp TLC5940 databladet som det går mycket mer på djupet än jag gjorde. Som jag sagt tidigare, det är bra att veta hur chipet fungerar men det är inte avgörande i detta projekt som dataöverföringen och signal kontroller hanteras automatiskt i avbrotten.