Stap 4: Van binaire getallen naar digitale logica
Disclaimer: Er is een kleine variant van de timing onderstaande afhankelijk van of u van een werkelijke WS2811 IC, of de ingesloten versie binnen de WS2812/WS2812B gebruikmaakt. De getallen gebruikt onder komen overeen met het laatste geval (WS2812/WS2812B). Als u van de WS2811 IC gebruikmaakt dan het gegevensblad te voor de enigszins verschillende nummers raadplegen (anders dan dat, alles anders hieronder beschreven is hetzelfde).
Beginsel van bewerking
De WS2811 verwacht twee dingen:
1) een puls (dat wil zeggen, rechthoekig) Golf signaal met een frequentie van ongeveer 800 KHz — andere frequenties eveneens werken, maar we houden tot 800 KHz in deze tutorial — die de intensiteitswaarden stelt in een interne shift register. Laten we er echter dat de WS2811 gedraagt zich anders dan een standaard shift register in die zin dat de gegevens zijn verschoven in een First Last-Out mode.
2) nadat de gegevens zijn verschoven naar de plaats, de WS2811 verwacht een laag signaal duurt ten minste 50μs om de gegevens op hun respectieve uitgangen klink.
Verschuiving van de gegevens
Wie niet vertrouwd met de term 'pulse wave' zou kunnen hebben gehoord van haar speciaal geval: de blokgolf. Dit soort niet-sinusvormige signalen bestaan uit een afwisselend amplitude tussen een vastgesteld maximum en vaste minimaal met een constante frequentie. Wanneer de afwisseling symmetrisch plaatsvindt, dat wil zeggen, hebben wanneer de tijd gedurende welke het signaal een maximumwaarde moet is gelijk aan de tijd gedurende welke het signaal een minimale waarde moet, dan we het speciale geval van een blokgolf. Op ongeveer 800KHz, elke periode van de pols golf is ongeveer 1.25μs lang (1 / 1.25μs = 800 KHz). We moeten aanpassen van de tijd gedurende welke het signaal is hoog of laag om het signaal van een 0 of een 1 voor de communicatie met de WS2811. Er is een fout in het gegevensblad van WorldSemi, dus de werkelijke waarde (krediet aan de mensen over bij Adafruit moeten voor het vangen van dit):
Toezending van een 1:
Tijd voor het signaal hoog blijven (T1H): 0.8μs
Tijd voor het signaal blijven laag (T1L): 0.45μs
Toezending van een 0:
Tijd voor het signaal hoog blijven (T0H): 0.4μs
Tijd voor het signaal blijven laag (T0L): 0.85μs
De gegevens arrêtering
Na het versturen van alle de bits overeenkomen met de intensiteitswaarden van de LED's die we willen af van controle, dan we moeten gewoon houd de waarde van de pols golf op de minimumwaarde voor ten minste 50μs.
Toezending van een 'bevel van Klink":
Tijd voor het signaal blijven laag (TL): > = 50μs
Dit soort signaal heeft de speciale eigenschappen van zichzelf wordt geklokt, en niet-nulzijnde retourneren (NZR). Dus, wat overblijft is om te zien hoe we onze ATMega328p tot een precies getimede signaal dat wij kunnen doorgeven aan de matrix met WS2812 RGB LED's kunt instellen. [Spoiler alert!] We gebruiken de bitbanging-techniek.