PIC16F876 en I2C
Répondre à la discussion
Affichage des résultats 1 à 4 sur 4

PIC16F876 en I2C



  1. #1
    invite2977d557

    PIC16F876 en I2C


    ------

    Bonjour à tous
    Je travaille avec MPASM en asembleur et me pose une question sur le SSP en mode I2C
    Comment peut-on savoir si l'esclave a envoyé son Ack ?
    Avec un 16F84 j'utilisais une sous-routine attendant que le SDA passe à zéro mais avec le SSP il semble que ce ne soit plus nécessaire.
    Quelqu'un peut-il me donner une explication car je rencontre quelques problèmes
    à ce sujet.
    Merci d'avance

    -----

  2. #2
    invite035d53c2

    Re : PIC16F876 en I2C

    Salut,

    En checkant l'état du bit ACKSTAT du registre SSPCON2, tu peux savoir si tu as un reçu un ack ou non (page 70 du datasheet).

    Il y a un pdf explicatif sur le site de microchip à propos du mode master i2c : http://ww1.microchip.com/downloads/en/DeviceDoc/i2c.pdf

  3. #3
    invite2977d557

    Re : PIC16F876 en I2C

    Citation Envoyé par sebastien.t Voir le message
    Salut,

    En checkant l'état du bit ACKSTAT du registre SSPCON2, tu peux savoir si tu as un reçu un ack ou non (page 70 du datasheet).

    Il y a un pdf explicatif sur le site de microchip à propos du mode master i2c : http://ww1.microchip.com/downloads/en/DeviceDoc/i2c.pdf
    Merci pour ta réponse, voila ce que j'utilise

    Wait
    btfsc SSPCON2,ACKSTAT ; Attendre ACK de l'esclave
    goto Wait ; nonACK , boucler
    PAGE0 ; ACK reçu suite
    return
    Mais est-il nécessaire de vérifier cet ACK après un envoi ? Il semble que MSSP
    le controle automatiquement en mode I2C.

    Merci aussi pour le lien microchip, je vais m'y plonger

  4. #4
    invite035d53c2

    Re : PIC16F876 en I2C

    Bonjour,

    Si tu fais cela, et que tu reçois un Nack, tu vas boucler indéfiniment.
    Personnellement, j'ai repris les routines présentes dans le pdf. A savoir :

    BANKSEL SSPCON2
    btfsc SSPCON2,ACKSTAT ; Check ACK Status bit to see if I2C
    goto I2CFail ; failed, skipped if successful

    ; Send and Check the STOP condition, wait for it to complete
    BANKSEL SSPCON2
    bsf SSPCON2,PEN ; Send STOP condition
    call WaitMSSP ; Wait for I2C operation to complete
    bcf STATUS, RP1
    bcf STATUS, RP0
    return

    ; *** SUBROUTINES & ERROR HANDLERS ***
    ; I2C Operation Failed code sequence - This will normally not happen,
    ; but if it does, a STOP is sent and the entire code is tried again.
    I2CFail
    BANKSEL SSPCON2
    bsf SSPCON2,PEN ; Send STOP condition
    call WaitMSSP ; Wait for I2C operation to complete
    bcf STATUS, RP0
    bcf STATUS, RP1
    return

    ; This routine waits for the last I2C operation to complete.
    ; It does this by polling the SSPIF flag in PIR1.
    WaitMSSP
    BANKSEL PIR1 ; BANK 0
    btfss PIR1,SSPIF ; Check if done with I2C operation
    goto $-1 ; I2C module is not ready yet
    bcf PIR1,SSPIF ; I2C module is ready, clear flag.
    return

  5. A voir en vidéo sur Futura

Discussions similaires

  1. montage pic16f876
    Par invite4b9d5cf9 dans le forum Électronique
    Réponses: 1
    Dernier message: 21/04/2007, 10h28
  2. TRMT - liaison UART PIC16F876
    Par invite0f39f32f dans le forum Électronique
    Réponses: 6
    Dernier message: 19/05/2006, 10h43
  3. Pic16f876
    Par invite0f39f32f dans le forum Électronique
    Réponses: 1
    Dernier message: 02/05/2006, 17h48
  4. Comment Utilise Un Pic16f876 En Convertisseur Dc/dc
    Par invite2448f48c dans le forum Électronique
    Réponses: 3
    Dernier message: 15/10/2005, 23h50
  5. PIC16F876
    Par inviteaaaccd27 dans le forum Électronique
    Réponses: 1
    Dernier message: 04/02/2004, 12h56
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...