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 ---
- 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
appel aux specialistes ASM decalage 96 bits
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
Temps-x a écrit :Beaucoup de faut MAX7219 circule, ce qui fait qu'il fonctionne pas correctement voir ICI
A+
Dans la mesure ou mon affichage fixe sur les 12 modules 8x8 est correct, sans probleme
je pense que mes MAX7219 doivent etres OK..
je pense olutot à de mauvaises connections neuronales dans ma caboche ..
sur cette version de MAX connections TRAVERSANTE HORIZONTALES
il m'est tres difficile de visulaliser l'algorithm pour ce decalage
alors qu'il est intuitif pour la version MAX7219 connections HAUT en BAS. (version defilement avec 8 afficheurs OK )
quand à decortiquer une librairie arduino en CPP .. compliqué aussi .
appel aux specialistes ASM decalage 96 bits
Bonjour à tous,
Avec C18 :
STATUSbits.C = 1;
STATUS = STATUS | 0x01;
STATUS |= 1;
Pour MikroC, cela doit être un truc du genre :
STATUS.C = 1;
STATUS = STATUS | 0x01;
STATUS |= 1;
Voir ici : https://download.mikroe.com/documents/c ... l_bits.htm
car on ne peut pas FORCER le bit C du registre STATUS par programme
Avec C18 :
STATUSbits.C = 1;
STATUS = STATUS | 0x01;
STATUS |= 1;
Pour MikroC, cela doit être un truc du genre :
STATUS.C = 1;
STATUS = STATUS | 0x01;
STATUS |= 1;
Voir ici : https://download.mikroe.com/documents/c ... l_bits.htm
appel aux specialistes ASM decalage 96 bits
Je ne comprends pas cette affirmation
car j'ai déjà souvent utilisé des bsf ou bcf STATUS, C, en particulier dans ces situations de rotation ou décalage d'un registre
paulfjujo a écrit :Source du message car on ne peut pas FORCER le bit C du registre STATUS par programme !
car j'ai déjà souvent utilisé des bsf ou bcf STATUS, C, en particulier dans ces situations de rotation ou décalage d'un registre
appel aux specialistes ASM decalage 96 bits
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
Mille excuses JJE et Satinas, je me suis melangé les pinceaux, apres TROP de test differents
et aussi apres relecture de la datashheet qui pousse à un quiproquo : Status affected none
car c'est bien le test du bit C status que j'ai utilisé (au post#26) ..puis par la suite
le test en mode debugger le demontre
le bit de poids zero du STATUS, donc C, suit bien l'etat de CarryX
par contre , je ne sais pas , vu que je ne fais aucune sauvegarde de registres MCU , Wreg et STATUS,
avant de faire ces decalages,
si je ne perturbe pas l'environnement avec le reste du programme qui tourne ... en C
et aussi apres relecture de la datashheet qui pousse à un quiproquo : Status affected none
car c'est bien le test du bit C status que j'ai utilisé (au post#26) ..puis par la suite
le test en mode debugger le demontre
le bit de poids zero du STATUS, donc C, suit bien l'etat de CarryX
par contre , je ne sais pas , vu que je ne fais aucune sauvegarde de registres MCU , Wreg et STATUS,
avant de faire ces decalages,
si je ne perturbe pas l'environnement avec le reste du programme qui tourne ... en C
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
appel aux specialistes ASM decalage 96 bits
dans ma maigre culture sur le C, en tous cas sur ce C là, dans les premières passes de son travail, un compilateur génère du code assembleur puis ensuite lance l'assembleur. Donc quand il rencontre la directive asm, il se repose et n'a plus qu'à recopier le code asm qu'il rencontre jusqu'à la fin de bloc asm (son accolade fermante). donc tu ne dois rien perturber du tout.
appel aux specialistes ASM decalage 96 bits
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonsoir,
Je suis revenu sur les MAX7129 + matrice8x8 , derniere version de blocs reçus : affichage inversé haut et bas et sens de defilement inversé aussi !
j'en avais commandé 2 en esperant les accoler à un que j'avais acheté precedement .. et donc pas bon pour faire un montage à 3x4 matrices
Je me cantonne à 2x4 matrices avec des mots de 64 bits = 2 entiers long par ligne
=> 16 entiers long pour 8 caracteres 8x8
j'utilise le decalage en ASM , cité dans les post precedents et un terminal pour afficher en binaire et suivre la progression d'un bit lors des decalages .
Je m'aprecois d'une faille
Test de 128 decalage sur 1 ligne
Ca se passe assez bien, mais pour le rebouclage SORTIE ,vers ENTREE
je me retrouve avec une ligne à ZERO entre la transition fin de ligne et nouvelle ligne au (0063->) 64em decalage
le dernier bit SORT du registre (64bits) et tombe bien dans le Carry que je reporte vers l'ENTREE
mais entre les 2 , tout est à zero , il y a rupture de continuité
Le carry du 64em decalage Rentre bien au ( 0064-->)65em
pour etre CIRCULAIRE, le dernier bit sortie doit se trouver immediatement en position 0 au prochain decalage
quelque chose m'echappe !
Je suis revenu sur les MAX7129 + matrice8x8 , derniere version de blocs reçus : affichage inversé haut et bas et sens de defilement inversé aussi !
j'en avais commandé 2 en esperant les accoler à un que j'avais acheté precedement .. et donc pas bon pour faire un montage à 3x4 matrices
Je me cantonne à 2x4 matrices avec des mots de 64 bits = 2 entiers long par ligne
=> 16 entiers long pour 8 caracteres 8x8
j'utilise le decalage en ASM , cité dans les post precedents et un terminal pour afficher en binaire et suivre la progression d'un bit lors des decalages .
Je m'aprecois d'une faille
Test de 128 decalage sur 1 ligne
Ca se passe assez bien, mais pour le rebouclage SORTIE ,vers ENTREE
je me retrouve avec une ligne à ZERO entre la transition fin de ligne et nouvelle ligne au (0063->) 64em decalage
le dernier bit SORT du registre (64bits) et tombe bien dans le Carry que je reporte vers l'ENTREE
mais entre les 2 , tout est à zero , il y a rupture de continuité
Le carry du 64em decalage Rentre bien au ( 0064-->)65em
pour etre CIRCULAIRE, le dernier bit sortie doit se trouver immediatement en position 0 au prochain decalage
![colere :mur:](./images/smilies/icon_mur.gif)
3em test
Test 128 Decalages 32 bit en ASM sur 2 registres 32 bits chainés L10 L11
L10=1 , L11=0 et Carry en ENTREE = 0
00000 -> ................................|..............................*. la valeur 1 de L10 au depart, décalé à gauche donne bien 2
00001 -> ................................|.............................*..
00002 -> ................................|............................*...
00003 -> ................................|...........................*....
00004 -> ................................|..........................*.....
00005 -> ................................|.........................*......
00006 -> ................................|........................*.......
00007 -> ................................|.......................*........
00008 -> ................................|......................*.........
00009 -> ................................|.....................*..........
00010 -> ................................|....................*...........
00011 -> ................................|...................*............
00012 -> ................................|..................*.............
00013 -> ................................|.................*..............
00014 -> ................................|................*...............
00015 -> ................................|...............*................
00016 -> ................................|..............*.................
00017 -> ................................|.............*..................
00018 -> ................................|............*...................
00019 -> ................................|...........*....................
00020 -> ................................|..........*.....................
00021 -> ................................|.........*......................
00022 -> ................................|........*.......................
00023 -> ................................|.......*........................
00024 -> ................................|......*.........................
00025 -> ................................|.....*..........................
00026 -> ................................|....*...........................
00027 -> ................................|...*............................
00028 -> ................................|..*.............................
00029 -> ................................|.*..............................
00030 -> ................................|*...............................
00031 -> ...............................*|................................
00032 -> ..............................*.|................................
00033 -> .............................*..|................................
00034 -> ............................*...|................................
00035 -> ...........................*....|................................
00036 -> ..........................*.....|................................
00037 -> .........................*......|................................
00038 -> ........................*.......|................................
00039 -> .......................*........|................................
00040 -> ......................*.........|................................
00041 -> .....................*..........|................................
00042 -> ....................*...........|................................
00043 -> ...................*............|................................
00044 -> ..................*.............|................................
00045 -> .................*..............|................................
00046 -> ................*...............|................................
00047 -> ...............*................|................................
00048 -> ..............*.................|................................
00049 -> .............*..................|................................
00050 -> ............*...................|................................
00051 -> ...........*....................|................................
00052 -> ..........*.....................|................................
00053 -> .........*......................|................................
00054 -> ........*.......................|................................
00055 -> .......*........................|................................
00056 -> ......*.........................|................................
00057 -> .....*..........................|................................
00058 -> ....*...........................|................................
00059 -> ...*............................|................................
00060 -> ..*.............................|................................
00061 -> .*..............................|................................
00062 -> *...............................|................................
00063 -> ................................|................................
00064 -> ................................|...............................*
00065 -> ................................|..............................*.
00066 -> ................................|.............................*..
00067 -> ................................|............................*...
00068 -> ................................|...........................*....
00069 -> ................................|..........................*.....
00070 -> ................................|.........................*......
00071 -> ................................|........................*.......
00072 -> ................................|.......................*........
00073 -> ................................|......................*.........
00074 -> ................................|.....................*..........
00075 -> ................................|....................*...........
00076 -> ................................|...................*............
00077 -> ................................|..................*.............
00078 -> ................................|.................*..............
00079 -> ................................|................*...............
00080 -> ................................|...............*................
00081 -> ................................|..............*.................
00082 -> ................................|.............*..................
00083 -> ................................|............*...................
00084 -> ................................|...........*....................
00085 -> ................................|..........*.....................
00086 -> ................................|.........*......................
00087 -> ................................|........*.......................
00088 -> ................................|.......*........................
00089 -> ................................|......*.........................
00090 -> ................................|.....*..........................
00091 -> ................................|....*...........................
00092 -> ................................|...*............................
00093 -> ................................|..*.............................
00094 -> ................................|.*..............................
00095 -> ................................|*...............................
00096 -> ...............................*|................................
00097 -> ..............................*.|................................
00098 -> .............................*..|................................
00099 -> ............................*...|................................
00100 -> ...........................*....|................................
00101 -> ..........................*.....|................................
00102 -> .........................*......|................................
00103 -> ........................*.......|................................
00104 -> .......................*........|................................
00105 -> ......................*.........|................................
00106 -> .....................*..........|................................
00107 -> ....................*...........|................................
00108 -> ...................*............|................................
00109 -> ..................*.............|................................
00110 -> .................*..............|................................
00111 -> ................*...............|................................
00112 -> ...............*................|................................
00113 -> ..............*.................|................................
00114 -> .............*..................|................................
00115 -> ............*...................|................................
00116 -> ...........*....................|................................
00117 -> ..........*.....................|................................
00118 -> .........*......................|................................
00119 -> ........*.......................|................................
00120 -> .......*........................|................................
00121 -> ......*.........................|................................
00122 -> .....*..........................|................................
00123 -> ....*...........................|................................
00124 -> ...*............................|................................
00125 -> ..*.............................|................................
00126 -> .*..............................|................................
00127 -> *...............................|................................
appel aux specialistes ASM decalage 96 bits
Bonjour paulfjujo, et tout le forum,
J'ai pas tous compris, mais....Tes données sont sur 64 bits si j'ai bien compris, hors carry représente le 65 bits
65 - 64 = 1 qui représente ta ligne zéro, c'est au départ qu'il faut initialisé le Carry, pas simple à faire.....
Ton compteur de décrémentation doit pas être réglé comme il faut.
Cela nous fait 8 variables de 8 bits, à voir si tu sors de ta boucle entre temps par interruption ou autre.
J'attends pour en savoir un peu plus, et peut être te proposé une solution
A+
J'ai pas tous compris, mais....Tes données sont sur 64 bits si j'ai bien compris, hors carry représente le 65 bits
65 - 64 = 1 qui représente ta ligne zéro, c'est au départ qu'il faut initialisé le Carry, pas simple à faire.....
Ton compteur de décrémentation doit pas être réglé comme il faut.
Cela nous fait 8 variables de 8 bits, à voir si tu sors de ta boucle entre temps par interruption ou autre.
![Yeux tournants :roll:](./images/smilies/icon_rolleyes.gif)
![Clin d’œil :wink:](./images/smilies/icon_e_wink.gif)
![tab ==>](./images/smilies/icon_vide.gif)
appel aux specialistes ASM decalage 96 bits
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonjour TempsX et à tous,
je vois que tu as saisis mon probleme ...
ce matin j'ai modifié le debut et la fin du decalage de bits,
au lieu d'utiliser le carry de sortie vers l'entree du registre
je reporte seulement le carry de sortie dans le 1er bit du registre !
de sorte à nepas creer ce 65em bit !
-->0062 donc le 63 em bit qui, poussé ensuite ,tombe dans le carry => 64em bit
etat du carry copié dans le bit -> 000 = 1er bit du registre 64 bits (L11-L10)
apres les 128 decalages, je retrouve L10=0x0001 = valeur du point de depart
ça me semble correct
ton avis ?
Transition au milieu du decalage ..
avec le code c'est peut etre plus explicite ..
je vois que tu as saisis mon probleme ...
ce matin j'ai modifié le debut et la fin du decalage de bits,
au lieu d'utiliser le carry de sortie vers l'entree du registre
je reporte seulement le carry de sortie dans le 1er bit du registre !
de sorte à nepas creer ce 65em bit !
-->0062 donc le 63 em bit qui, poussé ensuite ,tombe dans le carry => 64em bit
etat du carry copié dans le bit -> 000 = 1er bit du registre 64 bits (L11-L10)
apres les 128 decalages, je retrouve L10=0x0001 = valeur du point de depart
ça me semble correct
![idée idea !](./images/smilies/idee.png)
Transition au milieu du decalage ..
![siffleur :sifflotte:](./images/smilies/icon_sifflotte.gif)
Code : Tout sélectionner
CRLF1();
UART1_Write_CText(" Test 128 Decalages (2 tours de 64 bits) en ASM sur 2 entiers long L10,L11 \r\n");
Depart=START_Absolute_Adresse;
L10=1;
CarryX=0;
for(i=0;i<8;i++) Carry[i]=0;
UART1_Write_CText("\r\n L10=1 , L11=0 et Carry en ENTREE = ");
UART1_Write(Carry[0]+48);
CRLF1();
for (i=0;i<128;i++)
{
UART1_Write(' ');WordToStrWithZeros(i,CRam1);
UART1_Write_Text(CRam1);UART1_Write_CText(" -> ");
txt=&TEXTE[0];
CarryX=Carry[0]; // table contenant les reports des 8 mots de 64 bits
_asm {
// bsf STATUS, 0 // set bit C => C=1 bit CARRY du registre STATUS
// btfss _CarryX,0,1 // si le bit de position 0 de la variable _Carry==1 on saute la RAZ de C , donc C reste à 1
// bcf STATUS,0,0 // RAZ bit C => C=0
// nop
// nop
rlcf _L10+0,1,0 // rotate left through carry de _L10[0] (rlcf _L10,F,ACCESS)
rlcf _L10+1,1,0
rlcf _L10+2,1,0
rlcf _L10+3,1,0
rlcf _L11+0,1,0 // 2em partie mot de 64 bits
rlcf _L11+1,1,0
rlcf _L11+2,1,0
rlcf _L11+3,1,0
// bcf _CarryX,0
// btfsc STATUS,0,1
// bsf _CarryX,0
// nop
// modif 06-11-2019
bcf _L10,0
btfsc STATUS,0,1 // si Carry=1 => reporté dans le bit 0 du mot de depart
bsf _L10,0
nop
nop
}
Carry[0] = CarryX ; // memorise report si C=1
Binarise_32bits(L11,txt); UART1_Write('|'); Binarise_32bits(L10,txt);
CRLF1();
}
CRLF1();
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
appel aux specialistes ASM decalage 96 bits
- Claudius
Passioné- Messages : 260
- Âge : 69
- Enregistré en : septembre 2015
- Localisation : ELANCOURT (78 - YVELINES)
- Contact :
Bonjour,
Si sortie par interruption (si il y a et si bien programmée notamment par rapport aux éventuelles variables globales qui seraient modifiées dans la routine d'interruption ;-), on ré-entrera de toute façon dans la boucle avec le bon contexte (hors bug du compilateur naturellement)
Maintenant, une piste @... sortie de la boucle si autre, en lisant for (i=0;i<128;i++) ... remplacer i par une variable de nom moins courant et unique dans le programme pour être sûr qu'elle n'est pas utilisée ailleurs
Temps-x » mer. 6 nov. 2019 01:03
...
Cela nous fait 8 variables de 8 bits, à voir si tu sors de ta boucle entre temps par interruption ou autre.
Si sortie par interruption (si il y a et si bien programmée notamment par rapport aux éventuelles variables globales qui seraient modifiées dans la routine d'interruption ;-), on ré-entrera de toute façon dans la boucle avec le bon contexte (hors bug du compilateur naturellement)
Maintenant, une piste @... sortie de la boucle si autre, en lisant for (i=0;i<128;i++) ... remplacer i par une variable de nom moins courant et unique dans le programme pour être sûr qu'elle n'est pas utilisée ailleurs
Enregistreur de traces GPS & Boussole GPS parlante (PIC & Arduino)
appel aux specialistes ASM decalage 96 bits
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
Bonjour Claudius,
j'ai mis GIE_bit=0; pas d'interruptions possible..
mais toujour un resultat NON VALABLE ...
nota: Affichage correct sur les 8 max "01234567" avant decalage !
mais pour verifier et mieux comprendre ce qui se passe, je trace tout sur le terminal
et pister le decalage de Table contenant le texte à afficher
avec ce bout de code
malgre le test correct du decalage 1ere ligne OK sur 64 ou 128 bits ( 2 loops)
je vois que le carry se repercute dans le bit 0 de chaque mot
melange entre les debuts de chaque lettre ...
Bizarre qu'on ne retouve pas les instructions type motorola 6800 sur ces MCU
ASL (arithmetique Left Shit) .. decalage à gauche ou LSR a droite en poussant le bit extreme dans le carry
MAIS SANS REBOUCLAGE du Carry SUR L'ENTREE
c'est bien gentil ,les MCU avec jeu d'instruction reduits ..mais le Z80 me manque un peu ..
18F27K42 .. pas le choix , ou on pert le bit de sortie RLNCF (sans Carry) ou on remet le carry sur l'entree RLCF
bon, ça devient
un casse tete pour moi,
je vais revenir sur les decalages en 100% C
j'ai mis GIE_bit=0; pas d'interruptions possible..
mais toujour un resultat NON VALABLE ...
nota: Affichage correct sur les 8 max "01234567" avant decalage !
mais pour verifier et mieux comprendre ce qui se passe, je trace tout sur le terminal
et pister le decalage de Table contenant le texte à afficher
avec ce bout de code
Code : Tout sélectionner
pB=START_Absolute_Adresse; // adresse stockage des 8 long 32 bits = 0x0016
for (j=0;j<8;j++)
{
UART1_Write(TAB); UART1_Write_Text( Bin2Asc( *(pB+j))); UART1_Write_Text( Bin2Asc( *(pB+j+8))); ;
UART1_Write_Text( Bin2Asc( *(pB+j+16))); UART1_Write_Text( Bin2Asc( *(pB+j+24)));
UART1_Write_Text( Bin2Asc( *(pB+j+32))); UART1_Write_Text( Bin2Asc( *(pB+j+40)));
UART1_Write_Text( Bin2Asc( *(pB+j+48))); UART1_Write_Text( Bin2Asc( *(pB+j+56))); CRLF1();
}
malgre le test correct du decalage 1ere ligne OK sur 64 ou 128 bits ( 2 loops)
je vois que le carry se repercute dans le bit 0 de chaque mot
melange entre les debuts de chaque lettre ...
Bizarre qu'on ne retouve pas les instructions type motorola 6800 sur ces MCU
ASL (arithmetique Left Shit) .. decalage à gauche ou LSR a droite en poussant le bit extreme dans le carry
MAIS SANS REBOUCLAGE du Carry SUR L'ENTREE
c'est bien gentil ,les MCU avec jeu d'instruction reduits ..mais le Z80 me manque un peu ..
18F27K42 .. pas le choix , ou on pert le bit de sortie RLNCF (sans Carry) ou on remet le carry sur l'entree RLCF
bon, ça devient
![colere :mur:](./images/smilies/icon_mur.gif)
je vais revenir sur les decalages en 100% C
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Retourner vers « Langage ASM »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 50 invités