Färg adresserbara LED Dsiplay (3 / 4 steg)
Steg 3: programvara
Funktionen "putc" kommer att placera en karaktär på skärmen enligt följande:
putc (tecken, position, förgrunden färg, bakgrundsfärg)
Detta visar bara två av funktionerna, det finns andra som ritade rutorna, linjer och textrullning från vänster.
Programvaran är uppbyggd i lager vilket gör det lättare att förstå och utveckla. Följande är en beskrivning av varje lager och hur det fungerar.
LED Driver
Det finns en fullständig beskrivning av driva dessa adresserbara lysdioder på http://www.bypic.co.uk/projects/colour-addressable-leds/ men en resumé inte kommer gå fel.
Den WS2811 registeransvarige behöver bara en tråd, signalen skickas från LED till LED på en specifik tempo (frekvens) och tidpunkten är viktigt. De enheter som används i den här skärmen är 400kHz som enligt databladet är halvfart, full fart är 800 kHz
1 och 0 är skickas som ovan där övergången från H till L inträffar före halvvägs för 0 och efter halva vägen för 1. Den faktiska tidpunkten för ramen eller cell är 2500nS för 400kHz. För BV500 löpande på 40MHz detta är 24 CPU cyklerna så det arrangeras det 1 är 16/8 cykler (hög/låg) och 0 är 8/16 cykler (hög/låg).
Detta görs genom att fördröja tidpunkten slingan med nop eller dummy instruktioner. Jag har sett den SPI gränssnitt som används för detta ändamål men kan inte förstå varför?
Nästa steg upp är att leverera LED med tre byte som kommer att beskriva färgen, är grön, röd och blå, ju högre nummer desto ljusare det särskilt färg. För enkelhetens skull de tre byte är placerade i ett 32-bitars heltal och det finns så många heltal som det finns lysdioder så för en remsa av 40 LED man 40 32-bitars heltal. En ByPic array används bekvämt lagra dessa och två dimensionell array används eftersom det finns 8 remsor, en dimension för varje band.
Eftersom tidpunkten är kritiska hanteras direkt i C, via en funktion plug-in. ByPic kan anropa en funktion och överföra information till den. Funktionen hanterar kritiska tidpunkten data som överförs till det skickas. Lyckligtvis lysdioderna behålla sin ställning och så plug-in bara behöver köra när det finns en uppdatering. Detta kallas render() som kommer att uppdatera alla 8 remsor.
Lysande en enskild LED är helt enkelt en fråga om anger array till krävs RGB och sedan gör den genom att anropa funktionen render(). Storleken på matrisen är större än 8 x 40 som några av de första byten i matrisen används att säga plug-in vilka port och linjer att använda så den faktiska första LED Strip 1 är disp(7,0).
Högre nivåer
Nästa uppsättning funktioner initiera matrisen och ta hand om Visa tecken. Teckenformer bildas med 5 byte och visas som en 5 x 7 cell på displayen. Jag hade redan teckensnittsfilen och så gjorde bruk av det.
En liten komplikation är det rullning, istället för att visa hela karaktären på en gång är det möjligt att bara visa en kolumn för det, det gör rullning möjligt.
Det finns 7 program i alla, som anges på baksidan av denna text. Förutom RTC beroende var en funktion i det tidigare. Detta kunde alla är placerade i ett program men genom att göra det här sättet gör utveckling mycket lättare.
Som exempel finns det ett grafikprogram som drar linjer och lådor etc. Genom att ha grundläggande funktioner på plats, i Flash var det lätt och snabbt att utveckla och få rätt dessa funktioner utan att behöva ladda alla tidigare funktioner om och om igen. På samma sätt har "effekter" programmet utvecklats efter grafikprogram använder vissa funktioner i grafikprogrammet.
Fallgropar
Som tidigare sagt denna display är ett koncept och så om du tänker bygga något liknande det då är följande saker att se upp för.
Döda lysdioder: Displayen byggde jag har 3 döda lysdioder – inte helt bara en färg. Det var inte något jag väntat och så kontrollerade inte för. Se till att alla färgerna fungerar innan du använder en remsa.
LED avstånd: Jag var under intrycket att när du köpt en 5m sträng av lysdioder som var alla en remsa, inte så. Lysdioderna är förenade med mellanrum genom lödning av koppar delar av PCB tillsammans. Gemensamt orsakar LED avståndet att variera och så dessa måste vara de lödas och lödda på rätt avstånd.
Konstruktion: Akryl på en aluminiumram fungerar bra men 20mm vinkel jag använde är inte riktigt tillräckligt djup för att hysa komponenterna.
Power supply: Om små 5V tillsynsmyndigheterna är används då en per två remsor är obligatoriska, de är billiga nog att göra detta men skulle ta upp något utrymme. Så jag skulle gå för en växling leverans tio ampere är ganska rejäl linjär strömförsörjning. Det nämns i texten är ett litiumbatteri och en väggladdare vårta typ. Detta kan fortfarande vara ett problem men eftersom jag antar att den genomsnittliga nuvarande dras i regionen i 2-4A
Förbättringar
Partier. men förmodligen en bra idé är att inkludera en DCF radio modulen tid och temperatur / hygrometergivare.