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
OK, c'est bon, à 4h j'étais pas net, je pensais même que la boucle éclatait le tableau.
Le fait de stocker en octet, c'est parce que au départ la font et à l'arrivée les matrices travaillent en octets.
Par contre tu as mis en commentaire l'insert _asm, qui n'est donc pas dans le LST, c'est lui que je voulais :)
J'ai MikroC mais je peux pas recompiler, il me manque des fichiers include.
Le fait de stocker en octet, c'est parce que au départ la font et à l'arrivée les matrices travaillent en octets.
Par contre tu as mis en commentaire l'insert _asm, qui n'est donc pas dans le LST, c'est lui que je voulais :)
J'ai MikroC mais je peux pas recompiler, il me manque des fichiers include.
appel aux specialistes ASM decalage 96 bits
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
OK, j'ai rajouté les fichiers manquants
et j'ai mis la version utilisant le decalage en asm
j'espere ne rien oublier ...
MikroC ne sait pas gerer l'exportation d'un projet ! il met tout ce qui est dans le directory de travail
ou alors il faudrait gerer un autre directory à chaque variante de compilation !
et j'ai mis la version utilisant le decalage en asm
j'espere ne rien oublier ...
MikroC ne sait pas gerer l'exportation d'un projet ! il met tout ce qui est dans le directory de travail
ou alors il faudrait gerer un autre directory à chaque variante de compilation !
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
appel aux specialistes ASM decalage 96 bits
Le tableau temps est à l'adresse 0x800 en bank 8. Pour y accéder il faut sélectionner la bank8 dans le registre BSR.
Tu l'as fait dans la routine _asm commentée, mais pas dans celle qui est compilée.
Donc sauvegarder BSR au départ dans une variable 8 bits save_bsr.
Ensuite le passer à 8, et recharger la sauvegarde à la fin de la routine.
En espérant que ça règle le problème, bien que cela aurait dû faire beaucoup plus de dégât.
Je peux compiler, mais "Demo Limit !"
Pour assurer le coup, il vaut mieux aussi sauvegarder le registre W
"save_w" et "save_bsr" peuvent être n'importe où en ram.
"sortie" doit être en bank 8 (ou en access ram < 0x60)
En envoyant par spi après chaque décalage tu pourrais profiter du temps de transmit pour faire le décalage suivant, Temps-x avait abordé ce sujet.
Le principe est là, durant cette routine, toute variable supplémentaire doit être déclarée en bank8 ou en access ram.
Tu l'as fait dans la routine _asm commentée, mais pas dans celle qui est compilée.
Donc sauvegarder BSR au départ dans une variable 8 bits save_bsr.
Ensuite le passer à 8, et recharger la sauvegarde à la fin de la routine.
En espérant que ça règle le problème, bien que cela aurait dû faire beaucoup plus de dégât.
Je peux compiler, mais "Demo Limit !"
Pour assurer le coup, il vaut mieux aussi sauvegarder le registre W
"save_w" et "save_bsr" peuvent être n'importe où en ram.
"sortie" doit être en bank 8 (ou en access ram < 0x60)
Code : Tout sélectionner
_asm {
movffl WREG,save_w ; sauvegarder W
movffl BSR,save_bsr ; sauvegarder BSR
movlb 8 ; sélectionner bank8, BSR = 8
movlw 63
movwf _sortie ; 8 matrice x 8 points = 64 (8 bits x Nombre de Matrice) = sortie
tourne:
bcf STATUS,C ; positionnement à priori de Report à 0
btfsc _temps+7,7 ; regarder si le bits 7, de la variable "temps+11" est 1
bsf STATUS,C ; si oui, positionnement de Report à 1
rlcf _temps+0,F
rlcf _temps+1,F
...
rlcf _temps+62,F
rlcf _temps+63,F
decfsz _sortie,F
bra tourne
movffl save_bsr,BSR ; recharger BSR
movffl save_w,WREG ; recharger W
}
En envoyant par spi après chaque décalage tu pourrais profiter du temps de transmit pour faire le décalage suivant, Temps-x avait abordé ce sujet.
Le principe est là, durant cette routine, toute variable supplémentaire doit être déclarée en bank8 ou en access ram.
appel aux specialistes ASM decalage 96 bits
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonsoir,
J'ai refait un test, cette fois avec un 18F26K22 et avec un programme minimaliste
utilisant seulement l'UART pour afficher les 8 mots de 64 bits.
Je precharge au depart les 8 registre LSB avec la lettre A ...
Lettre "A" qui defile bien sur les 8 lignes en boucle , sans alterations . (voir le fichier resultat : Test_191115_log.txt)
le probleme n'est donc pas dans le code ASM, mais un probleme de perturbation externe
le code en C , 18F26K22 + asm +LST + decalage en asm
SATINAS : je vais tester ta solution qui preserve les registre W et BSR
qui doivent etre poluées par les fonctions en C utilisées par ailleurs ..
test avec sauvegarde et restitution de WREG et BSR sur mon appli basée sur 18F27K42
car c'est sur celle ci que je veux du défilement ..
=> idem problemo ... interferences ???
maintenant, il y a aussi des registres SHADOW !!! des shadocks ,oui !
au vu des STATISTICS
la sequence de decalage et les varaibles de stockage sont bien dans la banque 0x800
j'ai ensuite , aussi deplacé une table de 768 bytes dans 0x900
ça ne change rien ..
J'ai refait un test, cette fois avec un 18F26K22 et avec un programme minimaliste
utilisant seulement l'UART pour afficher les 8 mots de 64 bits.
Je precharge au depart les 8 registre LSB avec la lettre A ...
Lettre "A" qui defile bien sur les 8 lignes en boucle , sans alterations . (voir le fichier resultat : Test_191115_log.txt)
le probleme n'est donc pas dans le code ASM, mais un probleme de perturbation externe
le code en C , 18F26K22 + asm +LST + decalage en asm
SATINAS : je vais tester ta solution qui preserve les registre W et BSR
qui doivent etre poluées par les fonctions en C utilisées par ailleurs ..
test avec sauvegarde et restitution de WREG et BSR sur mon appli basée sur 18F27K42
car c'est sur celle ci que je veux du défilement ..
=> idem problemo ... interferences ???
maintenant, il y a aussi des registres SHADOW !!! des shadocks ,oui !
au vu des STATISTICS
la sequence de decalage et les varaibles de stockage sont bien dans la banque 0x800
j'ai ensuite , aussi deplacé une table de 768 bytes dans 0x900
ça ne change rien ..
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
appel aux specialistes ASM decalage 96 bits
paulfjujo a écrit :Source du message maintenant, il y a aussi des registres SHADOW !!! des shadocks ,oui !
Voila pourquoi ça fonctionne pas ....
A+
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
appel aux specialistes ASM decalage 96 bits
Bonsoir
Est-ce possible de faire une version avec bank8 qui passe dans la version limitée de MikroC, qui montrerait le problème ?
S'il y a un debugger pas à pas permettant de suivre le C et l'asm, on doit pouvoir trouver où cela coince.
Sinon passe à C18, y a pas mieux, le Professeur Shadoko te le confirmera ...
Est-ce possible de faire une version avec bank8 qui passe dans la version limitée de MikroC, qui montrerait le problème ?
S'il y a un debugger pas à pas permettant de suivre le C et l'asm, on doit pouvoir trouver où cela coince.
Sinon passe à C18, y a pas mieux, le Professeur Shadoko te le confirmera ...
appel aux specialistes ASM decalage 96 bits
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonsoir,
mon test de decalage avec la lettre A , qui circulait bien , mais de gauche à droite (??) , sur le terminal
m'a mis la puce à l'oreille :
cette lettre est symetrique
j'ai donc re testé avec la lettre E , et là : SHADOCKERIE !
elle est à l'envers sens horizontal !
* apparté sur les 2 versions d'horloge
du fait que ces matrices circulent en sens inverse ! connectique d'entree à droite sur l'horloge V2 ( à gauche sur l'horloge version 1)
si j'envoie 0123 sur la Version 1 , j'obtiens 0123 affiché
sur la version 2 j'obtiens 3210
(au point de vue horloge je traite les afficheurs differement , pas d'usage de la font_8x8
mais des chiffres 0 à 9 centré à droite et 0 à 9 centres à Gauche
et routine d'affichage chiffre modifiée.
il faut que j'utilise une Font avec les caracteres inversés entre MSB et LSB de chaque byte
ce qui montre la complication , en voulant decaler le texte ( les 8 lignes de 64 octests pour 8 matrices)
à gauche et la matrice qui va dans l'autre sens..
bref il faut que je remette tout cela à plat ..
sous debugger , le decalage 96 bits fonctionne OK , en visualisant les 8 entiers longs.
le probleme ne serait donc pas au niveau du decalage pur sur 96 bits en ASM
car là, je ne preoccupe pas de l'affichage sur terminal ou l'affichage matrice.
je sais .. c'est vraiment capilotracté!
je vais laisser reposer tout ça pendant une semaine ... pour repartir à zero
mon test de decalage avec la lettre A , qui circulait bien , mais de gauche à droite (??) , sur le terminal
m'a mis la puce à l'oreille :
cette lettre est symetrique
j'ai donc re testé avec la lettre E , et là : SHADOCKERIE !
elle est à l'envers sens horizontal !
* apparté sur les 2 versions d'horloge
du fait que ces matrices circulent en sens inverse ! connectique d'entree à droite sur l'horloge V2 ( à gauche sur l'horloge version 1)
si j'envoie 0123 sur la Version 1 , j'obtiens 0123 affiché
sur la version 2 j'obtiens 3210
(au point de vue horloge je traite les afficheurs differement , pas d'usage de la font_8x8
mais des chiffres 0 à 9 centré à droite et 0 à 9 centres à Gauche
et routine d'affichage chiffre modifiée.
il faut que j'utilise une Font avec les caracteres inversés entre MSB et LSB de chaque byte
ce qui montre la complication , en voulant decaler le texte ( les 8 lignes de 64 octests pour 8 matrices)
à gauche et la matrice qui va dans l'autre sens..
bref il faut que je remette tout cela à plat ..
sous debugger , le decalage 96 bits fonctionne OK , en visualisant les 8 entiers longs.
le probleme ne serait donc pas au niveau du decalage pur sur 96 bits en ASM
car là, je ne preoccupe pas de l'affichage sur terminal ou l'affichage matrice.
je sais .. c'est vraiment capilotracté!
je vais laisser reposer tout ça pendant une semaine ... pour repartir à zero
appel aux specialistes ASM decalage 96 bits
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
Test avec un texte un peux particulier pour mieux comprendre ce qu'il se passe
à priori c'est le report de carry qui ne se passe pas correctement au vu de ce test :
sur les lignes 1,2,3 on voit bien se decaler les bits à gauches mais
sur la ligne 4
des que le caractere a un bit qui tombe dans le carry , il est reporté sur la position homoloque
du byte de la ligne suivante ?
à suivre...
à priori c'est le report de carry qui ne se passe pas correctement au vu de ce test :
sur les lignes 1,2,3 on voit bien se decaler les bits à gauches mais
sur la ligne 4
des que le caractere a un bit qui tombe dans le carry , il est reporté sur la position homoloque
du byte de la ligne suivante ?
à suivre...
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
appel aux specialistes ASM decalage 96 bits
appel aux specialistes ASM decalage 96 bits
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonsoir à tous,
Ouf ! probleme résolu !
il a fallu que j'ajoute la representation de ma matrice d'affichage terminal, avec les adresse de chaque ligne de matrice
( qui est le pendant de l'affichage sur matrice reelle ! )
pour voir enfin que l'ordre de decalage était OUT !
la suite .. longueur de message 128 cars maxi
C'est dommage , je n'ai pas de 3em board de 4 matrice idem aux 2 presentes ,
mais je vais passer à la version 96 bits , au moins en affichage terminal .
en attendant une 3me , voir 4em board !
projet complet mikroc .. demain
Ouf ! probleme résolu !
il a fallu que j'ajoute la representation de ma matrice d'affichage terminal, avec les adresse de chaque ligne de matrice
( qui est le pendant de l'affichage sur matrice reelle ! )
pour voir enfin que l'ordre de decalage était OUT !
Code : Tout sélectionner
void New_decalage_64bits(void)
{
// rev 22-11-2019
_asm{
nop ;// pour pose point d'arret au debut
bcf STATUS,C ;// positionne Carry à 0
btfsc _temps+0,7 ;// regarder si le bits 7, de la variable "temps+7" est 1
bsf STATUS,C ;// si oui, positionne Carry à 1
rlcf _temps+56,F
rlcf _temps+48,F ;
rlcf _temps+40,F ;
rlcf _temps+32,F ;
rlcf _temps+24,F ;
rlcf _temps+16,F ;
rlcf _temps+08,F ;
rlcf _temps+00,F
//2em
bcf STATUS,C
btfsc _temps+1,7
bsf STATUS,C
rlcf _temps+57,F ;
rlcf _temps+49,F ;
rlcf _temps+41,F ;
rlcf _temps+33,F ;
rlcf _temps+25,F ;
rlcf _temps+17,F ;
rlcf _temps+09,F ;
rlcf _temps+01,F ;
//3em
bcf STATUS,C
btfsc _temps+2,7
bsf STATUS,C
rlcf _temps+58,F ;
rlcf _temps+50,F ;
rlcf _temps+42,F ;
rlcf _temps+34,F ;
rlcf _temps+26,F ;
rlcf _temps+18,F ;
rlcf _temps+10,F ;
rlcf _temps+02,F ;
//4em
bcf STATUS,C
btfsc _temps+3,7
bsf STATUS,C
rlcf _temps+59,F ;
rlcf _temps+51,F ;
rlcf _temps+43,F ;
rlcf _temps+35,F ;
rlcf _temps+27,F ;
rlcf _temps+19,F ;
rlcf _temps+11,F ;
rlcf _temps+03,F ;
//5em
bcf STATUS,C
btfsc _temps+4,7
bsf STATUS,C
rlcf _temps+60,F ;
rlcf _temps+52,F ;
rlcf _temps+44,F ;
rlcf _temps+36,F ;
rlcf _temps+28,F ;
rlcf _temps+20,F ;
rlcf _temps+12,F ;
rlcf _temps+04,F ;
//6em
bcf STATUS,C
btfsc _temps+5,7
bsf STATUS,C
rlcf _temps+61,F ;
rlcf _temps+53,F ;
rlcf _temps+45,F ;
rlcf _temps+37,F ;
rlcf _temps+29,F ;
rlcf _temps+21,F ;
rlcf _temps+13,F ;
rlcf _temps+05,F ;
//7em
bcf STATUS,C
btfsc _temps+6,7
bsf STATUS,C
rlcf _temps+62,F ;
rlcf _temps+54,F ;
rlcf _temps+46,F ;
rlcf _temps+38,F ;
rlcf _temps+30,F ;
rlcf _temps+22,F ;
rlcf _temps+14,F ;
rlcf _temps+06,F ;
//8em
bcf STATUS,C
btfsc _temps+7,7
bsf STATUS,C
rlcf _temps+63,F ;
rlcf _temps+55,F ;
rlcf _temps+47,F ;
rlcf _temps+39,F ;
rlcf _temps+31,F ;
rlcf _temps+23,F ;
rlcf _temps+15,F ;
rlcf _temps+07,F ;
nop ; // pour point d'arret
}
}
la suite .. longueur de message 128 cars maxi
C'est dommage , je n'ai pas de 3em board de 4 matrice idem aux 2 presentes ,
mais je vais passer à la version 96 bits , au moins en affichage terminal .
en attendant une 3me , voir 4em board !
projet complet mikroc .. demain
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 59 invités