Répondre à la discussion
Affichage des résultats 1 à 23 sur 23

interruption par RB7 avec Proteus



  1. #1
    arzew

    Smile interruption par RB7 avec Proteus


    ------

    bonsoir,

    je me bats avec l'espoir d'effectuer une interruption par RB7 (du 16F648A) avec Proteus.
    Etrangement cette interruption fonctionne avec MPLAB mais arrivé à Protéus je n'ai aucun flag RB sur le registre INTCON,0 !
    Quelqu'un a t'il une explication ?
    Je ne vois qu'un mauvais cablâge !!!!
    Je relie RB7 à la masse par une R de 50k puis j'attaque RB7 par un interrupteur relié au 5V.

    Arzew

    -----

  2. Publicité
  3. #2
    MorpheusPic

    Re : interruption par RB7 avec Proteus

    salut

    pour metre de cote tout prob de cablage test deja si tu arrive a lire un 1 ou un 0 avec le pic

    genre tu repercute l'entrée RB7 sur la sortie RB0

    tu aurais pas oublier de configurer le pic dans isis, ou de metre a 5V MCLR ?

  4. #3
    arzew

    Re : interruption par RB7 avec Proteus

    Citation Envoyé par MorpheusPic Voir le message
    salut

    pour metre de cote tout prob de cablage test deja si tu arrive a lire un 1 ou un 0 avec le pic

    genre tu repercute l'entrée RB7 sur la sortie RB0

    tu aurais pas oublier de configurer le pic dans isis, ou de metre a 5V MCLR ?
    bonjour,

    j'utilise MCLR en interne
    Configurer le Pic ds ISIS ... que veus-tu dire ?

  5. #4
    MorpheusPic

    Re : interruption par RB7 avec Proteus

    ben quand tu fait click droit sur le pic, verifi que tu lui a bien donner une vitesse dhorloge et que la case l'exclure de la simulation soit pas cochée

    tu peut pas poster ton programme ?

  6. #5
    arzew

    Re : interruption par RB7 avec Proteus

    bonsoir,

    après quelques recherches, lors d'interruptions avec les PORTB,4,5,6,7 il faut lire le PORTB pour effacer le flag RBIF .
    Tout est bon ... apparement !
    Ma seule inquiétude restante (j'en avais 2) c'est qu'en simulant des changements d'état sur RB7 (entrée avec interruption) avec MPLAB et via le stimulus , il arrive un moment où l'entrée RB7 ne réagit plus au changement d'état (plus d'interruption !), l'autorisation de
    l'interruption RBIE est pourtant à 1.
    Quelqu'un a t'il une idée ????

    Arzew

  7. A voir en vidéo sur Futura
  8. #6
    MorpheusPic

    Re : interruption par RB7 avec Proteus

    peut etre un probleme dans ta sauvegarde et restauration de registres.

    pour le flag RBIF il faut:

    1 --> lire le portb
    2 --> effacer le flag

    lire le portb efface pas le flag.

    poste nous ton code si tu veut qu'on puisse voir ...

  9. Publicité
  10. #7
    biron

    Re : interruption par RB7 avec Proteus

    C'est un bug du logiciel je pense car j'ai eu le meme probleme lors d'une simulation.En réalisant mon montage sur ma platine d'expérimentation il fonctionait correctement .C'est comme si proteus entrait dans la routine d'interruption lorsqu'on relachait le bouton or les test sont effectues sachant que l'interrupteur est actionne

  11. #8
    omar.STE

    Re : interruption par RB7 avec Proteus

    salut
    quel langage vous utilisez : Assembleur ou langage C ???
    l'aide n'a aucun prix

  12. #9
    arzew

    Re : interruption par RB7 avec Proteus

    Citation Envoyé par MorpheusPic Voir le message
    peut etre un probleme dans ta sauvegarde et restauration de registres.

    pour le flag RBIF il faut:

    1 --> lire le portb
    2 --> effacer le flag

    lire le portb efface pas le flag.

    poste nous ton code si tu veut qu'on puisse voir ...
    bonjour,

    je me suis mal exprimé ... je voulais dire pour pouvoir effacer RBIF il faut d'abord lire le PORTB , c'est bien ça

  13. #10
    arzew

    Re : interruption par RB7 avec Proteus

    par contre quelqu'un sait-il manipuler le Pin/Register Actions des onglets "Debugger" , "stimulus" ?
    Apparement les signaux la simulation des signaux d'entrées par RB7 se fait deux fois sur trois.
    Je n'ai pas encore trouver le tuto qui va bien !

    Arzew

  14. #11
    arzew

    Re : interruption par RB7 avec Proteus

    je viens de réduire au max mon programme pour plus de facilité de compréhension, mais avec cette "bizarrerie".
    Dans le stimulus "copie(2).sbs" sont simulées les entrées RB0 et RB7 à différentes valeurs de temps .
    J'ai remarqué que la simulation de ces entrées ne fonctionne plus à partir de 27secondes (aucune changement d'état dans le registre PORTB du SFR) mais par contre j'ai l'interruption ....... qui ne correspond à rien car RB0 et RB7 restent au zéro logique !!!!
    Normal ou pas ?

    Je joins une copie du programme ainsi que le stimulus à joindre dans MPLAB IDE v7.50 que j'utilise.

    Arzew
    Fichiers attachés Fichiers attachés

  15. #12
    MorpheusPic

    Re : interruption par RB7 avec Proteus

    salut

    essaie deja de remplacer

    effacer_flag_RB macro
    movf PORTB,1 ;avant d'effacer le flag RBIF il faut lire
    bcf INTCON,0 ;le PORTB
    endm

    par

    effacer_flag_RB macro
    Bank0 ;selectionner banque 0
    btfsc PORTB,1 ;avant d'effacer le flag RBIF il faut lire
    nop
    bcf INTCON,0 ;le PORTB
    endm
    je pense que sa peut poser des probleme de reecrire le port avec sa valeur, et aussi que tu na pas selectionner la banque en premier

    le but est de lire la sortie d'un decodeur dtmf ?

  16. Publicité
  17. #13
    arzew

    Re : interruption par RB7 avec Proteus

    Citation Envoyé par MorpheusPic Voir le message
    salut

    essaie deja de remplacer




    par



    je pense que sa peut poser des probleme de reecrire le port avec sa valeur, et aussi que tu na pas selectionner la banque en premier

    le but est de lire la sortie d'un decodeur dtmf ?

    ....... enfin un moment de libre !
    j'ai remplacé, mais si c'était la réponse à mon poste de 11h32, les interruptions au-delà de 27secondes ne se fonctionnent encore pas !

    c'est exacte, je veux lire les 4 sorties d'un MT8870 (décod. DTMF)
    et pour cela je me sers de la sortie StD (pin15) du MT8870 pour exécuter une interr sur RB7 qui m'enverra sur la routine de lecture de RA0,1,2,3.

    Arzew

  18. #14
    MorpheusPic

    Re : interruption par RB7 avec Proteus

    si tu peut metre ta pin RB0 pour StD sa simplifi un peut le code ...
    par contre oubli pas de selectionner le flanc de detection de RB0,supprimer les 4 derniers bits de Num_touche.

    c'est censé marcher



    Code:
    ;**********************************************************************
    ;                     ROUTINE INTERRUPTION                            *
    ;**********************************************************************
    
    			;sauvegarder registres	
    			;---------------------
    	org 	0x004		; adresse d'interruption
    	movwf   w_temp  	; sauver registre W
    	swapf	STATUS,w	; swap status avec résultat dans w
    	movwf	status_temp	; sauver status swappé
    	
    	;+++++++++++++++++++++++++++++++++++++++++++
    					
    					
    			btfss	INTCON,4	;autorisation interr RB0 ?
    			goto	fin_interr
    
    			btfsc	INTCON,1	;état flag RB0 ?
    			call	INT_RB0
    			
    
    
    
    			;restaurer registres
    			;-------------------
    
    fin_interr		swapf	status_temp,w	
    			movwf	STATUS	 
    			swapf	w_temp,f	           	
    			swapf	w_temp,w
    			retfie  
    
    
    ;**********************************************************************
    ;                     ROUTINE INTERRUPTION RB0                        *
    ;**********************************************************************
    INT_RB0		
    	                bank0
    			effacer_flag_RB0
    			movf	porta,w
    			movwf	Num_touche    <-- variable avec le numero de la touche
    			return

  19. #15
    arzew

    Re : interruption par RB7 avec Proteus

    salut,

    Oui en quelque sorte faire 4 rotations à droite de la lecture du PORTA .
    C'était une idée ... mais j'utilise déjà RB0 pour la détection de la sonnerie du téléphone.
    Biensûr je pourrai me servir de RB0 pour faire les 2 choses à la fois ou du moins l'une après l'autre c'est à dire définir un ordre de priorité ... détecter les valeurs de sortie du MT8870 si et seulement si la détection de la sonnerie a été exécutée .
    Je pensais séparer les 2 actions par 2 entrées différentes .

    Arzew

  20. #16
    arzew

    Re : interruption par RB7 avec Proteus

    Je pense à une chose ... de toute façon même avec ce procédé je ne pourrai pas simuler mon programme avec le stimulus car même l'interruption RB0 ne fonctionne plus au-delà de 27 secondes !!!
    Ca doit marcher c'est pas possible que la simulation se bloque à 27secondes !

  21. #17
    MorpheusPic

    Re : interruption par RB7 avec Proteus

    je doute que le probleme vienne du simulateur ....

    quand on fonctionne avec des interruption on se retrouve avec un prog asynchrone ou les bug peuvent arriver une foit toutes les heures par ex ...

  22. #18
    MorpheusPic

    Re : interruption par RB7 avec Proteus

    voila jai mofifier pour separer RB0 et RB7 esperon que sa marche ...

    Code:
    ;**********************************************************************
    ;                      DEMARRAGE SUR RESET                            *
    ;**********************************************************************
    
    			org 	0x000 		; Adresse de départ après reset
     	    	goto	init		; Adresse 0: initialiser
    
    ;**********************************************************************
    ;                     ROUTINE INTERRUPTION                            *
    ;**********************************************************************
    
    			;sauvegarder registres	
    			;---------------------
    	org 	0x004		; adresse d'interruption
    	movwf   w_temp  	; sauver registre W
    	swapf	STATUS,w	; swap status avec résultat dans w
    	movwf	status_temp	; sauver status swappé
    	
    	;+++++++++++++++++++++++++++++++++++++++++++
    					
    					
    			btfss	INTCON,4	;autorisation interr RB0 ?
    			goto	suite_interr
    
    			btfsc	INTCON,1	;état flag RB0 ?
    			call	INT_RB0
    suite_interr			
    
    			btfss	INTCON,3	;autorisation interr RB7 ?
    			goto	fin_interr
    
    			btfss	INTCON,0	;état flag RB7 ?
    			goto	fin_interr
    
    			btfsc	PORTB,7				
    			call	INT_RB7		;si portb,7 = 1
                            bcf	INTCON,0	        ;effacer flag RB7
    			goto	fin_interr
    
    
    
    
    
    			;restaurer registres
    			;-------------------
    
    fin_interr		swapf	status_temp,w	
    			movwf	STATUS	 
    			swapf	w_temp,f	           	
    			swapf	w_temp,w
    			retfie  
    
    
    ;**********************************************************************
    ;                     ROUTINE INTERRUPTION RB0                        *
    ;**********************************************************************
    INT_RB0			
    
    			ici ton code pour int_rb0
    			
    
    			effacer_flag_RB
    			return
    
    
    ;**********************************************************************
    ;                     ROUTINE INTERRUPTION RB7                        *
    ;**********************************************************************
    INT_RB7			
    			bank0
    			movf	porta,w
    			movwf	Num_touche    <-- variable avec le numero de la touche
    			
    			return
    Dernière modification par MorpheusPic ; 05/02/2011 à 12h08.

  23. Publicité
  24. #19
    arzew

    Re : interruption par RB7 avec Proteus

    j'ai entrepris ta solution ... hélas le stimulus réagit toujours de la même façon
    Rien n'y fait , je ne pense pas que notre programme en est à l'origine.
    Je pensais que cette version de MPLAB était mal installée ... je l'ai réinstallé mais aucun changement.
    Je suis même passé à la version 8.40 ... désolation complète

    Encore merci pour ton intervention, je vois par ton message d'hier que tu ne lâches pas ... j'ai connu ça aussi il y a un certain temps !
    Les soirées et nuits courtes que j'ai passé , c'est ça l'auto-ditacte .

    nota: par contre je peux gérer RB0 et RB7 au-delà de 27 secondes par l'onglet "Asynch" de stimulus, étonnant !


    Arzew

  25. #20
    MorpheusPic

    Re : interruption par RB7 avec Proteus

    bizare ...

    tu est sur que le stimulus s’arrête pas a 27 secondes

    je connais pas trop le stimulus mais ptetre que tu a definit quelque par quil ne dure que 27 secondes ...

    oui moi aussi jais apris de moi même grace aux cours de bigonoff, que je remercie par la même occasion

  26. #21
    arzew

    Re : interruption par RB7 avec Proteus

    Citation Envoyé par MorpheusPic Voir le message
    bizare ...

    tu est sur que le stimulus s’arrête pas a 27 secondes

    je connais pas trop le stimulus mais ptetre que tu a definit quelque par quil ne dure que 27 secondes ...

    oui moi aussi jais apris de moi même grace aux cours de bigonoff, que je remercie par la même occasion

    salut ,

    le peu d'information que j'ai pu récolter concernant la simulation me donne l'impression qu'il n'y a pas de réglages particuliers à entrevoire.
    Si tu veux la simulation continue bien au-delà des 27 secondes mais plus aucune variation se fait sur RB7 et RB0 qui devraient changer d'état à des temps précis !
    Par exemple RB7 reste à l'état logique 1 alors que je l'ai programmé pour qu'il soit au zéro logique à 27200 micro secondes !

  27. #22
    arzew

    Re : interruption par RB7 avec Proteus

    bonjour,

    je suis passé à la version 8.40 de MPLAB.
    Apparement le stimilus "Pin / Register Actions" fonctionne correctement

    Arzew

  28. #23
    MorpheusPic

    Re : interruption par RB7 avec Proteus

    ok content pour toi

    a+

Sur le même thème :

Discussions similaires

  1. Interruption avec PIC18F45K20
    Par *Baby* dans le forum Électronique
    Réponses: 6
    Dernier message: 16/06/2010, 22h09
  2. Interruption avec 16f84
    Par plastik dans le forum Électronique
    Réponses: 36
    Dernier message: 10/06/2009, 15h58
  3. interruption avec timer1
    Par pitch2158 dans le forum Électronique
    Réponses: 26
    Dernier message: 05/04/2009, 16h14
  4. utilisation de RB7 RB6 en ICD2
    Par patwice dans le forum Électronique
    Réponses: 3
    Dernier message: 26/03/2008, 14h40
  5. Interruption Timer avec PIC16F876A
    Par black_is_beautiful dans le forum Électronique
    Réponses: 9
    Dernier message: 28/07/2007, 21h57