Bienvenue aux nouveaux arrivants sur FantasPic !

- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.

--- L’équipe FantasPic ---
Forum général sur l'Assembleur !

Modérateur : mazertoc

Led RGB 5050 WS2812B
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 1638
Enregistré en : juillet 2016
Localisation : Terre

#41 Message par Temps-x » jeu. 21 mai 2020 20:55

Re

:sifflotte: A toi de juger, il parle bien des 30 LEDs par mètre , oui ou non ?

Ya qu'a dit.jpg


Mais c'est vrai qu'il dit qu’il n'aime pas ce type de LED, comme moi .... :lol:

==> A+
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

Led RGB 5050 WS2812B
Gérard
Avatar de l’utilisateur
Expert
Expert
Messages : 1366
Âge : 61
Enregistré en : septembre 2015
Localisation : Alsace - Haut-Rhin

#42 Message par Gérard » jeu. 21 mai 2020 21:38

Temps-x a écrit :Re

:sifflotte: A toi de juger, il parle bien des 30 LEDs par mètre , oui ou non ?

Ya qu'a dit.jpg

Mais c'est vrai qu'il dit qu’il n'aime pas ce type de LED, comme moi .... :lol:

==> A+


Tu as donc aussi parti pris.

Moi, j'aime bien ces LED. :lol:
Le 18 / 04 / 2019 je suis devenu papy de jumeaux, une fille et un garçon. Quel bonheur.

Led RGB 5050 WS2812B
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 1638
Enregistré en : juillet 2016
Localisation : Terre

#43 Message par Temps-x » jeu. 21 mai 2020 22:37

Bonsoir cyril13110, et tout le forum,

Je viens de faire des calculs pour les Led RGB 5050 WS2812B normalement tu peux utiliser le mode SPI avec Mikrobasic, ça doit fonctionner, il faut configurer SSP1CON1 = B'00100010' ce qui te donne un débit de 1000000 bits/s

Et mettre l'oscillateur à 64 Mhz (activation de la PLL)

Il faut que je fasse des essais, mais je pense que ça doit fonctionner, par la suite il faudrait mieux mettre un quartz, je t'expliquerais le pourquoi si c'est Ok.

Le code j'ai actuellement pas le temps de l'écrire, mais si ça fonctionne en ASM, ça doit fonctionner en Mikrobasic pour cette fois.

==> A+
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

Led RGB 5050 WS2812B
cyril13110
Confirmé
Confirmé
Messages : 630
Âge : 37
Enregistré en : avril 2016
Localisation : 13

#44 Message par cyril13110 » jeu. 21 mai 2020 23:31

Bonsoir Temps-x et bonsoir à tous,

Je me doutais bien que ça devais fonctionner mais peut un porte rien n'empêche de faire 1 code en ASM et 1 code en basic.
D'ailleurs j'ai fait des tests avec tes codes ASM et il y a un truc qui me bloque sur le code que tu as fait pour 250 leds.
J'ai mis en commentaire la ligne qui appel la sous fonction aléatoire pour mettre mes propres programmations de commande et il y a 1 raz diodes général qui s'effectue au bout de quelques secondes que je ne trouve pas.
J'ai mis quasiment tous le code en commentaire et en plus de ne pas avoir trouver le raz j'ai carrément eu des erreurs à la compilation parce que j'ai du toucher un truc qui fallait pas.
Du coup, pourrais tu m'éclairer sur la ligne de code qui faut ce raz automatique de toute les leds au bout de quelques secondes ?
Demain je vais pouvoir reprendre le codage et la bricole.
J'ai rangé mon bureau pour commencer à monter l'étoile.
Je vous posterais des photos une fois fait.

Led RGB 5050 WS2812B
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 1638
Enregistré en : juillet 2016
Localisation : Terre

#45 Message par Temps-x » ven. 22 mai 2020 01:34

Re
cyril13110 a écrit :Source du message sur le code que tu as fait pour 250 leds.


255 leds :lol:

cyril13110 a écrit :Source du message Du coup, pourrais tu m'éclairer sur la ligne de code qui faut ce raz automatique de toute les leds au bout de quelques secondes


oops ça risque d'être long à expliquer, c'est une macro qui s'appelle : led_cls

Code : Tout sélectionner

;************************** "Macro pour éteindre toutes les LED RGB" *************************** 
led_cls MACRO
 
      rcall vide_bank

      rcall led_rgb
   
    ENDM


Je t'explique comment elle fonctionne, et tu vas voir que c'est très simple, on remets toutes la bank1, bank2, bank3 à zéro, ce qui donne ceci

Code : Tout sélectionner

;************************ "mettre toute la bank1, bank2, bank3 à zéro" *************************  
vide_bank
      lfsr FSR0
,H'100'                     ; FSR0 pointe sur le début de la bank1      

ch_bank
      clrf POSTINC0                       
; efface l'octet et pointer sur suivants 
      btfss FSR0H,2                       ; tester si terminé (FSR0 pointe sur H'
400')  
      bra ch_bank                         ; non pas fini 

      return            


Comme on ne peut pas se permettre de perdre du temps en stock toutes les données en mémoire sdram, bank1, bank2, bank3, qui représente les 255 leds

Une fois modifier en lit les 3 bank en envoyant l'information au Led RGB 5050 WS2812B via le sous programme : led_rgb

Code : Tout sélectionner

;********************* "envoies les données sur les LED RGB 5050 WS2812B" ********************** 
led_rgb
      
      lfsr FSR0
,H'100'                    FSR0 pointe sur le début de la bank1    

      movff POSTINC0
,couleur              charger la première valeur de la bank1
      
      clrf bits                           
;

      
bcf din_2                           ;
      
direction
      btfss couleur
,7                     
      bra negatif       
      nop
positif                                   
envoie 1 800 ns 450 ns
      bsf din_2                           
802,5 ns = (13x62,5)  
      
incf bits,F
      rlncf couleur
,F
      btfsc bits
,
      movff POSTINC0
,couleur              875  = (14x62,5)
      
btfsc bits,3  
      clrf bits
      nop
      nop
      nop
      nop
      btfsc FSR0H
,2                       contrôl si fin de bank3 atteint
      
return  
      
bcf din_2                           437,5ns = (7x62,5
      
nop
      bra direction

;-----------------------------------------------------------------------------------------------

negatif                                   envoie 0 400 ns 850 ns
      bsf din_2                           
375ns = (6x62,5)  
      
nop
      nop
      nop
      incf bits
,F
      rlncf couleur
,F
      bcf din_2                           
875  = (14x62,5)
      
btfsc bits,3  
      movff POSTINC0
,couleur              937,= (15x62,5)
      
btfsc bits,3  
      clrf bits
      nop
      nop
      btfsc FSR0H
,2                       contrôl si fin de bank3 atteint
      
return
      
bra direction



==> A+
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

Led RGB 5050 WS2812B
cyril13110
Confirmé
Confirmé
Messages : 630
Âge : 37
Enregistré en : avril 2016
Localisation : 13

#46 Message par cyril13110 » ven. 22 mai 2020 10:22

Bonjour Temps-X et bonjour tous le forum,

J'ai voulus faire un test avec 30 leds et voila les erreurs de compilations récupérées:

Code : Tout sélectionner

boucle

      ;rcall hasard               J'ai mis l'appel de la SF en commentaire car je voulais faire ma propre séquence.         

      rgb 0,10,10,1,1,0
      rgb 0,10,10,11,11,0
     rgb 0,10,10,21,21,0
      rcall _10ms
     rgb 0,0,0,1,1,0
      rgb 0,0,0,11,11,0
     rgb 0,0,0,21,21,0       
      rcall _10ms                                     
      rgb 0,10,10,2,2,0
      rgb 0,10,10,12,12,0
     rgb 0,10,10,22,22,0                                           
      rcall _10ms                       
      rgb 0,0,0,2,2,0
      rgb 0,0,0,12,12,0
     rgb 0,0,0,22,22,0
      rcall _10ms                       
      rgb 0,10,10,3,3,0
      rgb 0,10,10,13,13,0
     rgb 0,10,10,23,23,0                                               
      rcall _10ms                       
      rgb 0,0,0,3,3,0
      rgb 0,0,0,13,13,0
     rgb 0,0,0,23,23,0
      rcall _10ms                       
      rgb 0,10,10,4,4,0
      rgb 0,10,10,14,14,0
     rgb 0,10,10,24,24,0                                               
      rcall _10ms                       
      rgb 0,0,0,4,4,0
      rgb 0,0,0,14,14,0
     rgb 0,0,0,24,24,00
      rcall _10ms                       
      rgb 0,10,10,5,5,0
      rgb 0,10,10,15,15,0
     rgb 0,10,10,25,25,0                                                 
      rcall _10ms                       
      rgb 0,0,0,5,5,0
      rgb 0,0,0,15,15,0
     rgb 0,0,0,25,25,0
      rcall _10ms
      rgb 0,10,10,6,6,0
      rgb 0,10,10,16,16,0
     rgb 0,10,10,26,26,0                                               
      rcall _10ms                       
      rgb 0,0,0,6,6,0
      rgb 0,0,0,16,16,0
     rgb 0,0,0,26,26,0
      rcall _10ms
      rgb 0,10,10,7,7,0
      rgb 0,10,10,17,17,0
     rgb 0,10,10,27,27,0                                                 
      rcall _10ms                       
      rgb 0,0,0,7,7,0
      rgb 0,0,0,17,17,0
     rgb 0,0,0,27,27,0 
      rcall _10ms 
      rgb 0,10,10,8,8,0
      rgb 0,10,10,18,18,0
     rgb 0,10,10,28,28,0                                             
      rcall _10ms                       
      rgb 0,0,0,8,8,0
      rgb 0,0,0,18,18,0
     rgb 0,0,0,28,28,0
      rcall _10ms 
      rgb 0,10,10,9,9,0
      rgb 0,10,10,19,19,0
     rgb 0,10,10,29,29,0                                             
      rcall _10ms                       
      rgb 0,0,0,9,9,0
      rgb 0,0,0,19,19,0
     rgb 0,0,0,29,29,0
      rcall _10ms
      rgb 0,10,10,10,10,0
      rgb 0,10,10,20,20,0
     rgb 0,10,10,30,30,0                                             
      rcall _10ms                       
      rgb 0,0,0,10,10,0
      rgb 0,0,0,20,20,0
     rgb 0,0,0,30,30,0
      rcall _10ms     
   
;-----------------------------------------------------------------------------------------------       
control_led

      movf led,W
      xorwf led_nombre,W                 
     
      btfsc STATUS,Z
      bra limite                         

;      incf led,F

      bra boucle;

limite
     movlw D'1'
      movwf led

     led_cls                             ; macro : pour éteindre toutes les LED RGB
 


et du coup a la compilation j'ai les erreurs suivantes:

Code : Tout sélectionner

----------------------------------------------------------------------
Release build of project `C:\Users\mymy_nounoussa\Downloads\WS2812B-Cy(1)\WS2812B-Cy.disposable_mcp' started.
Language tool versions: MPASMWIN.exe v5.51, mplink.exe v4.49, mplib.exe v4.49
Fri May 22 10:14:39 2020
----------------------------------------------------------------------
Clean: Deleting intermediary and output files.
Clean: Done.
Executing: "C:\Program Files (x86)\Microchip\MPASM Suite\MPASMWIN.exe" /q /p18F26K22 "WS2812B-Cy.asm" /l"WS2812B-Cy.lst" /e"WS2812B-Cy.err"
Error[126]   C:\USERS\MYMY_NOUNOUSSA\DOWNLOADS\WS2812B-CY(1)\WS2812B-CY.ASM 155 : Argument out of range (1612 not between -1024 and 1023)
Error[126]   C:\USERS\MYMY_NOUNOUSSA\DOWNLOADS\WS2812B-CY(1)\WS2812B-CY.ASM 157 : Argument out of range (1561 not between -1024 and 1023)
Error[126]   C:\USERS\MYMY_NOUNOUSSA\DOWNLOADS\WS2812B-CY(1)\WS2812B-CY.ASM 155 : Argument out of range (1586 not between -1024 and 1023)
Error[126]   C:\USERS\MYMY_NOUNOUSSA\DOWNLOADS\WS2812B-CY(1)\WS2812B-CY.ASM 157 : Argument out of range (1535 not between -1024 and 1023)
Error[126]   C:\USERS\MYMY_NOUNOUSSA\DOWNLOADS\WS2812B-CY(1)\WS2812B-CY.ASM 155 : Argument out of range (1560 not between -1024 and 1023)
Error[126]   C:\USERS\MYMY_NOUNOUSSA\DOWNLOADS\WS2812B-CY(1)\WS2812B-CY.ASM 157 : Argument out of range (1509 not between -1024 and 1023)
Error[126]   C:\USERS\MYMY_NOUNOUSSA\DOWNLOADS\WS2812B-CY(1)\WS2812B-CY.ASM 346 : Argument out of range (1600 not between -1024 and 1023)
Error[126]   C:\USERS\MYMY_NOUNOUSSA\DOWNLOADS\WS2812B-CY(1)\WS2812B-CY.ASM 155 : Argument out of range (1533 not between -1024 and 1023)
Error[126]   C:\USERS\MYMY_NOUNOUSSA\DOWNLOADS\WS2812B-CY(1)\WS2812B-CY.ASM 157 : Argument out of range (1482 not between -1024 and 1023)
Error[126]   C:\USERS\MYMY_NOUNOUSSA\DOWNLOADS\WS2812B-CY(1)\WS2812B-CY.ASM 155 : Argument out of range (1507 not between -1024 and 1023)
Error[126]   C:\USERS\MYMY_NOUNOUSSA\DOWNLOADS\WS2812B-CY(1)\WS2812B-CY.ASM 157 : Argument out of range (1456 not between -1024 and 1023)
Error[126]   C:\USERS\MYMY_NOUNOUSSA\DOWNLOADS\WS2812B-CY(1)\WS2812B-CY.ASM 155 : Argument out of range (1481 not between -1024 and 1023)
Error[126]   C:\USERS\MYMY_NOUNOUSSA\DOWNLOADS\WS2812B-CY(1)\WS2812B-CY.ASM 157 : Argument out of range (1430 not between -1024 and 1023)
Error[126]   C:\USERS\MYMY_NOUNOUSSA\DOWNLOADS\WS2812B-CY(1)\WS2812B-CY.ASM 350 : Argument out of range (1521 not between -1024 and 1023)
Error[126]   C:\USERS\MYMY_NOUNOUSSA\DOWNLOADS\WS2812B-CY(1)\WS2812B-CY.ASM 155 : Argument out of range (1454 not between -1024 and 1023)
Error[126]   C:\USERS\MYMY_NOUNOUSSA\DOWNLOADS\WS2812B-CY(1)\WS2812B-CY.ASM 157 : Argument out of range (1403 not between -1024 and 1023)
Error[126]   C:\USERS\MYMY_NOUNOUSSA\DOWNLOADS\WS2812B-CY(1)\WS2812B-CY.ASM 155 : Argument out of range (1428 not between -1024 and 1023)
Error[126]   C:\USERS\MYMY_NOUNOUSSA\DOWNLOADS\WS2812B-CY(1)\WS2812B-CY.ASM 157 : Argument out of range (1377 not between -1024 and 1023)
Error[126]   C:\USERS\MYMY_NOUNOUSSA\DOWNLOADS\WS2812B-CY(1)\WS2812B-CY.ASM 155 : Argument out of range (1402 not between -1024 and 1023)
Error[126]   C:\USERS\MYMY_NOUNOUSSA\DOWNLOADS\WS2812B-CY(1)\WS2812B-CY.ASM 157 : Argument out of range (1351 not between -1024 and 1023)
Error[126]   C:\USERS\MYMY_NOUNOUSSA\DOWNLOADS\WS2812B-CY(1)\WS2812B-CY.ASM 354 : Argument out of range (1442 not between -1024 and 1023)
Error[126]   C:\USERS\MYMY_NOUNOUSSA\DOWNLOADS\WS2812B-CY(1)\WS2812B-CY.ASM 155 : Argument out of range (1375 not between -1024 and 1023)
Error[126]   C:\USERS\MYMY_NOUNOUSSA\DOWNLOADS\WS2812B-CY(1)\WS2812B-CY.ASM 157 : Argument out of range (1324 not between -1024 and 1023)
Error[126]   C:\USERS\MYMY_NOUNOUSSA\DOWNLOADS\WS2812B-CY(1)\WS2812B-CY.ASM 155 : Argument out of range (1349 not between -1024 and 1023)
Error[126]   C:\USERS\MYMY_NOUNOUSSA\DOWNLOADS\WS2812B-CY(1)\WS2812B-CY.ASM 157 : Argument out of range (1298 not between -1024 and 1023)
Error[126]   C:\USERS\MYMY_NOUNOUSSA\DOWNLOADS\WS2812B-CY(1)\WS2812B-CY.ASM 155 : Argument out of range (1323 not between -1024 and 1023)
Error[126]   C:\USERS\MYMY_NOUNOUSSA\DOWNLOADS\WS2812B-CY(1)\WS2812B-CY.ASM 157 : Argument out of range (1272 not between -1024 and 1023)
Error[126]   C:\USERS\MYMY_NOUNOUSSA\DOWNLOADS\WS2812B-CY(1)\WS2812B-CY.ASM 358 : Argument out of range (1363 not between -1024 and 1023)
Error[126]   C:\USERS\MYMY_NOUNOUSSA\DOWNLOADS\WS2812B-CY(1)\WS2812B-CY.ASM 155 : Argument out of range (1296 not between -1024 and 1023)
Error[126]   C:\USERS\MYMY_NOUNOUSSA\DOWNLOADS\WS2812B-CY(1)\WS2812B-CY.ASM 157 : Argument out of range (1245 not between -1024 and 1023)
Error[126]   C:\USERS\MYMY_NOUNOUSSA\DOWNLOADS\WS2812B-CY(1)\WS2812B-CY.ASM 155 : Argument out of range (1270 not between -1024 and 1023)
Error[126]   C:\USERS\MYMY_NOUNOUSSA\DOWNLOADS\WS2812B-CY(1)\WS2812B-CY.ASM 157 : Argument out of range (1219 not between -1024 and 1023)
Error[126]   C:\USERS\MYMY_NOUNOUSSA\DOWNLOADS\WS2812B-CY(1)\WS2812B-CY.ASM 155 : Argument out of range (1244 not between -1024 and 1023)
Error[126]   C:\USERS\MYMY_NOUNOUSSA\DOWNLOADS\WS2812B-CY(1)\WS2812B-CY.ASM 157 : Argument out of range (1193 not between -1024 and 1023)
Error[126]   C:\USERS\MYMY_NOUNOUSSA\DOWNLOADS\WS2812B-CY(1)\WS2812B-CY.ASM 362 : Argument out of range (1284 not between -1024 and 1023)
Error[126]   C:\USERS\MYMY_NOUNOUSSA\DOWNLOADS\WS2812B-CY(1)\WS2812B-CY.ASM 155 : Argument out of range (1217 not between -1024 and 1023)
Error[126]   C:\USERS\MYMY_NOUNOUSSA\DOWNLOADS\WS2812B-CY(1)\WS2812B-CY.ASM 157 : Argument out of range (1166 not between -1024 and 1023)
Error[126]   C:\USERS\MYMY_NOUNOUSSA\DOWNLOADS\WS2812B-CY(1)\WS2812B-CY.ASM 155 : Argument out of range (1191 not between -1024 and 1023)
Error[126]   C:\USERS\MYMY_NOUNOUSSA\DOWNLOADS\WS2812B-CY(1)\WS2812B-CY.ASM 157 : Argument out of range (1140 not between -1024 and 1023)
Error[126]   C:\USERS\MYMY_NOUNOUSSA\DOWNLOADS\WS2812B-CY(1)\WS2812B-CY.ASM 155 : Argument out of range (1165 not between -1024 and 1023)
Error[126]   C:\USERS\MYMY_NOUNOUSSA\DOWNLOADS\WS2812B-CY(1)\WS2812B-CY.ASM 157 : Argument out of range (1114 not between -1024 and 1023)
Error[126]   C:\USERS\MYMY_NOUNOUSSA\DOWNLOADS\WS2812B-CY(1)\WS2812B-CY.ASM 366 : Argument out of range (1205 not between -1024 and 1023)
Error[126]   C:\USERS\MYMY_NOUNOUSSA\DOWNLOADS\WS2812B-CY(1)\WS2812B-CY.ASM 155 : Argument out of range (1138 not between -1024 and 1023)
Error[126]   C:\USERS\MYMY_NOUNOUSSA\DOWNLOADS\WS2812B-CY(1)\WS2812B-CY.ASM 157 : Argument out of range (1087 not between -1024 and 1023)
Error[126]   C:\USERS\MYMY_NOUNOUSSA\DOWNLOADS\WS2812B-CY(1)\WS2812B-CY.ASM 155 : Argument out of range (1112 not between -1024 and 1023)
Error[126]   C:\USERS\MYMY_NOUNOUSSA\DOWNLOADS\WS2812B-CY(1)\WS2812B-CY.ASM 157 : Argument out of range (1061 not between -1024 and 1023)
Error[126]   C:\USERS\MYMY_NOUNOUSSA\DOWNLOADS\WS2812B-CY(1)\WS2812B-CY.ASM 155 : Argument out of range (1086 not between -1024 and 1023)
Error[126]   C:\USERS\MYMY_NOUNOUSSA\DOWNLOADS\WS2812B-CY(1)\WS2812B-CY.ASM 157 : Argument out of range (1035 not between -1024 and 1023)
Error[126]   C:\USERS\MYMY_NOUNOUSSA\DOWNLOADS\WS2812B-CY(1)\WS2812B-CY.ASM 370 : Argument out of range (1126 not between -1024 and 1023)
Error[126]   C:\USERS\MYMY_NOUNOUSSA\DOWNLOADS\WS2812B-CY(1)\WS2812B-CY.ASM 155 : Argument out of range (1059 not between -1024 and 1023)
Error[126]   C:\USERS\MYMY_NOUNOUSSA\DOWNLOADS\WS2812B-CY(1)\WS2812B-CY.ASM 155 : Argument out of range (1033 not between -1024 and 1023)
Error[126]   C:\USERS\MYMY_NOUNOUSSA\DOWNLOADS\WS2812B-CY(1)\WS2812B-CY.ASM 374 : Argument out of range (1047 not between -1024 and 1023)
Error[126]   C:\USERS\MYMY_NOUNOUSSA\DOWNLOADS\WS2812B-CY(1)\WS2812B-CY.ASM 435 : Argument out of range (-1585 not between -1024 and 1023)
Halting build on first failure as requested.
----------------------------------------------------------------------
Release build of project `C:\Users\mymy_nounoussa\Downloads\WS2812B-Cy(1)\WS2812B-Cy.disposable_mcp' failed.
Language tool versions: MPASMWIN.exe v5.51, mplink.exe v4.49, mplib.exe v4.49
Fri May 22 10:14:43 2020
----------------------------------------------------------------------
BUILD FAILED



et le gros des erreurs renvois à ces lignes de codes

Code : Tout sélectionner

good_bye10

      rcall led_charge

      rcall led_rgb

    ENDM
   



J'ai l'impression qui me refuse ma séquence.
Si je renseigne la ligne de sequence comme cela:
rgb D'0',D'10',D'10',1,1,0
il me dit quil ne reconnait pas les variables.

Il me dit que je suis en dehors de la plage qui est de -1024 à 1047, alors que je mets 10, il y a un trux qui m'echape..... à moins que 10 soit plus grand que 1024..... :roll: :roll: :roll: :roll: .....ca vroudrait dire que on maurai menti à l'ecole????
ou est ce que j'ai fait une erreur dans la rédaction me la séquence?
Ou alors la programmation des commandes de leds doit se faire autrement.....

Led RGB 5050 WS2812B
cyril13110
Confirmé
Confirmé
Messages : 630
Âge : 37
Enregistré en : avril 2016
Localisation : 13

#47 Message par cyril13110 » ven. 22 mai 2020 10:52

Bon finalement j'ai réussi à avancer et je rencontre une limite:
J'ai mis en commentaire pas mal de ligne de code pour pouvoir faire quelques choses.
J'ai programmé une séquence avec 40 leds, la séquence est toute bete car c'est un simple chenillard.

Code : Tout sélectionner

;***********************************************************************************************
;*********************************** 
"LED RGB 5050 WS2812B" ************************************
;**************** 
"Avec ce code vous pouvez commander 255 LED RGB 5050 WS2812B" ****************
;***********************************************************************************************

    
Errorlevel-302                        Supprime le message "Ensure that bank bits are correct" 
    
radix dec                             par defaut en mode décimal
    
list p=18f26K22                       processeur utilisé                  
    
#include <p18f26K22.inc>              ; Définitions des constantes

;***********************************************************************************************

CONFIG11H
     CONFIG FOSC 
INTIO67 
     CONFIG FCMEN 
OFF 
     CONFIG IESO 
OFF
CONFIG2L
     CONFIG PWRTEN 
OFF 
     CONFIG BOREN 
OFF 
     CONFIG BORV 
190
CONFIG2H
     CONFIG WDTEN 
OFF 
     CONFIG  WDTPS 
1
CONFIG3H
     CONFIG CCP2MX 
PORTC1 
     CONFIG PBADEN 
OFF
     CONFIG CCP3MX 
PORTC6
     CONFIG HFOFST 
OFF
     CONFIG T3CMX 
PORTC0
     CONFIG P2BMX 
PORTC0
     CONFIG MCLRE 
INTMCLR
CONFIG4L
     CONFIG STVREN 
OFF 
     CONFIG LVP 
OFF 
     CONFIG XINST 
OFF 
     CONFIG DEBUG 
OFF
CONFIG5L
     CONFIG CP0 
OFF 
     CONFIG CP1 
OFF 
     CONFIG CP2 
OFF 
     CONFIG CP3 
OFF
CONFIG5H
     CONFIG CPB 
OFF 
     CONFIG CPD 
OFF
CONFIG6L
     CONFIG EBTR0 
OFF
CONFIG6H
     CONFIG EBTR1 
OFF
CONFIG7L
     CONFIG EBTR2 
OFF
CONFIG7H
     CONFIG EBTR3 
OFF

;*************************************** assignations ***************************************** 
         
#DEFINE din_2  LATA,7                 ; RA7 ==> entrée des données de la Led RGB 5050 WS2812B
                
#DEFINE led1   LATC,7                 ; RC7 ==> led verte, témoin de mise en fonction de l'appareil

;****************************** déclaration des variables *************************************


     
CBLOCK H'20'                          bank0
  
      loop1        
:1
      loop2        
:1
      loop3        
:1

      lot1         
:
      lot2         
:1
      lot3         
:1

      couleur      
:1

      rouge        
:1
      vert         
:1
      bleu         
:1

      led_nombre   
:
      led_debut    
:1
      led_fin      
:1
      led          
:1
 
      bits         
:1
     
      temps        
:1
      durée        
:
    
    ENDC

;************************* "Macro pour se positionner dans un tableau" ************************* 
tableau MACRO adresse

      movlw UPPER
(adresse)                ; 
      
movwf TBLPTRU                       ;

      
movlw HIGH(adresse)                 ;
      
movwf TBLPTRH                       

      
movlw LOW(adresse)                  ;
      
movwf TBLPTRL                 
     
    ENDM


;************** "Macro pour charger une nouvelle valeur sur une, ou des LED RGB" *************** 
rgb MACRO valeur1,valeur2,valeur3,valeur4,valeur5,valeur6
        
;      local nombre10,good_bye10
                                           
;      movlw valeur6
  
;      btfss WREG,0                        valeur6 0 que pour les nombres 
;      bra nombre10                        valeur6 1 que pour les variables

;      movlw valeur1                       
;      
movf valeur1,W
;      movwf rouge
                          
;      movlw valeur2                       
;      
movf valeur2,W
;      movwf vert

;      movlw valeur3                       
;      
movf valeur3,W  
;      movwf bleu

;      movf valeur4,W                    led début 
;      movwf led_debut
   
;      movf valeur5,W                      led fin de la deuxième led 
;      movwf led_fin

 
;     bra good_bye10


;nombre10
      movlw valeur1   
      movwf rouge

      movlw valeur2     
      movwf vert

      movlw valeur3   
      movwf bleu
  
      movlw valeur4
      movwf led_debut

      movlw valeur5 
      movwf led_fin

;good_bye10

      rcall led_charge 

      rcall led_rgb

    ENDM


;** "Macro pour faire une durée de temps, qui peut aller de 10 ms minimum  à 2550 ms maximum "** 
;
tempo MACRO valeur1,valeur2

;      local nombre11,good_bye11

;      movlw valeur2
  
;      btfss WREG,0                        valeur2 0 que pour les nombres 
;      bra nombre11                        valeur2 1 que pour les variables

 
;     movf valeur1,W                      
;      
movwf durée                         durée du temps défini par la valeur1 

;      bra good_bye11

;nombre11
;      movlw valeur1                       
;      
movwf durée                         durée du temps défini par la valeur1 

;good_bye11
;      call _10ms

 
;   ENDM

;************************** "Macro pour éteindre toutes les LED RGB" *************************** 
led_cls MACRO
 
      rcall vide_bank

      rcall led_rgb
   
    ENDM

;****************************** adresse de depart après reset **********************************

    
ORG H'0'
      
bra debut      

;********************************* interruption haute priorité *********************************

    
ORG    H'8'
      
retfie 

;********************************* interruption basse priorité *********************************

    
ORG     H'18'                                  
      
retfie 

debut

;***********************************************************************************************

      
movlb 0x0F                          ;  BSR pointe sur la banque 15  

;******************** "configuration de l'oscillateur du microcontrôleur" ********************** 

      
movlw B'01110100'                   oscillateur à 16 Mhzfréquence stable si PLL (16 4)= 64 Mhz
    
;  movlw B'01100100'                  oscillateur à 8 Mhzfréquence stable si PLL (4) = 32 Mhz
    
;  movlw B'01010010'                  oscillateur à 4 Mhzfréquence stable  
    
;  movlw B'01000010'                  oscillateur à 2 Mhzfréquence stable  
    
;  movlw B'00110010'                  oscillateur à 1 Mhzfréquence stable  

      movwf OSCCON
      
;**************************** configuration du registre OSCTUNE ********************************

      
movlw B'01000000'                   bit 6 à 1 PLL 4
      movwf OSCTUNE                       
bit 6 à 0 PLL désactivé
                                         
;*************************** configuration du registre ANSELA ********************************** 

      
movlw B'00000000'                   en mode numérique 
      
movwf ANSELA                        en mode E/S       2(RA0), 3(RA1), 4(RA2), 5(RA3), 7(RA5)

;**************************** 
configuration du registre ANSELB ********************************* 

      
movlw B'00000000'                   en mode numérique 
      
movwf ANSELB                        en mode E/S       21(RB0), 22(RB123(RB2), 24(RB3), 25(RB4), 26(RB5)  
             
;**************************** 
configuration du registre ANSELC ********************************* 

      
movlw B'00000000'                   en mode numérique :
      
movwf ANSELC                        en mode E/S       13(RC2),  14(RC3), 15(RC4), 16(RC5), 17(RC6), 18(RC7)  

;*************************** 
configuration du registre ADCON0 ********************************** 

      
movlw B'00000000'                   b0 ADON mise en service le convertiseur 0 arrêt marche   
      movwf ADCON0                        
b1 GO/DONE indique la fin de la conversion analogiqueet permet de lancer la conversion
                                          
b2 à b6 réglage de la sélection du canal

;*************************** configuration du registre ADCON1 ********************************** 

      
movlw B'00000000'                   b2 à b3 00 sélection de la tension de reférenceVref+ = Vss   
      movwf ADCON1                        
b0 à b1 00 sélection de la tension de reférenceVref- = Vdd 
                                          
;*************************** configuration du registre ADCON2 ********************************** 

      
movlw B'00110110'                   b0 à b2 FOSC/64
      movwf ADCON2                        
b3 à b5 16 TAG 
                                          

                                          ; 
b7 détermine si le résultat de la conversion
                                          
sera justifié à droite 1 ou à gauche 0  

;***********************************************************************************************

      
movlw B'00000000'                   comparateur 1 off
      movwf CM1CON0 

      movlw 
B'00000000'                   comparateur 2 off
      movwf CM2CON0

;***************** configuration des registres TRISA TRISB TRISC TRISE ******************* 

      
movlw B'00000000'                   RA0(2), RA1(3), RA2(4), RA3(5), RA4(6), RA5(7), RA6(10), RA7(9)  
      
movwf TRISA                         

      
movlw B'11111111'                   RB0(21), RB1(22), RB2(23), RB3(24), RB4(25), RB5(26), RB6(27), RB7(28)
      
movwf TRISB                         

      
movlw B'00000000'                   RC0(11), RC1(12), RC2(13), RC3(14), RC4(15), RC5(16), RC6(17), RC7(18)     
      
movwf TRISC                         

      
movlw B'00001000'                   RE3(1
      
movwf TRISE                         ;

                                          ; 
VSS(8), VSS(19), VDD(20

;**************************** 
configuration du registre INTCON2 ******************************** 

     
movlw B'00000000'                    B7 0 résistances en service
     movwf INTCON2                        
;

;**************************** 
configuration du registre WPUB *********************************** 
                                        
     
movlw B'11111111'                    tirage de résistance sur        RB0(21), RB1(22), RB2(23), RB3(24), RB4(25), RB5(26), RB6(27), RB7(28)  
     
movwf WPUB                           pas de tirage de résistance sur :


;******************************* 
configuration du registre T1CON *******************************    

      
movlw B'00000001'                   mise en fonction du timer1
      movwf T1CON                         


;**************************** 
configuration du registre INTCON *********************************      

    
movlw B'00000000'                     
    
movwf INTCON                          interruption hors service 

;************************************ départ du programme **************************************

      
movlb 0x00                          ;  BSR pointe sur la banque 0  

;***********************************************************************************************

      
clrf PORTA
      clrf PORTB
      clrf PORTC
   
      clrf LATA
      clrf LATB 
      clrf LATC

      clrf led

;*********************************************************************************************** 

      
movlw D'144'
      
movwf led_nombre                    nombre de led à traiter 

      movlw D
'10'                         temps d'éclairement d'une led
     movwf temps 

;*********************************************************************************************** 

;      
rcall limite    

;*********************************************************************************************** 
boucle

      
;rcall hasard                        

      rgb 0
,10,10,1,1,0
      rgb 0
,10,10,11,11,0
      rgb 0
,10,10,21,21,0
      rgb 0
,10,10,31,31,0
      rcall _10ms
     rgb 0
,0,0,1,1,0
      rgb 0
,0,0,11,11,0
      rgb 0
,0,0,21,21,
      rgb 0
,0,0,31,31,0       
      rcall _10ms                                      
      rgb 0
,10,10,2,2,0
      rgb 0
,10,10,12,12,0
      rgb 0
,10,10,22,22,
       rgb 0
,10,10,32,32,0                                           
      rcall _10ms                        
      rgb 0
,0,0,2,2,0
      rgb 0
,0,0,12,12,0
      rgb 0
,0,0,22,22,0
      rgb 0
,0,0,32,32,0
      rcall _10ms                        
      rgb 0
,10,10,3,3,0
      rgb 0
,10,10,13,13,0
      rgb 0
,10,10,23,23,
      rgb 0
,10,10,33,33,0                                               
      rcall _10ms                        
      rgb 0
,0,0,3,3,0
      rgb 0
,0,0,13,13,0
      rgb 0
,0,0,23,23,0
      rgb 0
,0,0,33,33,0
      rcall _10ms                        
      rgb 0
,10,10,4,4,0
      rgb 0
,10,10,14,14,0
      rgb 0
,10,10,24,24,0
      rgb 0
,10,10,34,34,0                                                
      rcall _10ms                        
      rgb 0
,0,0,4,4,0
      rgb 0
,0,0,14,14,0
      rgb 0
,0,0,24,24,00
      rgb 0
,0,0,34,34,00
      rcall _10ms                        
      rgb 0
,10,10,5,5,0
      rgb 0
,10,10,15,15,0
      rgb 0
,10,10,25,25,0  
      rgb 0
,10,10,35,35,0                                                
      rcall _10ms                        
      rgb 0
,0,0,5,5,0
      rgb 0
,0,0,15,15,0
      rgb 0
,0,0,25,25,0
      rgb 0
,0,0,35,35,0
      rcall _10ms 
      rgb 0
,10,10,6,6,0
      rgb 0
,10,10,16,16,0
      rgb 0
,10,10,26,26,0
      rgb 0
,10,10,36,36,0                                               
      rcall _10ms                        
      rgb 0
,0,0,6,6,0
      rgb 0
,0,0,16,16,0
      rgb 0
,0,0,26,26,0
      rgb 0
,0,0,36,36,0
      rcall _10ms 
      rgb 0
,10,10,7,7,0
      rgb 0
,10,10,17,17,0
      rgb 0
,10,10,27,27,0
      rgb 0
,10,10,37,37,0                                                 
      rcall _10ms                        
      rgb 0
,0,0,7,7,0
      rgb 0
,0,0,17,17,0
      rgb 0
,0,0,27,27,
      rgb 0
,0,0,37,37,
      rcall _10ms  
      rgb 0
,10,10,8,8,0
      rgb 0
,10,10,18,18,0
      rgb 0
,10,10,28,28,0
      rgb 0
,10,10,38,38,0                                             
      rcall _10ms                        
      rgb 0
,0,0,8,8,0
      rgb 0
,0,0,18,18,0
      rgb 0
,0,0,28,28,0
      rgb 0
,0,0,38,38,
      rcall _10ms  
      rgb 0
,10,10,9,9,0
      rgb 0
,10,10,19,19,0
      rgb 0
,10,10,29,29,
      rgb 0
,10,10,39,39,0                                             
      rcall _10ms                        
      rgb 0
,0,0,9,9,0
      rgb 0
,0,0,19,19,0
      rgb 0
,0,0,29,29,
      rgb 0
,0,0,39,39,
      rcall _10ms
      rgb 0
,10,10,10,10,0
      rgb 0
,10,10,20,20,0
      rgb 0
,10,10,30,30,0
;      rgb 0,10,10,40,40,0                                              
      rcall _10ms                        
      rgb 0
,0,0,10,10,0
      rgb 0
,0,0,20,20,0
      rgb 0
,0,0,30,30,0
;      rgb 0,0,0,40,40,0
      rcall _10ms      
    
;-----------------------------------------------------------------------------------------------        
control_led

;      movf led,W
;      xorwf led_nombre,W                  
     
;      btfsc STATUS,
;      bra limite                          

;      incf led,F

      bra boucle
;

;
limite
;      movlw D'1'
;      movwf led

;      led_cls                             macro pour éteindre toutes les LED RGB
      
;**************************** " témoin visuel de mise en fonction" ***************************** 
;
clignote

;      movlw D'1'                          pour 1 clignotements
;      movwf loop3

;;re_clignote
;      bsf led1   
;      tempo 10,0                          macro tempschiffre(0ou varible(1)
                                          ; 
500 ms temps de visionnage
 
;     bcf led1   
  
;    tempo 10,0                          macro tempschiffre(0ou varible(1)
 ;                                         ; 
500 ms temps de visionnage
 
;     decfsz loop3,F
  
;    bra re_clignote
;
  ;    return

;********************* 
"envoies les données sur les LED RGB 5050 WS2812B" ********************** 
led_rgb
      
      lfsr FSR0
,H'100'                    FSR0 pointe sur le début de la bank1    

      movff POSTINC0
,couleur              charger la première valeur de la bank1
      
      clrf bits                           
;

      
bcf din_2                           ;
      
direction
      btfss couleur
,7                     
      bra negatif       
      nop
positif                                   
envoie 1 800 ns 450 ns
      bsf din_2                           
802,5 ns = (13x62,5)  
      
incf bits,F
      rlncf couleur
,F
      btfsc bits
,
      movff POSTINC0
,couleur              875  = (14x62,5)
      
btfsc bits,3  
      clrf bits
      nop
      nop
      nop
      nop
      btfsc FSR0H
,2                       contrôl si fin de bank3 atteint
      
return  
      
bcf din_2                           437,5ns = (7x62,5
      
nop
      bra direction

;-----------------------------------------------------------------------------------------------

negatif                                   envoie 0 400 ns 850 ns
      bsf din_2                           
375ns = (6x62,5)  
      
nop
      nop
      nop
      incf bits
,F
      rlncf couleur
,F
      bcf din_2                           
875  = (14x62,5)
      
btfsc bits,3  
      movff POSTINC0
,couleur              937,= (15x62,5)
      
btfsc bits,3  
      clrf bits
      nop
      nop
      btfsc FSR0H
,2                       contrôl si fin de bank3 atteint
      
return
      
bra direction
                                       
;************************ "mettre toute la bank1, bank2, bank3 à zéro" *************************  
vide_bank
      lfsr FSR0
,H'100'                     FSR0 pointe sur le début de la bank1      

ch_bank
      clrf POSTINC0                       
efface l'octet et pointer sur suivants 
      btfss FSR0H,2                       ; tester si terminé (FSR0 pointe sur H'
400')  
      bra ch_bank                         ; non pas fini 

      clrf INDF0                          ; sortir à H'
400' en effaçant le dernier octet  

      return            

;********************* "mise en mémoire des couleus des LED RGB désignés" ********************** 
led_charge 
      movf led_debut,W  
      xorlw D'
0'
      btfsc STATUS,Z
      return

      movf led_fin,W  
      xorlw D'
0'
      btfsc STATUS,Z
      return
       
      movf led_debut,W
      subwf led_fin,F    
      btfsc STATUS,Z
      bra arranger                        ; égalité des variables 1 seule LED RGB de soliciter 
      btfss STATUS,C
      return                              ; résultat négatif, aucune LED RGB de soliciter  
               
arranger
      incf led_fin,F

      lfsr FSR0,H'
100'                    ; FSR0 pointe sur le début de la bank1 

      movf led_debut,W
      mullw D'
3'                          ; multiplier W par 3(3x8 = 24 bits), résultat dans PRODH PRODL

      movlw D'
3'
      subwf PRODL,F                       ;(led * 3)-3)

      movf PRODH,W                        ;
      addwf FSR0H,F                       ;  

      movf PRODL,W                        ; se placer au début de la led demandé 
      addwf FSR0L,F                       ;         

charge_bank
      movff vert,POSTINC0
      movff rouge,POSTINC0
      movff bleu,POSTINC0

      decfsz led_fin,F  
      bra charge_bank

      return

;*********************************************************************************************** 
hasard
      
      movf TMR1L,W 
      movwf lot1
 
      movf TMR1H,W 
      movwf lot2
       
      movf lot2,W
      addwf lot1,W                         

      movwf lot3

      return

;********************** "pause de 10 millisecondes pour horloge de 64 Mhz" **********************
_10ms
      movlw D'
201'
      movwf loop1
      movlw D'
208'
      movwf loop2

      decfsz loop1,F
      bra $-D'
2'
      decfsz loop2,F
      bra $-D'
6'

      return

;*********************************************************************************************** 

    End


Si je l'ai la commande de la led adresse 40, j'ai l'erreur suivante:

Code : Tout sélectionner

----------------------------------------------------------------------
Release build of project `C:\Users\mymy_nounoussa\Downloads\WS2812B-Cy(1)\WS2812B-Cy.disposable_mcp' started.
Language tool versions: MPASMWIN.exe v5.51, mplink.exe v4.49, mplib.exe v4.49
Fri May 22 10:51:05 2020
----------------------------------------------------------------------
Clean: Deleting intermediary and output files.
Clean: Done.
Executing: "C:\Program Files (x86)\Microchip\MPASM Suite\MPASMWIN.exe" /q /p18F26K22 "WS2812B-Cy.asm" /l"WS2812B-Cy.lst" /e"WS2812B-Cy.err"
Error[126]   C:\USERS\MYMY_NOUNOUSSA\DOWNLOADS\WS2812B-CY(1)\WS2812B-CY.ASM 347 : Argument out of range (1024 not between -1024 and 1023)
Halting build on first failure as requested.
----------------------------------------------------------------------
Release build of project 
`C:\Users\mymy_nounoussa\Downloads\WS2812B-Cy(1)\WS2812B-Cy.disposable_mcp' failed.
Language tool versions: MPASMWIN.exe v5.51, mplink.exe v4.49, mplib.exe v4.49
Fri May 22 10:51:08 2020
----------------------------------------------------------------------
BUILD FAILED



Alors que si je mets en commentaire la commande de la led 40, la compoilation va jusqu'au bout le programme tourne sans probleme.
On dirait bien que je suis arrivé à une limite fonctionelle......

Led RGB 5050 WS2812B
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 1638
Enregistré en : juillet 2016
Localisation : Terre

#48 Message par Temps-x » ven. 22 mai 2020 12:25

Bonsoir cyril13110, et tout le forum,

La première chose à faire c'est de remplacer tout les rcall par un call

Autre chose à savoir, la version du compilateur à son importance, je me suis retrouvé avec des erreurs on utilisant les vieux compilateurs, alors que l'erreur n'était pas présente en utilisant les nouveaux compilateurs, d’où l'utilité de prendre les compilateurs récent

En utilisant MPLAB IDE v8.92, tu travaille avec un vieux compilateur, mais si ça fonctionne comme ça tant mieux.

Ps : je viens de faire un essai avec plus de 1000 ligne ça compile bien, mets ton fichier en téléchargement je vais le corriger pour que tu n'es plus d'erreur.

Attention : même si c'est de l'assembleur la taille du programme à une limite, qui est délimité par ton :roll: Pic ou la datasheet


==> A+
Modifié en dernier par Temps-x le ven. 22 mai 2020 13:33, modifié 18 fois.
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

Led RGB 5050 WS2812B
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 1677
Âge : 69
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#49 Message par paulfjujo » ven. 22 mai 2020 12:45

bonjour ,


peut etre pas tous les RCALL
juste à verifier si la portée d'appel ne depasse pas 1023 ou -1024

RCALL= 1101 1nnn nnnn nnnn
421 8421 8421
bit4=signe 3 F F
signe=0 => 3FF => 1023
signe=1 => -1024





remplacer aussi preventivement le BRA par un GOTO

Code : Tout sélectionner


    
.......
control_led
      bra boucle
;

Aides toi, le ciel ou Fantastpic t'aideras

Led RGB 5050 WS2812B
cyril13110
Confirmé
Confirmé
Messages : 630
Âge : 37
Enregistré en : avril 2016
Localisation : 13

#50 Message par cyril13110 » ven. 22 mai 2020 14:18

Temps-x a écrit :Autre chose à savoir, la version du compilateur à son importance, je me suis retrouvé avec des erreurs on utilisant les vieux compilateurs, alors que l'erreur n'était pas présente en utilisant les nouveaux compilateurs, d’où l'utilité de prendre les compilateurs récent

En utilisant MPLAB IDE v8.92, tu travaille avec un vieux compilateur, mais si ça fonctionne comme ça tant mieux.


OK je vois je vais tenter de récupérer une version plus récente et revoir la compilation.
Je vais effectuer tous les changement que vous m'avez indiqué et j'ai aussi une idée d'optimisation.
Aurais tu un exemple de bout de code pour faire une pseudo boucle For?
Comme ça au lieux de taper 200 lignes je fais une boucle.
En attendant je vais tous de même bricoler pour voir si j'arrive de mon côté et je corrigerais avec ton exemple.
Avant de t'envoyer mon code à corriger je vais voir comment je peux avancer et en cas absolu de blocage je t'enverrais le code...


Retourner vers « Langage ASM »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 3 invités