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

Problème avec ultrason SRF10 (MSU10) sur I2C



  1. #1
    Mikelamenace

    Problème avec ultrason SRF10 (MSU10) sur I2C


    ------

    Bonjour,

    J'ai un petit problème. Je démarre un télémètre à ultrason basé sur un SRF10 par I2C sur PIC18F.

    Je trouve l'esclave sans soucis. Je fais les mesures, mais par contre, le retour du capteur est toujours identique (2 pour le bit de poids faible et 225 pour le bit de poids fort).

    J'ai trouvé pas mal d'exemple sur internet mais en C, comme je programme en Mikrobasic, je l'ai adapté.

    Code :
    Sub Procedure mesure()
    Dim t as integer
    Dim NumSerie as byte
    Dim MesurePoidsFort as integer
    Dim MesurePoidsFaible as integer
    Dim Mesure as word
    Dim txt as char[8]

    ' Rem --- démarre la mesure ---
    I2C_Start ' Issue I2C start signal
    I2C_Wr(224) ' Adresse le télémètre
    I2C_Wr(0) ' Pointe vers le Mode
    I2C_Wr(80) ' Définit la mesure en cm
    I2C_Stop ' Issue I2C stop signal

    delay_ms(100)

    ' Rem --- Positionne le bit de lecture
    I2C_Start
    I2C_Wr(224)
    I2C_Wr(0)
    I2C_Repeated_Start

    ' Rem --- Lis le numéro de version
    I2C_Wr(225)
    NumSerie = I2C_rd(0)

    ' rem --- lis un bit inutilisé
    I2C_Wr(225)
    t=I2C_rd(0)

    ' rem --- lis le bit de poids faible
    I2C_Wr(225)
    MesurePoidsFaible=I2C_rd(0)

    ' rem --- lis le bit de poids fort
    I2C_Wr(225)
    MesurePoidsFort=I2C_rd(0)
    I2C_Stop ' Issue I2C stop signal


    ' Affichage de la mesure
    LCD_cmd(lcd_clear)
    inttostr(t,txt)
    LCD_OUT(1,1,txt)
    Mesure = word(mesurePoidsFort >> 8) + MesurePoidsFaible
    inttostr(MesurePoidsFaible,txt )
    LCD_out(2,1,txt)
    inttostr(MesurePoidsFort,txt)
    LCD_out(2,5,txt)


    End sub
    Auriez-vous, s'il vous plait, une idée sur ce que je fais mal pour mesurer ? Merci par avance.

    Mike

    -----

  2. Publicité
  3. #2
    Mikelamenace

    Re : Problème avec ultrason SRF10 (MSU10) sur I2C

    Bonjour,

    J'avance pas sur mon problème. Je n’arrive pas à lire mes valeurs avec le télémètre. J’ai scan bien l’I2C et cela marche.

    Par contre, la première valeur lue est correcte, et je n’arrive pas à lire la seconde adresse (il lit toujours 225 en décimal). Comme par hasard, c'est l'adresse de lecture !!!

    Pouvez-vous, s'il vous plait, me filer un coup de main ou une piste ?

    Merci

    Mike

    Sub Procedure mesure()
    Dim t as integer
    Dim NumSerie as byte
    Dim MesurePoidsFort as byte
    Dim MesurePoidsFaible as byte
    Dim Mesure as word
    Dim txt as char[8]

    ' Rem --- démarre la mesure ---
    I2C_Start ' Issue I2C start signal
    I2C_Wr(224) ' Adresse le télémètre
    I2C_Wr(0) ' Pointe vers le Mode
    I2C_Wr(81) ' Définit la mesure en cm
    I2C_Stop ' Issue I2C stop signal

    delay_ms(100)

    ' rem - réiniatilise les valeurs pour etre sur de la lecture
    t=0
    NumSerie = 0
    MesurePoidsFaible = 0
    MesurePoidsFort = 0

    ' Rem --- Positionne le bit de lecture
    I2C_Start
    I2C_Wr(224)
    I2C_Wr(0)
    I2C_Repeated_Start

    ' Rem --- Lis le numéro de version
    I2C_Wr(225)
    NumSerie = I2C_rd(0)
    ' rem --- lis un bit inutilisé
    I2C_Wr(225)
    t=I2C_rd(0)
    ' rem --- lis le bit de poids faible
    I2C_Wr(225)
    MesurePoidsFort=I2C_rd(0)
    ' rem --- lis le bit de poids fort
    I2C_Wr(225)
    MesurePoidsFaible=I2C_rd(0)

    I2C_Stop ' Issue I2C stop signal


    ' Affichage de la mesure
    LCD_cmd(lcd_clear)
    bytetostr(Numserie,txt)
    LCD_OUT(1,1,txt)
    bytetostr(t,txt)
    LCD_OUT(1,5,txt)
    Mesure = word(MesurePoidsFort >> 8) + MesurePoidsFaible
    bytetostr(MesurePoidsFaible,tx t)
    LCD_out(2,5,txt)
    bytetostr(MesurePoidsFort,txt)
    LCD_out(2,1,txt)


    End sub

  4. #3
    invite03481543

    Re : Problème avec ultrason SRF10 (MSU10) sur I2C

    Bonsoir,

    une petite doc serait la bienvenue, j'ai la flemme de la chercher sur le net.
    C'est très probablement une erreur de protocole de lecture dans votre programme.

  5. #4
    Mikelamenace

    Re : Problème avec ultrason SRF10 (MSU10) sur I2C

    Bonjour,

    Une fois de plus, vous venez à mon aide, c'est sympa.

    Alors j'ai une doc mais pas digne de ce nom. Il n'y a pas les chronogrammes habituelles pour les échanges I2C. Seulement un exemple en Cubbasic. J'ai identifié que le problème venait des acks.

    En effet, si je fais 2 lectures de bits en 2 fois, j'obtiens une réponse (au moins un signal de mesure qui varie) :

    ' rem - réiniatilise les valeurs pour etre sur de la lecture
    MesurePoidsFaible = 0
    MesurePoidsFort = 0

    ' Rem --- Positionne le bit de lecture Poids Fort
    I2C_Start
    I2C_Wr(224)
    I2C_Wr(2)
    I2C_Repeated_Start
    I2C_Wr(225)
    MesurePoidsFort = I2C_rd(0)
    I2C_Stop ' Issue I2C stop signal

    ' Rem --- Positionne le bit de lecture Poids Faible
    I2C_Start
    I2C_Wr(224)
    I2C_Wr(3)
    I2C_Repeated_Start
    I2C_Wr(225)
    MesurePoidsFaible = I2C_rd(0)
    I2C_Stop ' Issue I2C stop signal


    ' Affichage de la mesure
    'LCD_cmd(lcd_clear)
    Mesure = word(MesurePoidsFort *256) + MesurePoidsFaible
    inttostr(Mesure,txt)
    LCD_out(2,1,txt)
    J'ai tenté de mettre dans mon précédent code, les ack à 1 à chaque échange sauf au dernier, mais dans ce cas, l'afficheur ne mets plus rien. J'ai essayé en inverse (mettre de 0 à chaque échange sauf au dernier) et la je n'ai que le premier bit qui revient.

    A première vue, ce système fonctionne bien que le poids fort me réponde toujours 0... De plus, avec ce principe le code n'est pas optimisé et j'aimerais bien comprendre.

    Encore merci pour l'aide.

    Mike


    Bonjour Mikelamenace et tout le groupe

    le document porte la mention de copyright et ne peut donc être validée.

    .
    Dernière modification par gienas ; 04/03/2009 à 11h01. Motif: Supprimé pdf sous copyright

  6. A voir en vidéo sur Futura

Discussions similaires

  1. Microcontrolleur avec couche ethernet et I2C
    Par camicami dans le forum Électronique
    Réponses: 2
    Dernier message: 22/05/2008, 16h46
  2. Problème de réalisation d'un télémètre Ultrason
    Par Yapette dans le forum Électronique
    Réponses: 11
    Dernier message: 01/10/2007, 02h56
  3. Mélange avec Ultrason
    Par Zimato dans le forum Physique
    Réponses: 0
    Dernier message: 20/04/2007, 09h59
  4. Problème concernant une DS1307 sur I2C
    Par Nemesio dans le forum Électronique
    Réponses: 10
    Dernier message: 09/06/2006, 17h43
  5. Circuit Ultrason avec I/O logique
    Par dlnow dans le forum Électronique
    Réponses: 3
    Dernier message: 17/02/2006, 15h18
Découvrez nos comparatifs produits sur l'informatique et les technologies.