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
compteur décompteur sur 7 segments
maï a écrit :PS heu Index n'est pas la pour faire beau, c'est une structure de bits avec:
bit 7 ->décomptage ou programmation
bit6 -> gestion alarme
bit 0:3 -> sélection digit
cette sélection il va falloir bien l'utiliser dans le module affichage pour faire clignoter l'afficheur sélectionné. encore 5% et le mode programmation est terminé allez JMarc.....
AH oui mon code démarre a Val0 car avant il y a la gestion de BP validation sur BP appui LONG. Donc la c'est la sortie après l'anti rebond
Bonsoir,
Le bit 5 est il utilisé ?
Pour le carry ok je change
Pour la sortie, je fais mes essais, je pense avoir compris
Je rajoute le test alarme
compteur décompteur sur 7 segments
maï a écrit :JMarc pourquoi cette FinTbpVal Ici bien plus court, et de plus nécessaire (fin de décomptage on va passer par la, en cas d’arrêt de décomptage on va passer par la )
Et voila
Code : Tout sélectionner
;*******************************************************************************
Tbpval
BTFSS BP_Val ;BP_val appuyé? RB1
GOTO Tbpval ;NON on reboucle sur Principale
CALL Temp800µs ;petite tempo antirebond
BCF STATUS,C
rlf Index,f ; rotation par la gauche
btfsc Index,4 ; test si > que ComptMd
goto Init_Va ; oui alors traitement
incf FSR,f ; non alors variable suivante
bsf Index,7 ; garder la main en reglage
goto BouP
;*******************************************************************************
Decom NOP
Et pour la gestion de l'appui long de bpval, j'ai pensé a ceci
Code : Tout sélectionner
;*******************************************************************************
Tbpval
BTFSC BP_Val ;BP_val appuyé? RB1
GOTO Tbpvalsuite ;NON on reboucle sur Principale
CALL Temp800µs ;petite tempo antirebond
btfsc BP_Val
goto Tbpvalsuite
call Temp800µs
btfsc BP_Val
goto Tbpvalsuite
movlw b'10000000' ; sélectionner bit à inverser
xorwf Index , f ; inverser bit7
goto Decom
Tbpvalsuite
BCF STATUS,C
rlf Index,f ; rotation par la gauche
btfsc Index,4 ; test si > que ComptMd
goto Init_Va ; oui alors traitement
incf FSR,f ; non alors variable suivante
bsf Index,7 ; garder la main en reglage
goto BouP
;*******************************************************************************
Decom NOP
compteur décompteur sur 7 segments
Code : Tout sélectionner
BTFSC BP_Val ;BP_val appuyé? RB1
GOTO Tbpvalsuite ;NON on reboucle sur Principale
je pense qu'il faut aller plutot à BouP
Code : Tout sélectionner
CALL Temp800µs ;petite tempo antirebond
btfsc BP_Val
goto Tbpvalsuite
La pas de problème c'est bon
Code : Tout sélectionner
call Temp800µs
btfsc BP_Val
goto Tbpvalsuite
movlw b'10000000' ; sélectionner bit à inverser
xorwf Index , f ; inverser bit7
goto Decom
Mais ça ce n'est pas un maintient prolongé du bouton validation c'est déjà au mini 300 400ms
il faut si tu relâches le BP avant la fin de tempo aller a Tbpvalsuite
il serait bien de lancer le décomptage sur relâche du BP val car si je me trompe pas il est appuie
Pourquoi cette inversion du bit 7 ??? puisque a la fin du décomptage tu vas aller a Init_Va
il te manque aussi si en décomptage et maintien long alors arrêt décomptage et allez à
Code : Tout sélectionner
Raz_Var
CLRF ComptSu ;
CLRF ComptSd ;
CLRF ComptMu ;raz des variables Temps
CLRF ComptMd ;
A+
compteur décompteur sur 7 segments
compteur décompteur sur 7 segments
Bonsoir
bon, mon idée sur l’appui long n’était pas bonne et grâce a Maï j'ai compris, merci Maï
Voici les morceaux de programme regroupé, je ne trouve toujours pas le problème du décomptage en trop mais ça va venir
bon, mon idée sur l’appui long n’était pas bonne et grâce a Maï j'ai compris, merci Maï
Voici les morceaux de programme regroupé, je ne trouve toujours pas le problème du décomptage en trop mais ça va venir
Code : Tout sélectionner
;********************************************************************
; descriptif du projet:
;Decompteur programmable, sur 4 digits 7 segemnts,
;2 BP un plus variables,un validation deplacement et demarrage decompteur.
;
;;********************************************************************
;
; Auteur :JMarc maï
; Version :3.0
; Date :2016
;
;*******************************************************************************
; Note:PIC 16F877a par exemple
;
;*******************************************************************************
ERRORLEVEL-302
list p=16f877 ;liste directive du 16F877
#include "p16f877.inc"
;********************** chargement des Macros **********************************
;***************************** Configuation des fuses **************************
;
; CONFIG
; __config 0x3D3A
;__CONFIG _FOSC_HS & _WDTE_OFF & _PWRTE_OFF & _CP_OFF & _BOREN_OFF & _LVP_OFF & _CPD_OFF & _WRT_OFF
;
__CONFIG _CP_OFF & _DEBUG_OFF & _WRT_ENABLE_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _PWRTE_ON & _WDT_OFF & _HS_OSC
;_CP_OFF Pas de protection
;_DEBUG_OFF RB6 et RB7 en utilisation normale
;_WRT_ENABLE_OFF Le programme ne peut pas écrire dans la flash
;_CPD_OFF Mémoire EEprom déprotégée
;_LVP_OFF RB3 en utilisation normale
; _BODEN_OFF Reset tension hors service
;_PWRTE_ON Démarrage temporisé
;_WDT_OFF Watchdog hors service
;_HS_OSC Oscillateur haute vitesse (4Mhz<F<20Mhz)
;
;*********************** déclaration des variables *****************************
;Toutes ces variables sont globales pour le fichier source,MEM MEM_us MEM1
;MEM1_us MEM2 pour l''ensemble du projet.
;
;*******************************************************************************
GLOBAL MEM,MEM1 ;variables utilisables dans tout le projet
GLOBAL MEM_us,MEM1_us ; pour macro delay
GLOBAL MEM2
GLOBAL cmpt1,cmpt2
Group_gobal udata 0x20
MEM res 1 ;MEM :MEM2 sont necessaires
MEM_us res 1
MEM1 res 1 ;pour les macros delay
MEM1_us res 1
MEM2 res 1 ;
cmpt1 res 1
cmpt2 res 1
Group_Local udata 0x30
ComptSu res 1 ;comteur seconde
ComptSd res 1
ComptMu res 1 ;compteur minute
ComptMd res 1
Index res 1 ;lors programmation digit concerné
Temp res 1 ;compteur temps
Temp_Val res 1 ;compteur temps touche val
Sauv res 2 ;pour sauvegarde registres lors INT
;*********************** Definition des Externes *******************************
;
;*********************** Déclarations des définitions **************************
#DEFINE _XTAL_FREQ .4000000 ;ici FOSC =4MHz
#DEFINE BP_Plus PORTB,0
#DEFINE BP_Val PORTB,1
;*********************** Assignations ou constantes ****************************
DRAM EQU 0x20 ;début Mémoire Ram banque0
;*********************** MACROS ************************************************
Banque0 MACRO
BCF STATUS,RP0 ;Acces bank0
BCF STATUS,RP1
ENDM
Banque1 MACRO
BSF STATUS,RP0 ;Acces bank1
BCF STATUS,RP1
ENDM
Banque2 MACRO
BCF STATUS,RP0 ;acces bank2
BSF STATUS,RP1
ENDM
Banque3 MACRO
BSF STATUS,RP0 ;Acces bank4
BSF STATUS,RP1
ENDM
;*********************** Affichage sur 4 digits ********************************
Aff7 MACRO
BSF PORTA,0 ;allumage digit0
MOVFW ComptSu ;charge la donnée
CALL LedTable ;recherche donnée
MOVWF PORTC ;envoi donnée
Tem2ms ;petite tempo 2ms
BCF PORTA,0 ;arrêt digit0
BSF PORTA,1
MOVFW ComptSd
CALL LedTable
MOVWF PORTC
Tem2ms ;idem digit1
BCF PORTA,1
BSF PORTA,2
MOVFW ComptMu
CALL LedTable
MOVWF PORTC
Tem2ms ;idem digit2
BCF PORTA,2
BSF PORTA,3
MOVFW ComptMd
CALL LedTable
MOVWF PORTC ;idem digit3
Tem2ms
BCF PORTA,3
ENDM
;*******************************************************************************
Tem2ms MACRO
LOCAL T1
MOVLW 0x3
MOVWF MEM1
MOVLW 0x98
MOVWF MEM
T1 DECFSZ MEM, F ; source issue de la macro delay_ms .2
GOTO T1
DECFSZ MEM1, F
GOTO T1
ENDM
;*******************************************************************************
;*********************** TOUT COMMENCE ICI *************************************
org 0X00 ;au rest le pointeur instruction est ICI
GOTO debut ;saut sur le label debut
org 0X04
MOVWF Sauv ;sauve W
SWAPF STATUS,W ;
MOVWF Sauv+1 ;sauve status
BTFSS PIR1,TMR1IF ;test flag si TIMER1
GOTO Int0 ;NON
MOVLW 0x3C ; int toute le 100ms
MOVWF TMR1H
MOVLW 0xB3
movwf TMR1L
BCF PIR1,TMR1IF ;RAZ du drapeau de TMR1
INCF Temp,F ; à 10 cela fera 1s
INCF Temp_Val,F ;tempo BP Val
GOTO IntS
Int0 BTFSS INTCON,T0IF ;Test flag si TIMER0
GOTO IntS ;on sort pour gerer l'affichage
BCF INTCON,T0IE ;ARRET INT TMR0
Aff7
MOVLW 0XA
MOVWF TMR0 ; charge Timer0 pour 1ms
BCF INTCON,T0IF ;RAZ Flag TIMER0
BSF INTCON,T0IE ;mise en service INT TMR0
IntS SWAPF Sauv+1,0
MOVWF STATUS ;restaure status
SWAPF Sauv, 1
SWAPF Sauv, 0 ;restaure W
RETFIE
;*********************** Alumage segments afficheur ****************************
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
;**********ici c'est votre programme principale ou main ************************
debut
;*********************** 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
;*********************** Initialisation des ports ******************************
CLRF PORTA
CLRF PORTB ;efface les sorties des ports
CLRF PORTC
Banque1 ;accés bank1
CLRF TRISA ;RA:RA5 en sortie
MOVLW B'00000111' ;RB0:RB1 en entrées
MOVWF TRISB
CLRF TRISC ;RC0:RC7 en sortie
MOVLW B'00000110' ;PORTA digitale
MOVWF ADCON1
;*********************** validation des INT ************************************
MOVLW (1<<GIE)|(1<<PEIE)|(1<<T0IE)|(0<<INTE)|(0<<RBIE)|(0<<T0IF)|(0<<INTF)|(0<<RBIF)
MOVWF INTCON ;Initialisation des INT
BSF PIE1,TMR1IE ;valide int TMR1
;******************* Initialisation des timers/compteurs ***********************
; ici on va travailler avec le TIMER1 et TIMER0
;*******************************************************************************
MOVLW 0x01
MOVWF OPTION_REG
Banque0
MOVLW 0xA
MOVWF TMR0
;**********************
BSF T1CON, 0x4
BCF T1CON, 0x5
MOVLW 0x3C
MOVWF TMR1H
MOVLW 0xB3
movwf TMR1L
BSF T1CON,TMR1ON ; mise en service Timer1
;********************** fixation des variables *********************************
Raz_Var CLRF ComptSu ;
CLRF ComptSd ;
CLRF ComptMu ;raz des variables Temps
CLRF ComptMd ;
Init_Va MOVLW ComptSu ;intialise ou re les variables
MOVWF FSR ;charge le pointeur de adresse unite S
MOVLW B'10000001' ;B0:B3 index sur 1er digit
MOVWF Index ;B7: mode programmation
;********************** Boucle principale **************************************
BouP BTFSC BP_Val ;BP val appuiyé ?
GOTO Plus ;NON voir le BP plus
CLRF Temp_Val
CALL Temp800µs ;OUI petite tempo anti rebond
Val1 BTFSC BP_Val ;malgres la tempo
GOTO Val0 ;le BP a etait relaché donc on sort
BTFSS Temp_Val,2 ;appuie long?
GOTO Val1 ;on reboucle
BTFSS Index,7 ;fin tempo mode programmation?
GOTO Raz_Var ;oui arret decomptage on boucle sur RAZ
BCF Index,7 ;NON on passe en decomptage
GOTO Start_D ;on lancement decomptage
;**********************
Val0 BTFSS Index,7 ;mode Decomptage?
GOTO Decom ;oui
BCF STATUS,C
RLF Index,F ;decalage index digit vers la GAUCHE
BTFSC Index,4 ;Index hors butée?
GOTO Init_Va ;oui on reinitialise les variables
BSF Index,7 ;repositionne le bit programmation
INCF FSR,F ;NON pointeur variable +1
GOTO BouP ;boucle principale
;*********************** Bouton plus *******************************************
Plus BTFSS Index,7 ;mode decomptage ?
GOTO Decom ;oui
BTFSC BP_Plus ;BP_Plus appuyé?
GOTO BouP ;NON on reboucle sur Principale
CALL Temp800µs ;petite tempo antirebond
Plus0 BTFSS BP_Plus ;BP_Plus relaché
GOTO Plus0 ;NON on boucle
INCF INDF,F ;adresse pointé +1
MOVLW 0X0A ;test butée 9
BTFSS Index,0
BTFSC Index,2 ;on test les digits max 9 ou 5
GOTO Plus1
MOVLW 0X6 ;test butée 5
Plus1 SUBWF INDF,W
BTFSC STATUS,C
CLRF INDF ;si butée raz adresse pointé
GOTO BouP ;on Reboucle sur boucle principale
;**************************************************************
;*******************************************************************************
Tbpval
clrf Temp_Val ; raz pour test appuis long
CALL Temp800µs ;petite tempo antirebond
Tbpvalboucle
BTFSC BP_Val ;BP_val relaché ? RB1
GOTO Tbpvalsuite ;OUI alors suite
btfss Temp_Val,2 ; test si 4 x timer1
goto Tbpvalboucle ; non alors j'attend
goto appuislong ; oui traitement de l'appuis long
Tbpvalrelache
btfsc BP_Val
goto Tbpvalrelache
bsf Index,7
goto Decom
Tbpvalsuite
BCF STATUS,C
rlf Index,f ; rotation par la gauche
btfsc Index,4 ; test si > que ComptMd
goto Init_Va ; oui alors traitement
incf FSR,f ; non alors variable suivante
bsf Index,7 ; garder la main en reglage
goto BouP
appuislong
btfss BP_Val ; bp relaché ?
goto appuislong ; non alors attente
; mon prog si appuis long 400 ms sur bpval
goto BouP
;*******************************************************************************
Start_D BTFSS BP_Val
GOTO Start_D ;attend que BP_Val soit relaché
CLRF Temp ;RAZ du compteur temps, decomptage parti
;*********************** Lance decomptage **************************************
Decom
MOVLW 0X0A ;on test si 10fois 100mS
SUBWF Temp,W
BTFSS STATUS,Z
GOTO BouP
CLRF Temp ;RAZ compteur temp
decf ComptSu,f
movfw ComptSu ; addition puis test si 0
iorwf ComptSd,w
iorwf ComptMu,w
iorwf ComptMd,w
btfsc STATUS,Z
goto Alarm
;******************
btfss ComptSu,7
goto BouP
movlw 0X09
movwf ComptSu
decf ComptSd,F
btfss ComptSd,7
goto BouP
movlw 0X05
movwf ComptSd
decf ComptMu,F
btfss ComptMu,7
goto BouP
movlw 0x09
movwf ComptMu
decf ComptMd
goto BouP
BouP0
; bcf T1CON,TMR1ON ; arret timer
bcf PORTB,3 ; extextion de la led sur portB
bsf PORTB,4 ; sonnerie sur portb en fonction
goto BouP
Alarm
NOP
bsf Index,7
GOTO BouP
;*********************** ici c'est des SPG *************************************
;ici spg car plusieurs fois utilisés dans le source sinon macro
;********************** Tempo de 800µs *****************************************
Temp800µs
MOVLW 0x2
MOVWF MEM_us
MOVLW 0x9
MOVWF MEM1_us
T0 DECFSZ MEM1_us, F ; source issu de la macro delay_us .800
GOTO T0
DECFSZ MEM_us, F
GOTO T0
RETURN
END
compteur décompteur sur 7 segments
bonjour
le problème du décomptage est:
Lorsque il est a zero il met encore 1 seconde de plus pour arrêter le decomptage
et de plus il teste e permanence si c'est zero
regarde ici AMHA c'est un peu mieux
A+
le problème du décomptage est:
Lorsque il est a zero il met encore 1 seconde de plus pour arrêter le decomptage
et de plus il teste e permanence si c'est zero
regarde ici AMHA c'est un peu mieux
Code : Tout sélectionner
;*******************************************************************************
Start_D BTFSS BP_Val
GOTO Start_D ;attend que BP_Val soit relaché
CLRF Temp ;RAZ du compteur temps, decomptage parti
;*********************** Lance decomptage **************************************
Decom MOVLW 0X0A ;on test si 10fois 100mS
SUBWF Temp,W
BTFSS STATUS,Z
GOTO BouP
CLRF Temp ;RAZ compteur temp
DECF ComptSu,f
BTFSS STATUS,Z ;c'est zero
GOTO Decom0 ;NON
MOVFW ComptSu ;OUI on effectue un OU logique
IORWF ComptSd,W
IORWF ComptMu,W ;avec les variables Temps et on
IORWf ComptMd,W ;test si zero
BTFSS STATUS,Z
GOTO BouP
;Gestion alarme
GOTO Init_Va ;oui initialise variables
;*********************** *
Decom0 BTFSS ComptSu,7 ;debordement?
GOTO BouP ;NON
MOVLW 0X09
MOVWF ComptSu ;uS= 9
;*********************** *
DECF ComptSd,F ;Sd -1
BTFSS ComptSd,7 ;debordement?
GOTO BouP ;NON
MOVLW 0X5
MOVWF ComptSd ;Sd =9
;*********************** * ici c'est notre macro
DECF ComptMu,F ;Mu-1
BTFSS ComptMu,7 ;debordement?
GOTO BouP ;NON
MOVLW 0X9
MOVWF ComptMu ;Mu =9
;*********************** *
DECF ComptMd ;Md -1
GOTO BouP
A+
compteur décompteur sur 7 segments
compteur décompteur sur 7 segments
compteur décompteur sur 7 segments
compteur décompteur sur 7 segments
Bonjour JMARC, Gérard, Jérémy, et bonjour à tous.
Il manipule du 220 volts, c'est pas trop recommandé une breadboard, si un fils se détache d'un des trous, je te laisse imaginer la suite.
JMarc à ce que je vois tu progresses, bientôt dégustation d’œuf pour tous le forum.
Pour le circuit imprimé, ça reste un problème, voir pour l'achat d'une imprimante laser N/B, qui serait dédié pour la fabrication des
PCB.
Parfois, la finition et plus dur à faire, parce que, on veut quelque chose de propre, et on n'y avait pas pensée.
JMarc fait attention à toi avec le 220 volts, prévoir une prise de terre, ainsi que des fusibles.
Sinon je te souhaite une bonne continuation.
A+
Gérard à écrit :
Pourquoi n'utilises-tu pas de plaque sans soudure pour des essais?
Il manipule du 220 volts, c'est pas trop recommandé une breadboard, si un fils se détache d'un des trous, je te laisse imaginer la suite.
JMarc à ce que je vois tu progresses, bientôt dégustation d’œuf pour tous le forum.
Pour le circuit imprimé, ça reste un problème, voir pour l'achat d'une imprimante laser N/B, qui serait dédié pour la fabrication des
PCB.
Parfois, la finition et plus dur à faire, parce que, on veut quelque chose de propre, et on n'y avait pas pensée.
JMarc fait attention à toi avec le 220 volts, prévoir une prise de terre, ainsi que des fusibles.
Sinon je te souhaite une bonne continuation.
A+
Retourner vers « Langage ASM »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 59 invités