Page 2 of 2

Re: RGB LED WS2812?

Posted: Tue Feb 11, 2014 3:59 pm
by tech
Nicolas,

Oui il a marché du premier coup !

Merci pour ton aide tres précieuse.

Chris

Re: RGB LED WS2812?

Posted: Wed Feb 12, 2014 3:33 pm
by tech
Bonjour Nicolas,

Voici je suis en train de valider le code asm dans le code C, j'ai quel que bug je ne peux compiler à cause des erreurs (voir image) qui est en jaune comme H'20', H'21', ect. :?
Il y a-t-il une solution ??

J’ai demandé de l’aide à Benj mais aucune raiponce :wink:

Merci,

Chris

Re: RGB LED WS2812?

Posted: Wed Feb 12, 2014 3:59 pm
by Spanish_dude
Change les H'..' en 0x... C'est des valeurs hex.

Se que tu peux faire pour changer les valeurs de REG, GREEN, BLUE, se serait de faire ça en C (dans flowcode):

Code: Select all

char *pRed;
char *pGreen;
char *pBlue;

pRed = 0x20;
pGreen = 0x21;
pBlue = 0x22;
Si je ne me trompe pas , les pointeurs devraient pointer vers les addresses de RED, BLUE et GREEN du code ASM.
Puis dans un autre bout de code C se serait de faire :

Code: Select all

(*pRed) = FCV_couleurRouge;
(*pGreen) = FCV_couleurVert;
(*pBlue) = FCV_couleurBleu;
Avec FCV_couleurX, étant des variables ou tableaux dans flowcode.

A mon avis, tout se qui est init, tu devrais pouvoir l'enlever. Flowcode devrait le faire automatiquement.
Donc tout ça:

Code: Select all

    ORG     H'00'
    GOTO    init

    ORG     H'05'
init:
    BCF     STATUS, RP0
    BCF     STATUS, RP1 ; Set Bank 0
    CLRF    PORTA ; Clear PORTA register
    BSF     STATUS, RP0 ; Set Bank 1
    MOVLW   H'07' ; W_REG = 0x07
    MOVWF   ADCON1 ; ADCON1 = W_REG  ->  Set PORTA to digital IO
    MOVLW   H'FE' ; W_REG = 0xFE
    MOVWF   TRISA ; TRISA = 0xFE  ->  Set RA0 to output, all others to input

    BCF     STATUS, RP0 ; Set Bank 0
    ; Set Color
    MOVLW   H'00'
    MOVWF   RED
    MOVLW   H'55'
    MOVWF   GREEN
    MOVLW   H'FF'
    MOVWF   BLUE
Et puis tu dois juste initialiser le port A et faire en sorte que RA0 est la sortie.

Re: RGB LED WS2812?

Posted: Wed Feb 12, 2014 5:33 pm
by tech
Voici le fichier sous Flowcode v6 avec ton code asm!

Merci

Chris

Re: RGB LED WS2812?

Posted: Wed Feb 12, 2014 5:46 pm
by Spanish_dude
Je n'ai pas la v6 malheureusement ^^.
Tu l'as testé ? Il marche ?

Re: RGB LED WS2812?

Posted: Wed Feb 12, 2014 6:27 pm
by tech
Non il ne marche pas, je voulais voir avec toi quel était le problème.

Quelle version as-tu de flowcode?

Je viens de voir sur le blog de Matrix que Ben Rowland as réalisé un projet pour contrôler des strippe de LED WS2812 http://matrixmultimedia.com/blog/?p=507#more-507

Chris

Re: RGB LED WS2812?

Posted: Wed Feb 12, 2014 8:17 pm
by Spanish_dude
Si tu peux me l'envoyer en flowcode v5, je pourrais voire se qui ne vas pas, sinon envoi moi le code C généré par flowcode.

Le project de Ben a été fait sur un PIC 16 bit (60 MIPS), alors que celui que tu utilises est un 8 bit (moins rapide, à 5 MIPS).

- Nicolas

Re: RGB LED WS2812?

Posted: Wed Feb 12, 2014 10:24 pm
by tech
Voila sous Flowcode v5

Dans cette version je n'ai pas apporté les modifications au code comme tu me la mentionner, car j’ai essayé et trop de bug a la compilation :(

Merci

Christian

Re: RGB LED WS2812?

Posted: Thu Feb 13, 2014 6:51 pm
by Spanish_dude
Bon, j'ai réussi à se que flowcode compile le code. J'ai fait quelque modification au code.
Au lieu d'utiliser les RED, GREEN, BLUE et TEMP du code asm, j'utilises les variables flowcode que tu avais créé, plus une variable TEMP que moi j'ai ajouté.

Apres fallait changer tout les PORTA en _porta, parce que PORTA n'existe pas, contrairement à _porta.

J'ai aussi modifié quelques "MOVFW _var" en "MOVF _var, 0". MOVFW n'est pas une instruction connue par le MCU, c'est une sorte de fonction dans MPLABX qui permet de copier le contenue d'une variable dans l'accumulateur plus facilement que de faire "MOVF _var, 0".
Au moment de compiler, MPLABX remplace MOVFW par MOVF.

Et un petit oublie de ma part dans la fonction SendReset. J'ai oublié de copier le contenu de l'accumulateur dans la variable TEMP, comme ça:

Code: Select all

WS2813_SendReset:
    BCF     PORTA, 0 ; Clear RA0
    MOVLW   H'0FF' ; WREG = 0xFF
    MOVWF   TEMP
WS2813_SendReset_1:
    DECFSZ  TEMP
    GOTO    WS2813_SendReset_1
    RETURN
Tout les H'XXX' ont été changé en 0xXX.
Et c'est à pue près tout je crois.

Teste le programme et s'il ne marche pas, essaye de check le signal avec un scope ou logic analyser.

- Nicolas

PS: Je viens de remarquer que le nom de mes fonctions sont WS2813 au lieu de WS2812... Oups ^^"

Re: RGB LED WS2812?

Posted: Thu Feb 13, 2014 8:04 pm
by tech
Bon voilà j'ai apporté les modifications que tu mentionner dans la fonction SendReset et renommer les fonctions WS2813 pour WS2812.

Et.................Wow,ça fonctionne super bien!

Milles merci!

Chris

P,S …J'apprécie énormément le travail que tu as fait :D

Re: RGB LED WS2812?

Posted: Thu Feb 13, 2014 10:34 pm
by Spanish_dude
Ah désolé, le truc du SendReset c'était quand je t'avais fait le code ASM. Dans la version flowcode je l'avais déjà corrigé.

Si maintenant tu veux brancher plusieurs LED WS2812 l'un après l'autre, faudra un petit peu changer le code de nouveau.
tech wrote:P,S …J'apprécie énormément le travail que tu as fait :D
No souci, c'était fun.

Re: RGB LED WS2812?

Posted: Sat Feb 15, 2014 3:28 am
by Philbert Pascal
Bonjour Nicolas, bonjour Christian,
je regarde toujours avec un grand intérêt l'évolution de votre projet.
J'ai essayé de comprendre le déroulement mais je suis un peu perdu.
Je suis parti de la version Demo Led WS2812 FCV5.
Même en suivant vos instructions et en modifiant le code,ça ne marche pas ( je ne suis pas doué en assembleur et en C).
Christian pourrait tu me transmettre le fichier final en Flowcode V5 ou V6.

Tu avais parlé de tableau de variables et je curieux de voir comment tu vas réaliser ton idée.
J'ai cherché sur le forum, mais je n'ai pas vraiment trouvé d'exemple sur les tableaux de variables.
Actuellement dans mes programmes, je saisi des lignes d'état de mes LED et des tempo. C'est long mais ça fonctionne.
Ca fait énormément de ligne de code, mais c'est très simple. (je calcul la valeur binaire/ et décimal de mes LED dans un fichier Excel! hi)
J'aimerai connaitre l'utilisation des tableaux de variables. l'idée , c'est qu'a partir d'un formule mathématique, je rempli directement mon tableau représentant mon maillage .
Merci pour tout vos bon renseignement.

Bon weekend à tous

Re: RGB LED WS2812?

Posted: Sat Feb 15, 2014 4:39 pm
by Spanish_dude
Le programme que j'ai mit a disposition devrait marcher sans problème, il te suffit juste de changer la valeur des variables Blue, Green et Red.

- Nicolas

Re: RGB LED WS2812?

Posted: Mon Feb 17, 2014 3:42 pm
by tech
Bonjour Pascal,

Désolé pour le délai, voici un programme qui contrôle une LED WS2812. Tu n’as qua changé la valeur des variable de 0 à 255 pour le changement des couleurs.

Si tu as des questions n'hésite pas

Christian

Re: RGB LED WS2812?

Posted: Mon Feb 17, 2014 9:36 pm
by Philbert Pascal
Bonjour Christian,
merci pour le code. Je l'ai modifié pour un PIC 16F877 et un WS2811 et ca fonctionne impeccable.
A l'oscillo je vois bien le train de 3 fois 8bits.
J'ai même compris le code en C (hi).
Il me reste maintenant à créer des tableaux de variables représentant la matrice de 100*100 par exemple.
Peux tu me donner un exemple de tableau de variable. Puis -je créer plusieurs tableaux de variables?
Oui je sais ! Je pose beaucoup de questions.

Merci encore pour votre aide à tous.

Pascal.

Re: RGB LED WS2812?

Posted: Tue Feb 18, 2014 3:21 pm
by Philbert Pascal
[quote="Philbert Pascal"]Bonjour Christian,
merci pour le code. Je l'ai modifié pour un PIC 16F877 et un WS2811 et ca fonctionne impeccable.
A l'oscillo je vois bien le train de 3 fois 8bits.
J'ai même compris le code en C (hi).
Il me reste maintenant à créer des tableaux de variables représentant la matrice de 100*100 par exemple.
Peux tu me donner un exemple de tableau de variable. Puis -je créer plusieurs tableaux de variables?
Oui je sais ! Je pose beaucoup de questions.

Merci encore pour votre aide à tous.

Pascal.

Re: RGB LED WS2812?

Posted: Sat Feb 22, 2014 3:54 pm
by Philbert Pascal
Premier_test_WS2812.zip
(123.73 KiB) Downloaded 440 times
Bonjour Christian,
j'ai commencer à écrire les trois variables Green, blue, Red, qui change de valeur dans une boucle.
Je t'explique mon premier test. J'ai déclaré 4 variables Green1 à 4, 4 Red1 à 4, et 4 Blue1 à 4. C'est comme si j'avais 4 Led.
J'ai ajouté à la place des tableaux 4 boucles décisionnelles dans laquelle mes variables prennent leurs valeurs.
A la suite j'execute 4 fois tes routines en assembleur, chaque routine appelant une variable différente.
La première routine appelant les variable Green-Red-Blue, la seconde Green1-Red1-Blue1, etc.....
Si je dois allumer 1000 modules il me faudra 3000 variable. (d'ou l'utilité d'avoir des tableaux)
La dernière routine assembleur executant le reset.

Peux me corriger mon programme.
Ce programme n'est qu'une ébauche pour que je comprenne le fonctionnement des modules WS2812 et WS2811.

Autre question, lors de l'affichage de la puce (16F877 pour moi) je ne vois pas le portA_0 s'allumer. Est ce normal?

Dans l'attente de te lire, reçois mes remerciement.

Pascal

Re: RGB LED WS2812?

Posted: Sun Feb 23, 2014 5:17 pm
by Philbert Pascal
Bonjour Christian.
Voici le même code en Version Flowcode V5.
Je t'ai joins des captures d'écran du signal généré.

Merci pour tout tes bons conseils
Pascal

Re: RGB LED WS2812?

Posted: Sat Mar 15, 2014 3:24 pm
by Philbert Pascal
Bonjours Christian,
as-tu bien reçus mon dernier message?
Sur le forum je vois l'icône du message défilé et je ne sais pas ce que cela veux dire.
Je me permais de te questionner sur l'avancement de ton projet.
J'ai reçus les WS2811.
Je commence mes test.
Bon weekend.
Pascal