- 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 ---
Modérateur : mazertoc
A toi de juger, il parle bien des 30 LEDs par mètre , oui ou non ?
Mais c'est vrai qu'il dit qu’il n'aime pas ce type de LED, comme moi ....
A+
- Gérard
Expert- Messages : 1653
- Âge : 65
- Enregistré en : septembre 2015
- Localisation : Alsace - Haut-Rhin
Temps-x a écrit :Re
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 ....
A+
Tu as donc aussi parti pris.
Moi, j'aime bien ces LED.
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+
-
cyril13110
Confirmé- Messages : 737
- Âge : 41
- Enregistré en : avril 2016
- Localisation : 13
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.
cyril13110 a écrit :Source du message sur le code que tu as fait pour 250 leds.
255 leds
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
ç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,3
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,5 = (15x62,5)
btfsc bits,3
clrf bits
nop
nop
btfsc FSR0H,2 ; contrôl si fin de bank3 atteint
return
bra direction
A+
-
cyril13110
Confirmé- Messages : 737
- Âge : 41
- Enregistré en : avril 2016
- Localisation : 13
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..... .....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.....
-
cyril13110
Confirmé- Messages : 737
- Âge : 41
- Enregistré en : avril 2016
- Localisation : 13
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 :1
lot2 :1
lot3 :1
couleur :1
rouge :1
vert :1
bleu :1
led_nombre :1
led_debut :1
led_fin :1
led :1
bits :1
temps :1
durée :1
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 Mhz, fréquence stable si PLL (16 * 4)= 64 Mhz
; movlw B'01100100' ; oscillateur à 8 Mhz, fréquence stable si PLL (8 * 4) = 32 Mhz
; movlw B'01010010' ; oscillateur à 4 Mhz, fréquence stable
; movlw B'01000010' ; oscillateur à 2 Mhz, fréquence stable
; movlw B'00110010' ; oscillateur à 1 Mhz, fré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(RB1) 23(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 : 1 = marche
movwf ADCON0 ; b1 = GO/DONE indique la fin de la conversion analogique, et 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érence, Vref+ = Vss
movwf ADCON1 ; b0 à b1 = 00 : sélection de la tension de reférence, Vref- = 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,0
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,0
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,0
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,0
rgb 0,0,0,37,37,0
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,0
rcall _10ms
rgb 0,10,10,9,9,0
rgb 0,10,10,19,19,0
rgb 0,10,10,29,29,0
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,0
rgb 0,0,0,39,39,0
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,Z
; 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 : temps, chiffre(0) ou varible(1)
; 500 ms temps de visionnage
; bcf led1
; tempo 10,0 ; macro : temps, chiffre(0) ou 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,3
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,5 = (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......
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 Pic ou la datasheet
A+
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
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;
-
cyril13110
Confirmé- Messages : 737
- Âge : 41
- Enregistré en : avril 2016
- Localisation : 13
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 49 invités