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
debut avec le debuguer
debut avec le debuguer
Bonjour Maï
J'ai changé en majuscule, le fichier include, j'ai remplacé la ligne config par la mienne, je l'ai a nouveau remplacé par celle que tu as posté et toujours
avec ma ligne config
J'ai
J'ai changé en majuscule, le fichier include, j'ai remplacé la ligne config par la mienne, je l'ai a nouveau remplacé par celle que tu as posté et toujours
Code : Tout sélectionner
make -f nbproject/Makefile-default.mk SUBPROJECTS= .build-conf
make[1]: Entering directory 'C:/jmp/pic/fantaspicmai/afficheur/fantaspicmai.X'
make -f nbproject/Makefile-default.mk dist/default/debug/fantaspicmai.X.debug.cof
make[2]: Entering directory 'C:/jmp/pic/fantaspicmai/afficheur/fantaspicmai.X'
make[2]: *** [build/default/debug/_ext/1472/fantaspicmai.o] Error 1
make[1]: *** [.build-conf] Error 2
make: *** [.build-impl] Error 2
"C:\Program Files (x86)\Microchip\MPLABX\v3.35\mpasmx\mpasmx.exe" -d__DEBUG -d__MPLAB_DEBUGGER_SIMULATOR=1 -q -p16f877 -l"build/default/debug/_ext/1472/fantaspicmai.lst" -e"build/default/debug/_ext/1472/fantaspicmai.err" -o"build/default/debug/_ext/1472/fantaspicmai.o" "../fantaspicmai.asm"
Error[108] ..\FANTASPICMAI.ASM 1 : Illegal character (*)
Error[113] ..\FANTASPICMAI.ASM 18 : Symbol not previously defined (_FOSC_HS)
Error[113] ..\FANTASPICMAI.ASM 18 : Symbol not previously defined (_WDTE_OFF)
Error[113] ..\FANTASPICMAI.ASM 18 : Symbol not previously defined (_BOREN_OFF)
Error[113] ..\FANTASPICMAI.ASM 18 : Symbol not previously defined (_WRT_OFF)
Message[305] ..\FANTASPICMAI.ASM 157 : Using default destination of 1 (file).
Message[305] ..\FANTASPICMAI.ASM 164 : Using default destination of 1 (file).
nbproject/Makefile-default.mk:92: recipe for target 'build/default/debug/_ext/1472/fantaspicmai.o' failed
make[2]: Leaving directory 'C:/jmp/pic/fantaspicmai/afficheur/fantaspicmai.X'
nbproject/Makefile-default.mk:84: recipe for target '.build-conf' failed
make[1]: Leaving directory 'C:/jmp/pic/fantaspicmai/afficheur/fantaspicmai.X'
nbproject/Makefile-impl.mk:39: recipe for target '.build-impl' failed
BUILD FAILED (exit value 2, total time: 1s)
avec ma ligne config
Code : Tout sélectionner
make -f nbproject/Makefile-default.mk SUBPROJECTS= .build-conf
make[1]: Entering directory 'C:/jmp/pic/fantaspicmai/afficheur/fantaspicmai.X'
make -f nbproject/Makefile-default.mk dist/default/debug/fantaspicmai.X.debug.cof
make[2]: Entering directory 'C:/jmp/pic/fantaspicmai/afficheur/fantaspicmai.X'
make[2]: *** [build/default/debug/_ext/1472/fantaspicmai.o] Error 1
make[1]: *** [.build-conf] Error 2
make: *** [.build-impl] Error 2
"C:\Program Files (x86)\Microchip\MPLABX\v3.35\mpasmx\mpasmx.exe" -d__DEBUG -d__MPLAB_DEBUGGER_SIMULATOR=1 -q -p16f877 -l"build/default/debug/_ext/1472/fantaspicmai.lst" -e"build/default/debug/_ext/1472/fantaspicmai.err" -o"build/default/debug/_ext/1472/fantaspicmai.o" "../fantaspicmai.asm"
Error[108] ..\FANTASPICMAI.ASM 1 : Illegal character (*)
Message[305] ..\FANTASPICMAI.ASM 157 : Using default destination of 1 (file).
Message[305] ..\FANTASPICMAI.ASM 164 : Using default destination of 1 (file).
nbproject/Makefile-default.mk:92: recipe for target 'build/default/debug/_ext/1472/fantaspicmai.o' failed
make[2]: Leaving directory 'C:/jmp/pic/fantaspicmai/afficheur/fantaspicmai.X'
nbproject/Makefile-default.mk:84: recipe for target '.build-conf' failed
make[1]: Leaving directory 'C:/jmp/pic/fantaspicmai/afficheur/fantaspicmai.X'
nbproject/Makefile-impl.mk:39: recipe for target '.build-impl' failed
BUILD FAILED (exit value 2, total time: 1s)
J'ai
debut avec le debuguer
super ca compile
J'ai changé avec ma config et aussi la toute premiere ligne d'* n'avais pas le ";"
J'ai changé avec ma config et aussi la toute premiere ligne d'* n'avais pas le ";"
Code : Tout sélectionner
__CONFIG _CP_OFF & _DEBUG_OFF & _WRT_ENABLE_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _PWRTE_ON & _WDT_OFF & _HS_OSC
debut avec le debuguer
C'est bien .Alors si tu veux bien,une petite explication sur le spg LedTable et pourquoi cela plante.
addwf, fait une addition du registre W, avec le pointeur d'instruction PCL.Une fois addition faite ,tu te retrouves sur la ligne(le pointeur instruction, je sais pas toi ), par exemple 5, la W se charge de la valeur de 5. Jusque la rien de très compliqué. Le problème est que:
/Nous avons fait une addition sur 8 bits, sans propagation de la retenu,
/ET ou se situe cette table ,tout dépend de la longueur de ton programme puisque elle est en fin du programme, ici 2 cas:
1/Fin programme-> milieu segment (segment va de 0x00 a 0xFF) exemple fin programme 0x159, je sais, facile cela veut dire, début de table 0x159-9 =0x150
La aucun souci avec l'addition, toute les additions sont sans retenue.
2/ Fin programme ->début segment exemple 0x0x203, début de table 0x1FA(0x203-9) si tu fais 0X1FA +2 tu récupères la donnée pas de retenu mais si tu fais 0x1FA+7 cela va te donner, en pointeur instruction 0X101 et oui FA+7= 01 avec carry=1 donc donnée erronée plantage système
ALORS 2 possibilités, soit tu traites la CARRY, soit tu mets ta table sur un bon segment. Perso la 2eme solution. Pour cela tu plantes ta table ici
Affaire réglé
A+
PS SI tu es ok, suite sur trimer, sinon, pas de problème a ton écoute
dans mon explication, j'ai mis la longueur de la table à 9 éléments, alors quelle en a 11. Je me suis planté ,le principe reste le même débordement de l'addition avec carry retenue ou pas
addwf, fait une addition du registre W, avec le pointeur d'instruction PCL.Une fois addition faite ,tu te retrouves sur la ligne(le pointeur instruction, je sais pas toi ), par exemple 5, la W se charge de la valeur de 5. Jusque la rien de très compliqué. Le problème est que:
/Nous avons fait une addition sur 8 bits, sans propagation de la retenu,
/ET ou se situe cette table ,tout dépend de la longueur de ton programme puisque elle est en fin du programme, ici 2 cas:
1/Fin programme-> milieu segment (segment va de 0x00 a 0xFF) exemple fin programme 0x159, je sais, facile cela veut dire, début de table 0x159-9 =0x150
La aucun souci avec l'addition, toute les additions sont sans retenue.
2/ Fin programme ->début segment exemple 0x0x203, début de table 0x1FA(0x203-9) si tu fais 0X1FA +2 tu récupères la donnée pas de retenu mais si tu fais 0x1FA+7 cela va te donner, en pointeur instruction 0X101 et oui FA+7= 01 avec carry=1 donc donnée erronée plantage système
ALORS 2 possibilités, soit tu traites la CARRY, soit tu mets ta table sur un bon segment. Perso la 2eme solution. Pour cela tu plantes ta table ici
Code : Tout sélectionner
SWAPF Sauv1,0
MOVWF STATUS ;restaure status
SWAPF Sauv, 1
SWAPF Sauv, 0 ;restaure W
RETFIE ; retour int
;*********************** AFFICHAGE des SECONDES *******************************
;poids fort ComptSd ;poid faible ComptSu
;******************************************************************************
LedTable
addwf PCL,f ; ajout au PC
retlw B'00111111' ; LED allum?es pour afficher 0
retlw B'00000110' ; LED allum?es pour afficher 1
retlw B'01011011' ; LED allum?es pour afficher 2
retlw B'01001111' ; LED allum?es pour afficher 3
retlw B'01100110' ; LED allum?es pour afficher 4
retlw B'01101101' ; LED allum?es pour afficher 5
retlw B'01111101' ; LED allum?es pour afficher 6
retlw B'00000111' ; LED allum?es pour afficher 7
retlw B'01111111' ; LED allum?es pour afficher 8
retlw B'01100111' ; LED allum?es pour afficher 9
retlw B'00000000' ; Effacement toutes LED
;*******************************************************************
; Début du Programme
;*******************************************************************
Principale
;*********************** Mise a zéro de la mémoire RAM banque0 ******
MOVLW DRAM
MOVWF FSR
Effa CLRF INDF
INCF FSR,F ;RAZ RAM
BTFSS FSR,7
GOTO Effa
Affaire réglé
A+
PS SI tu es ok, suite sur trimer, sinon, pas de problème a ton écoute
dans mon explication, j'ai mis la longueur de la table à 9 éléments, alors quelle en a 11. Je me suis planté ,le principe reste le même débordement de l'addition avec carry retenue ou pas
Modifié en dernier par Anonymous le ven. 23 sept. 2016 06:50, modifié 1 fois.
debut avec le debuguer
Gros merci Maï
J'ai bien compris le coup de la retenu pour le tableau, merci.
Je trace ton programme en boucle pour bien me familiariser avec debug. Je rajoute des commentaires pour ne pas me perdre. Je n'ai pas mis en situation réelle car ma platine d'essai, malgré ses 4 afficheurs digital, n'a q'une ligne de commande pour les 4 que je commande les catodes communes à tour de rôle.
Mais si je comprend bien pour l'instant ton prog n'a pas les tempo en fonction
Jean-marc, impatient de voir la suite
J'ai bien compris le coup de la retenu pour le tableau, merci.
Je trace ton programme en boucle pour bien me familiariser avec debug. Je rajoute des commentaires pour ne pas me perdre. Je n'ai pas mis en situation réelle car ma platine d'essai, malgré ses 4 afficheurs digital, n'a q'une ligne de commande pour les 4 que je commande les catodes communes à tour de rôle.
Mais si je comprend bien pour l'instant ton prog n'a pas les tempo en fonction
Jean-marc, impatient de voir la suite
debut avec le debuguer
Bonjour
Pour le timer une autre fois
heu.... je ne comprend pas ce que tu appels TEMPO, car avec le timer1, nous incrémentons bien notre compteur seconde et cela tout, les secondes donc une tempo de 1S. C'est un compteur temps. Ce que tu as ici est la structure, d'un chronomètre d'un compteur décompteur, tient pour faire cuire des œufs par exemple.(c'est vers cela que j'aimerais bien t"amener )
Maintenant bien sur et comme dab,si tu le veux bien,
On va voir, une autre facette de l'utilisation d'un timer qui est encore et toujours un compteur Temps.Mais avant on va régler le problème de ta platine, avec ses 4 digits et pousser le programme sur le comptage des unités,dizaines de secondes et unités dizaines de minutes, facile tu as la trame seconde.Le problème, on va vite être confronté au manque de sortie donc de ports.La solution le multiplexage
c'est quoi, je passe sur la rétine de l’œil etc etc,
Je prend les 2 digits Secondes pour 4 ,le principe est le même.il faut :
allumer digit unite seconde ,envoyer la donnée unité seconde, éteindre digit unité seconde ,allumer dizaine digit seconde, envoyer la donnée dizaine seconde, éteindre dizaine digit seconde et recommencer,recommencer avec et cela va te faire plaisir une autre façon de faire des tempos
Alors déjà un PORT va faire la sélection des digits, c'est lui qui allume et éteint et un PORT qui commande les 7 segments de tes afficheurs.
A toi de me proposer le code pour faire fonctionner ta platine.
A+
PS il serai bien de changer de sujet on est plus sur debug, mais plutôt compteur décompteur sur 7 segments et ouvrir un nouveau fil.Sinon ce qui vont nous lire, vont être perdu
Pour le timer une autre fois
JMarc a écrit :Mais si je comprend bien pour l'instant ton prog n'a pas les tempo en fonction
heu.... je ne comprend pas ce que tu appels TEMPO, car avec le timer1, nous incrémentons bien notre compteur seconde et cela tout, les secondes donc une tempo de 1S. C'est un compteur temps. Ce que tu as ici est la structure, d'un chronomètre d'un compteur décompteur, tient pour faire cuire des œufs par exemple.(c'est vers cela que j'aimerais bien t"amener )
Maintenant bien sur et comme dab,si tu le veux bien,
On va voir, une autre facette de l'utilisation d'un timer qui est encore et toujours un compteur Temps.Mais avant on va régler le problème de ta platine, avec ses 4 digits et pousser le programme sur le comptage des unités,dizaines de secondes et unités dizaines de minutes, facile tu as la trame seconde.Le problème, on va vite être confronté au manque de sortie donc de ports.La solution le multiplexage
c'est quoi, je passe sur la rétine de l’œil etc etc,
Je prend les 2 digits Secondes pour 4 ,le principe est le même.il faut :
allumer digit unite seconde ,envoyer la donnée unité seconde, éteindre digit unité seconde ,allumer dizaine digit seconde, envoyer la donnée dizaine seconde, éteindre dizaine digit seconde et recommencer,recommencer avec et cela va te faire plaisir une autre façon de faire des tempos
Alors déjà un PORT va faire la sélection des digits, c'est lui qui allume et éteint et un PORT qui commande les 7 segments de tes afficheurs.
A toi de me proposer le code pour faire fonctionner ta platine.
A+
PS il serai bien de changer de sujet on est plus sur debug, mais plutôt compteur décompteur sur 7 segments et ouvrir un nouveau fil.Sinon ce qui vont nous lire, vont être perdu
debut avec le debuguer
Bonjour,
Les tempo, j'avais vu que tu utilisé tmr1 et non tmr0 mais j'avais l'impression en traçant pas a pas le programme que je passais pas par tmr1. Je vais continuer a observer et a me familiariser avec debug. J'ai compris pour les variable, vu qu'elle ne sont pas déclaré en globale, était dans l'ordre de leur déclaration et avec un peu de réflexion , je retrouve leur adresse et leurs valeur dans le tableau, que le registre w et noté wreg du. Coup je peu bien suivre leur valeur, si je laisse le pointeur de la souris sur un registre déclaré, le nom des bits apparais, plus besoin de rechercher dans le data sheet.
Tu as entièrement raison, je vais créé un nouveau post mais après réflexion sur le multiplexage, car ce sujet me convient parfaitement.
Jean-Marc, le cerveau en surchauffe
Les tempo, j'avais vu que tu utilisé tmr1 et non tmr0 mais j'avais l'impression en traçant pas a pas le programme que je passais pas par tmr1. Je vais continuer a observer et a me familiariser avec debug. J'ai compris pour les variable, vu qu'elle ne sont pas déclaré en globale, était dans l'ordre de leur déclaration et avec un peu de réflexion , je retrouve leur adresse et leurs valeur dans le tableau, que le registre w et noté wreg du. Coup je peu bien suivre leur valeur, si je laisse le pointeur de la souris sur un registre déclaré, le nom des bits apparais, plus besoin de rechercher dans le data sheet.
Tu as entièrement raison, je vais créé un nouveau post mais après réflexion sur le multiplexage, car ce sujet me convient parfaitement.
Jean-Marc, le cerveau en surchauffe
debut avec le debuguer
debut avec le debuguer
Bonjour
Perso, je fais comme cela: je vire touts les points d'arrets .Place un point d’arrêt sur 1er ligne de int, puis un reset debug bouton bleu il faut aussi bien configurer le debugger notamment la Fcyc pour cela tout en image
menu deroulant defaut->prendre customize
puis
Dans instruction Frequency mettre ici 5 qui correspond a une fréquence quartz de 20MHz (20/4=5) car dans mon assignation, j'ai un Fosc de 20MHz qui aussi correspond à la config de mes fuses "_FOSC_HS",tout ce tient. à la configuration pour ta platine d'essai, que je ne connais pas.
et touts les calculs pour le timer 1 se font pour une Fosc de 20MHz.
Calcul si tu veux bien que je reprendrais un peu plus tard ainsi que le calcul de TEMPO.
Je pense que je vais trop vite, on va ralentir.On va laisser le multiplexage, toujours si tu le veux bien. Le problème, c'est qu'il y a une somme incroyable à voir sous simulateur( debug )et que l'on peut, les voir que sur des cas bien précis, comme ici, qui éventuellement peut, déboucher, sur un autre sujet par exemple combien de temps met ma tempo, cela peut ce faire par calcul, il y a un outil, pour cela dans le simulateur,c'est plus rapide et précis.Pas pour le moment plus tard
A+
PS dit moi ou en es-tu, tu as fini d'analyser le code ????
JMarc a écrit :Bonjour,
Les tempo, j'avais vu que tu utilisé tmr1 et non tmr0 mais j'avais l'impression en traçant pas a pas le programme que je passais pas par tmr1.
Perso, je fais comme cela: je vire touts les points d'arrets .Place un point d’arrêt sur 1er ligne de int, puis un reset debug bouton bleu il faut aussi bien configurer le debugger notamment la Fcyc pour cela tout en image
menu deroulant defaut->prendre customize
puis
Dans instruction Frequency mettre ici 5 qui correspond a une fréquence quartz de 20MHz (20/4=5) car dans mon assignation, j'ai un Fosc de 20MHz qui aussi correspond à la config de mes fuses "_FOSC_HS",tout ce tient. à la configuration pour ta platine d'essai, que je ne connais pas.
Code : Tout sélectionner
;*********************** Assignations *******************************
DRAM EQU 0x20 ;début Mémoire Ram banque0
FRAM EQU 0X7F ;fin Mémoire Ram banque0
Fosc EQU .20 ;Valeur du quartz en MHz
;********************** calcul pour une boucle de temporisation ****************
; a 2 niveaux sur un 16F boucle secondaire en 756 cycles
;*******************************************************************************
TEMPS1 EQU .2000000 ;en ns a modifier suivant besoin ici 2ms
TEMPO EQU ((TEMPS1/(.4000/Fosc))/.756)
;********************** calcul pour timer1 *************************************
DIVISEUR1 equ .8 ;ici 8 du TMR
TEMPS EQU .100000 ;Valeur en µs a modifier suivant besoin
TIMER1 EQU .65535-((Fosc*TEMPS)/(.4*DIVISEUR1)-2);les-2 pour temps chargement timer1
TIMER1L EQU LOW TIMER1 ;valeur
TIMER1H EQU HIGH TIMER1 ;pour 100 ms qu'il faudra incorporer dans le timer 1
et touts les calculs pour le timer 1 se font pour une Fosc de 20MHz.
Calcul si tu veux bien que je reprendrais un peu plus tard ainsi que le calcul de TEMPO.
Je pense que je vais trop vite, on va ralentir.On va laisser le multiplexage, toujours si tu le veux bien. Le problème, c'est qu'il y a une somme incroyable à voir sous simulateur( debug )et que l'on peut, les voir que sur des cas bien précis, comme ici, qui éventuellement peut, déboucher, sur un autre sujet par exemple combien de temps met ma tempo, cela peut ce faire par calcul, il y a un outil, pour cela dans le simulateur,c'est plus rapide et précis.Pas pour le moment plus tard
A+
PS dit moi ou en es-tu, tu as fini d'analyser le code ????
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
debut avec le debuguer
Bonjour Maï
Je bloque dans la boucle BouP. J'ai chargé le pic et le comptage fonctionne par sacade. Pour l'instant j'ai un quartz de 4 mHertz mais j'aurais pensé que le prog aurai fonctionné 4 fois moins vite. puis avec debug je me suis appercu que la variable Temp, une fois a 0x0A rien ne la remettais a zéro, du coup la boucle BouP ne servait a plus rien. J'ai rajouté
pour la remettre a Zéro apres la sorti de l'interruption et la sa fonctionne avec un seul chiffre. ai-je bien fais ?
J'ouvre l'autre post pour la suite
Je bloque dans la boucle BouP. J'ai chargé le pic et le comptage fonctionne par sacade. Pour l'instant j'ai un quartz de 4 mHertz mais j'aurais pensé que le prog aurai fonctionné 4 fois moins vite. puis avec debug je me suis appercu que la variable Temp, une fois a 0x0A rien ne la remettais a zéro, du coup la boucle BouP ne servait a plus rien. J'ai rajouté
Code : Tout sélectionner
BSF T1CON,TMR1ON ;arrêt TMR1 bit a 1
;********************** Boucle principale *************************************
AFFI
clrf Temp ; j'ai rajouté l'effacement de Temp
pour la remettre a Zéro apres la sorti de l'interruption et la sa fonctionne avec un seul chiffre. ai-je bien fais ?
J'ouvre l'autre post pour la suite
Retourner vers « Langage ASM »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 73 invités