Prob USART en interruption avec PIC 16F628
Répondre à la discussion
Affichage des résultats 1 à 14 sur 14

Prob USART en interruption avec PIC 16F628



  1. #1
    marcel6566

    Prob USART en interruption avec PIC 16F628


    ------

    Bonjour,

    Je galère depuis plusieurs jours sur le même problème.

    PRESENTATION :
    J'ai relié 2 PIC via deux 75176 (bus de transmission différentiel) en utilisant les deux usart.
    Un pic 16F628 est en émetteur, l'autre en récepteur.
    La pattes MCLR est reliée à 5V : en intRC I/O in, il n'y a pas de quartz.
    Le signal série start, 8bits, stop arrive bien à la patte RX du PIC récepteur. L'interruption est bien reconnue comme interruption de usart.

    PROBLEME :
    Le programme principal tourne en boucle. (Led allumée)
    Envoi d'un signal serie
    Le programme passe dans le programme d'interruption MAIS ne revient pas au programme principal. (Led éteinte)
    Un second signal série regénère une interruption avec une erreur OERR. Même en corrigeant cette erreur le programme ne revient pas au programme principal. (Led éteinte)

    PROGRAMME
    Je mets le programme du recepteur simplifié (la config est la même pour usart pour le générateur) et le programme d'interruption est au plus simple.

    Merci par avance pour votre aide.


    ORG 0x0000
    goto pPrincipal
    ORG 0x0004
    goto pInter

    ;**** PROGRAMME PRINCIPAL
    pPrincipal call iPort
    call iUsart
    bcf PORTB,0 ; Met en mode reception sur le 75176
    bcf STATUS,RP0
    bsf PIE1,RCIE
    bsf INTCON,PEIE
    bsf INTCON,GIE
    boucle
    bsf PORTB,6 ; Led allumée
    call tempo
    goto boucle
    ;**** PROGRAMME D'INTERRUPTION
    pInter
    movwf W_TEMP ; sauvegarde les registres
    swapf STATUS, W
    movwf STATUS_TEMP

    bcf PORTB,6 ; Led éteinte

    swapf STATUS_TEMP, W
    movwf STATUS
    swapf W_TEMP, f
    swapf W_TEMP, W
    retfie
    ;**** INIT PORTS
    iPort bcf STATUS,RP0
    movlw 0x07
    movwf CMCON ; désactive le mode comparateur

    bsf STATUS,RP0
    movlw B'11111111'
    movwf TRISA
    movlw B'00000010'
    movwf TRISB
    bcf STATUS,RP0
    return
    ;**** INIT USART
    ; Vitesse = 9600bps, Pas de Parity, 1 Stop Bit
    iUsart bsf STATUS,RP0
    movlw 0x19 ; 0x19=9600
    movwf SPBRG
    movlw b'00100100' ; brgh = 1
    movwf TXSTA ; valide Async Transm, brgh=1
    bcf STATUS,RP0
    movlw b'10010000' ; valide Async Reception
    movwf RCSTA
    call tempo return
    ;**** TEMPO
    tempo ;non détaillée - Durée 1ms
    return
    ;+++++
    END

    -----

  2. #2
    invite6ea6d79a

    Re : Prob USART en interruption avec PIC 16F628

    Dans ta routine d'interruption je ne vois nul part où tu réinitialises ton "interrupt flag". On devrait y voir "bcf PIR1,5" Afin de pouvoir sortir de l'interruption.

    Tu m'en donneras des nouvelles

  3. #3
    marcel6566

    Re : Prob USART en interruption avec PIC 16F628

    Merci pour ta réponse, mais il n'y a pas de changement ???
    Le programme reste bloqué dans le programme d'interruption.
    La Led s'allume, et lors que je lance le signal série, la Led s'éteint définitivement.

    J'ai rajouté ta ligne de commande pour mettre le flag de PIR1,5 à 0.
    De plus j'avais fait une erreur dans le programme principal.

    ;**** PROGRAMME PRINCIPAL
    pPrincipal call iPort
    call iUsart
    bcf PORTB,0 ; Met en mode reception sur le 75176
    bsf STATUS,RP0
    bsf PIE1,RCIE
    bcf STATUS,RP0
    bsf INTCON,PEIE
    bsf INTCON,GIE
    boucle
    bsf PORTB,6 ; Led allumée
    call tempo
    goto boucle
    ;**** PROGRAMME D'INTERRUPTION
    pInter
    movwf W_TEMP ; sauvegarde les registres
    swapf STATUS, W
    movwf STATUS_TEMP

    bcf PORTB,6 ; Led éteinte

    swapf STATUS_TEMP, W
    movwf STATUS
    swapf W_TEMP, f
    swapf W_TEMP, W
    bcf PIR1,5
    retfie

  4. #4
    invitef26bdcba

    Re : Prob USART en interruption avec PIC 16F628

    Salut,

    Le bit RCIF est en lecture seule...

    Il est donc inutile de tenter de l'effacer par software, cela ne fonctionne pas.

    Pour effacer ce flag, il faut lire RCREG afin de lever le flag d'interruption, et ne pas rester éternellement dans l'interruption.

    David.

  5. A voir en vidéo sur Futura
  6. #5
    freepicbasic

    Re : Prob USART en interruption avec PIC 16F628

    Citation Envoyé par DavidDB Voir le message
    Salut,

    Le bit RCIF est en lecture seule...

    Il est donc inutile de tenter de l'effacer par software, cela ne fonctionne pas.

    Pour effacer ce flag, il faut lire RCREG afin de lever le flag d'interruption, et ne pas rester éternellement dans l'interruption.

    David.
    Et comme RCREG n'est pas lu dans l'interruption , il tourne en boucle dans l'int !
    Quant à l'osc interne pour une com série c'est pas étonnant qu'il y ai des "odd errors", il faut un quartz !
    A+, pat

  7. #6
    marcel6566

    Re : Prob USART en interruption avec PIC 16F628

    Citation Envoyé par DavidDB Voir le message
    Salut,

    Le bit RCIF est en lecture seule...

    Il est donc inutile de tenter de l'effacer par software, cela ne fonctionne pas.

    Pour effacer ce flag, il faut lire RCREG afin de lever le flag d'interruption, et ne pas rester éternellement dans l'interruption.

    David.
    SUPER CA MARCHE - MERCI BEAUCOUP

  8. #7
    marcel6566

    [RESOLU] Prob USART en interruption avec PIC 16F628

    Citation Envoyé par DavidDB Voir le message
    Salut,

    Le bit RCIF est en lecture seule...

    Il est donc inutile de tenter de l'effacer par software, cela ne fonctionne pas.

    Pour effacer ce flag, il faut lire RCREG afin de lever le flag d'interruption, et ne pas rester éternellement dans l'interruption.

    David.
    SUPER CA MARCHE - MERCI BEAUCOUP

  9. #8
    marcel6566

    Re : Prob USART en interruption avec PIC 16F628

    Pour freePicBasic
    Citation Envoyé par freepicbasic Voir le message
    Quant à l'osc interne pour une com série c'est pas étonnant qu'il y ai des "odd errors", il faut un quartz !
    Certe, malgré cela est-ce que je peux diminuer le débit pour diminuer les erreurs ?
    J'ai déja créé ma carte et placé mes composants.
    Je suis en asynchrone, 8 bits et ma trame est composées que de 4 octets.
    J'avais choisi BRGH=1 à 9600 bauds avec la valeur de 25d 19h.
    Serait-il possible de choisir 2404 bauds avec BRGH=0 et valeur 25d ou
    1202 bauds avec BRGH=0 et valeur 51d
    Je crois que la fréquence du PIC lorsqu'il n'y a pas de quartz est de 4Mhz ???

    Merci pour ton aide

  10. #9
    invite6ea6d79a

    Re : Prob USART en interruption avec PIC 16F628

    Citation Envoyé par DavidDB Voir le message
    Salut,

    Le bit RCIF est en lecture seule...

    Il est donc inutile de tenter de l'effacer par software, cela ne fonctionne pas.

    Pour effacer ce flag, il faut lire RCREG afin de lever le flag d'interruption, et ne pas rester éternellement dans l'interruption.

    David.
    RCIF n'est pas en lecture seul à en croire la datasheet:

    Interrupt flag bits get set when an interrupt
    condition occurs regardless of the state of
    its corresponding enable bit or the global
    enable bit, GIE (INTCON<7>). User
    software should ensure the appropriate
    interrupt flag bits are clear prior to enabling
    an interrupt.

    Il faut de tout évidence le remettre à 0 par software mais sera vraissemblablement remis à 1 si RCREG n'est pas lu avant de le faire.

  11. #10
    freepicbasic

    Re : Prob USART en interruption avec PIC 16F628

    Citation Envoyé par marcel6566 Voir le message
    Pour freePicBasic

    Certe, malgré cela est-ce que je peux diminuer le débit pour diminuer les erreurs ?
    Tu peux toujours essayer mais sans quartz l'oscilateur varie avec la température, donc en salle climatis" , le résultat sera constant mais en extérieur ça fonctionnera pas toujours.

    J'ai déja créé ma carte et placé mes composants.
    Je suis en asynchrone, 8 bits et ma trame est composées que de 4 octets.
    J'avais choisi BRGH=1 à 9600 bauds avec la valeur de 25d 19h.
    Serait-il possible de choisir 2404 bauds avec BRGH=0 et valeur 25d ou
    1202 bauds avec BRGH=0 et valeur 51d
    Oui

    Je crois que la fréquence du PIC lorsqu'il n'y a pas de quartz est de 4Mhz ???
    ç'est de l'a peu près et ça dépend de la température , et le 628 n'a pas d'OscCal donc on ne peut pas ajuster.
    A+, pat

  12. #11
    freepicbasic

    Re : Prob USART en interruption avec PIC 16F628

    Citation Envoyé par newguy Voir le message
    RCIF n'est pas en lecture seul à en croire la datasheet:

    Interrupt flag bits get set when an interrupt
    condition occurs regardless of the state of
    its corresponding enable bit or the global
    enable bit, GIE (INTCON<7>). User
    software should ensure the appropriate
    interrupt flag bits are clear prior to enabling
    an interrupt.

    Il faut de tout évidence le remettre à 0 par software mais sera vraissemblablement remis à 1 si RCREG n'est pas lu avant de le faire.
    relis la doc chapitre 12.2.2 (USART Asynchronus receiver)
    c'est l'exception qui confirme la règle , sans doute.
    A+, pat

  13. #12
    invite6ea6d79a

    Re : Prob USART en interruption avec PIC 16F628

    mon erreur,

    mille excuses

  14. #13
    invitef26bdcba

    Re : Prob USART en interruption avec PIC 16F628

    Salut Newguy,

    Je te confirme bien que les bits TXIF et RCIF sont lecture seule.

    Voici une copie du datasheet sur le registre PIR1 qui confirme bien que ces deux bits sont uniquement accessibles en lecture...

    David.
    Images attachées Images attachées

  15. #14
    invite48c47ac4

    Post Re : Prob USART en interruption avec PIC 16F628

    pour relier tes 2 pic et d'avoir une communication sans erreur il faut utliser le bus i2c, l'un des pic est master et l'autre slave.

Discussions similaires

  1. Gestion des interruption avec un PIC
    Par schneiderj dans le forum Électronique
    Réponses: 3
    Dernier message: 08/03/2008, 16h26
  2. Communication USART avec PIC et stockage dans I2c
    Par invitead8d66d4 dans le forum Électronique
    Réponses: 0
    Dernier message: 23/12/2007, 15h51
  3. PB interruption avec Pic, language C
    Par invite70a6d0ab dans le forum Électronique
    Réponses: 1
    Dernier message: 05/06/2006, 16h24
  4. petit prob avec 16f628
    Par invitea40fa4b5 dans le forum Électronique
    Réponses: 6
    Dernier message: 03/06/2006, 15h36
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...