Ma réponse à la WS2811 avec une chose AVR (3 / 5 étapes)

Étape 3: Bit Banging et sauver quelques cycles d’horloge plus

OK. Foret de cogner.

800kHz sur un Mhz 16 AVR est 20 cycles d’horloge.

20 cycles d’horloge sur un AVR est beaucoup.  Nous ne parlons pas sur PIC12/16C ici avec 4 tiques par instruction et qu’un seul registre réel.  L’AVR beaucoup par cycle cycle.  S’il y n'avait pas l’obligation de mélanger l’ordre RGB alors l’AVR pourrait faire ce travail de série sans broncher.

En fait la seule chose que l’AVR ne brille pas au change de bits dans les registres de I/O.  Cela prend deux cycles d’horloge, comme indiqué dans les détails pour l’instruction de SBI ci-dessous.  Le CPU doit lire le registre, le modifier et écrire de nouveau.  Il est l’un des rares instructions non ramifiée dans l’AVR de prendre deux horloges. (Note : le XMega AVR a corrigé ce problème et est maintenant seulement 1 horloge)

À l’aide de cette instruction dans les chemins critiques de temps n’est pas amusant comme code Alains a montré.  Il devait sauter et hop partout pour que les longueurs de chemin d’accès.

sbrc r19, 7 ; test Salut peu clair
rjmp 3f                       ; vrai, sauter broche Salut -> lo
DRAS [port], % [pin] ; faux, broche Salut -> lo
3: sbrc r19, 7 ; égaliser le retard de deux chemins de code
rjmp 4f
4:  nop                             ; retard de calendrier de pouls

Donc si les instructions réelles de la CBI et SBI vont prendre 2 cycles d’horloge de toute façon et puis vous avez à perdre 2 cycles d’horloge pour égaliser les longueurs de chemin, pourquoi ne pas juste la lecture modifier écrire vous-même.  Cela prendra un total de 3 cycles.

EN R16, PortX ; Lire l’état actuel du Registre
ORI R16, PinX ; Définir le bit Xth haut
SUR PortX, R16 ; Écrire la nouvelle valeur dans le registre

La prochaine chose que vous pouvez faire pour gagner du temps, c’est tout à l’extérieur de la boucle, que vous pouvez déplacer.  Parce que ce code utilise 100 % du temps CPU, il y a aucun risque autre chose ne va changer PortX.  Aussi parce qu’aucun autre code ne s’exécute, nous pouvons utiliser des registres CPU autant que nous aimons.

Donc faire cette façon IN-ing et AND/OR-ment hors de la boucle.

DANS PinLo, PortX ; Faites une copie de l’octet dans PortX
ANDI PinLo, 0xFE ; Modifiez la valeur à écrire pour faire des broches lo
DANS PinHi, PortX ; Faites une copie de l’octet dans PortX
ORI PinHi, 0 x 01 ; Modifiez la valeur à écrire pour faire des broches Salut

Boucle :
bla
bla
sur PortX, PinLo ; La valeur de l’axe de sortie faible
bla
bla
rjmp boucle :

Cela a maintenant rendu l’ensemble bits vers tête basculante, série, peu compter et prendre seulement 9 horloges en boucle.  Cela laisse 11 horloges gratuites pour le chargement des données et de brassage.

Encore une fois, ce serait les tas de temps sinon la chose RGB dans le désordre.  En raison de la chose de RVB en panne nous ne pouvons pas juste traiter chaque octet lu comme celle qui suit sortir.  Nous devons prendre une décision sur l’endroit où enregistrer l’octet nouvellement lu dans une mémoire tampon et où d’une mémoire tampon pour obtenir l’octet suivant à envoyer.

C’est où l’instruction IJMP vient à la rescousse.  Sa page du jeu d’instructions AVR est montré ci-dessus.  Nous l’utilisons comme une instruction case/switch dans une machine d’état des logiciels.  Dans chaque État, nous pouvons définir ce que l’état suivant devrait être sans avoir à faire des évaluations.

Nous pouvons le faire parce que nous savons toujours quelle couleur l’octet suivant va être

Si nous traitons actuellement l’octet rouge l’octet suivant sera vert
Si nous traitons actuellement l’octet vert l’octet suivant sera bleu
Si nous traitons actuellement l’octet bleu l’octet suivant sera rouge

par exemple. Dans l’état rouge, nous pouvons simplement dire

ÉTAT = VERT

Il ne faut pas dire

Si (quelque chose) puis État = État d’autre vert = bleu

Cela permet d’économiser quelques horloges de ne pas avoir à évaluer quoi que ce soit.

La totalité du code s’affiche comme une image ici.  Encore une fois de m’envoyer un MP si vous voulez me faire envoyer par courriel à vous.

Les commentaires dans le code sont je l’espère assez même laisser quelqu'un peu familiers avec AVR-ASM le comprendre.

Articles Liés

Truc facilement une voiture RC avec une chose !

Truc facilement une voiture RC avec une chose !

Salut les gars ! Je vais vous montrer comment tromper votre voiture RC. La seule chose dont vous avez besoin : éclat de peinture ! Le meilleur type est une peinture à tissu tridimensionnel à Michaels ou un autre magasin d'art, mais vraiment une lueur
Redresser le paddle tennis de table déformé (bat, raquette, raquette) avec une presse bricolage bat

Redresser le paddle tennis de table déformé (bat, raquette, raquette) avec une presse bricolage bat

vous êtes un assistant de ping-pong purs et durs.  Vous appliquez tours copieux à tous les coups.  Les gens sont impressionnés par le sérieux de votre considération pour ce sport qu'est le tennis de table.Ensuite, vous laissez votre pagaie dans le co
S’amuser avec une calculatrice et un ami (destiné à l’école, mais les œuvres partout)

S’amuser avec une calculatrice et un ami (destiné à l’école, mais les œuvres partout)

c'est mon premier instructable, alors ne soyez pas trop indulgent, il est préférable d'apprendre de la critique que d'apprendre ne pas du tout.Poursuivant, l'année dernière je me suis retrouvé dans un bureau différent de celui que j'étais dans l'anné
10 choses amusantes à faire avec une bouteille de 2 litres

10 choses amusantes à faire avec une bouteille de 2 litres

Voici 10 choses rapide et facile à faire avec une bouteille de 2 litresRegarder la vidéo1. couper le fond deux bouteilles et utilisant un wiffle ball, deux personnes peuvent jouer catch.2. mettre en place plusieurs bouteilles et pratiquer votre bowli
5 choses à faire avec une balle de ping-pong

5 choses à faire avec une balle de ping-pong

s'il vous plaît note ce Instructable et suivez-moi pour plus cool guides étape par étape.Fait par Manish KumarDonc aujourd'hui je parlera environ 5 choses insolites à faire avec une balle de ping-pong. Ces boules en plastique sont très bon marchés et
Comment 3d impression et finition de grandes choses... avec une petite imprimante.

Comment 3d impression et finition de grandes choses... avec une petite imprimante.

Certains d'entre vous avez peut-être vu quelques-uns de mes précédents instructables et savoir que j'ai une histoire avec l'impression 3d. Récemment, j'étais dans un magasin d'électronique et a vu un XYZ davinci 1.0 en vente pour 399 $. Cette machine
Réparer votre panne usé (ou faire une nouvelle) avec des choses domestiques

Réparer votre panne usé (ou faire une nouvelle) avec des choses domestiques

Dans ce instructable je vais vous montrer comment vous pouvez réparer votre panne vieux ! Si vous avez la tige de cuivre de diamètre de 3 à 6mm, vous pouvez même faire un nouveau.Ce que vous devez :-Vieux fer à souder ou vous pouvez utiliser un fil d
Choses que vous pouvez faire avec une mauvaise photo dans Photoshop

Choses que vous pouvez faire avec une mauvaise photo dans Photoshop

lorsque vous modifiez une image - que ce soit sombre ou trop lumineux ou prises avec une caméra merdique en général. Vous pouvez entrer dans Photoshop ou même un programme libre comme Gimp et magie miracle de travail sur l'image de votre choix.Dans c
Nommer quelque chose avec une étiquette

Nommer quelque chose avec une étiquette

Il s'agit d'un tutoriel sur la dénomination quelque chose sur Minecraft (PC et mac edition).Étape 1: Obtention de l'insigne d'identité Tout d'abord, vous devez sélectionner une enclume (la recette d'artisanat est au-dessus). Une étiquette peut être o
Comment pirater une Time Capsule d’Apple avec une framboise Pi

Comment pirater une Time Capsule d’Apple avec une framboise Pi

Introduction de la « Capsule de Pi ». Il est actuellement le seul Apple Time Capsule, vous pouvez brancher sur votre téléviseur..., cela rend un Apple TV ? ;-)OK, ok, disons que vous avez un vieux Apple Time Capsule autour de la pose qui ne fonctionn
L’air chaud souder d’un fer à dessouder avec une pompe de vaccume

L’air chaud souder d’un fer à dessouder avec une pompe de vaccume

ici, je vais vous montrer comment j'ai converti mon fer à dessouder en un pistolet à souder à air chaud.Certains peuvent se demander pourquoi est-ce tut quand il y a l'un esprit plus facilement le fer de digikey. Eh bien la réponse est, digikey n'exp
Vous pouvez faire cela avec une touche de KIndle ?

Vous pouvez faire cela avec une touche de KIndle ?

je ne pourrais jamais comprendre pourquoi quelqu'un voudrait posséder un e-Reader. Alors, mes enfants m'a donné un Kindle Touch et j'ai trouvé des façons de faire faire pour moi, une grande partie de ce que fait un téléphone intelligent ou un iPad po
Assembler le Dragon Rider 500 pour une utilisation avec le Dragon AVR

Assembler le Dragon Rider 500 pour une utilisation avec le Dragon AVR

pas longtemps la société Atmel est sorti avec un excellent outil pour une utilisation avec la ligne AVR de microcontrôleurs appelé le Dragon de l'AVR. Ce petit appareil USB fournit les professionnels et les amateurs aussi bien la possibilité d'utilis
Faucon Millenium et X-Wing de disquette (avec une apparition spéciale : Etoile de la mort)

Faucon Millenium et X-Wing de disquette (avec une apparition spéciale : Etoile de la mort)

grâce à la réaction positive, j'ai reçu de ma précédente disquette art Instructable (lui-même inspiré par une disquette Starship Enterprise et oiseau de proie Klingon), j'ai décidé de suivre avec deux nouveaux modèles : le Faucon Millenium et un X-Wi