Étape 4: À partir de nombres binaires de logique numérique
Avertissement: il est une petite variation du moment décrit ci-dessous selon que vous utilisiez un IC WS2811 réelle, ou la version embarquée à l’intérieur de la WS2812/WS2812B. Les numéros utilisés ci-dessous correspondent à ce dernier cas (WS2812/WS2812B). Si vous utilisez l’IC WS2811, consulter la fiche technique pour les numéros légèrement différentes (autre que cela, tout autre chose décrite ci-dessous est le même).
Principe de fonctionnement
Le WS2811 attend deux choses :
1) une impulsion (c.-à-d., rectangulaire) signal d’onde avec une fréquence environ 800 KHz — autres fréquences fonctionnent aussi bien, mais nous allons coller à 800kHz dans ce tutoriel — qui définit les valeurs d’intensité dans un registre à décalage interne. Notons toutefois, que les WS2811 se comporte différemment qu’une norme Registre à décalage car les données sont transférées dans un mode de données dernier sorti.
2) une fois que les données sont déplacées en place, le WS2811 attend un signal faible durant au moins 50μs afin de verrouiller les données à leurs sorties respectives.
Déplacer les données
Ceux qui connaissent le terme « pulse wave » pourraient avoir entendu parler de son cas particulier : l’onde carrée. Ce type de signaux non sinusoïdaux se composent d’une amplitude alternée entre fixe au maximum et un minimum fixe à une fréquence constante. Quand l’alternance se produit de façon symétrique, c'est-à-dire lorsque la durée pendant laquelle le signal a une valeur maximale est identique à la durée pendant laquelle le signal a une valeur minimale, puis nous avons le cas particulier d’une onde carrée. Environ 800 kHz, chaque période de l’onde du pouls est environ 1.25μs long (1 / 1.25μs = 800 KHz). Pour communiquer avec le WS2811, nous avons besoin régler la durée pendant laquelle le signal est élevé ou faible afin de signaler un 0 ou un 1. Il y a une erreur dans la fiche technique de WorldSemi, donc la valeur réelle devrait être (crédit pour les gens plus à Adafruit pour la capture de cela) :
Transmettre un 1:
Temps que le signal reste élevé (T1H): 0.8μs
Temps que le signal reste faible (T1L): 0.45μs
Transmettant un 0:
Temps que le signal reste élevé (T0H): 0.4μs
Temps que le signal reste faible (T0L): 0.85μs
Verrouillage des données
Après l’envoi de tous les bits correspondant à des valeurs d’intensité de tous les voyants que nous voulons contrôler, alors nous avons besoin il suffit de maintenir la valeur de l’onde du pouls à sa valeur minimale au moins 50μs.
Transmettant un « commandement de loquet »:
Temps que le signal reste faible (TL): > = 50μs
Ce type de signal possède les propriétés spéciales d’étant cadencé autonome et non nulle (NZR) de retour. Donc, ce qui reste, c’est de voir comment nous pouvons mettre notre ATMega328p pour produire un signal précisément minuté afin que nous puissions transmettre à la matrice de LED RGB WS2812. [Alerte spoiler!] Nous allons utiliser la technique de bitbanging.