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

Radar de recul -- Sonar



  1. #1
    gautyy5

    Radar de recul -- Sonar


    ------

    Bonjour à tous!

    Avec mon groupe de travail on doit réaliser un radar de recul. Je m'occupe de la partir du sonar. Le but étant de le faire biper plus ou moins vite selon une distance (qu'un collègue se chargera de programmer de son côté à l'aide d'un capteur).

    J'utilise le logiciel MPLABX IDE, avec le compilateur XC8, sur le PIC18f45k20.

    J'ai bien avancé, je gère les bip à l'aide d'une PWM, ainsi qu'une interruption sur le débordement du timer 1, en changeant les valeurs du timer pour qu'il déborde plus ou moins vite selon la valeur de la distance qui nous est envoyée. Le sonar sera placé sur le port RB3 du pic.

    Le soucis, c'est que le sonar bip sans arrêt, et je ne sais pas d'où ça vient. Avez -vous des conseils svp?

    Voici mon code:

    Code:
    #pragma config FOSC=INTIO7, FCMEN=OFF, IESO=OFF, PWRT=OFF, BOREN=OFF
    #pragma config BORV=30, WDTEN=OFF, WDTPS=1, MCLRE=ON, HFOFST=ON
    #pragma config LPT1OSC=OFF, PBADEN=OFF, CCP2MX=PORTBE, STVREN=OFF
    #pragma config LVP=OFF, XINST=OFF, CP0=OFF, CP1=OFF, CP2=OFF
    #pragma config CP3=OFF, CPB=OFF, CPD=OFF, WRT0=OFF, WRT1=OFF
    #pragma config WRT2=OFF, WRT3=OFF, WRTB=OFF, WRTC=OFF, WRTD=OFF
    #pragma config EBTR0=OFF, EBTR1=OFF, EBTR2=OFF, EBTR3=OFF
    #pragma config EBTRB=OFF
    // Libraries
    #include "p18f45K20.h"
    #include <stdio.h>
    #include <stdlib.h>
    
    volatile unsigned char d=50;
    volatile int j=0;
    
    void interrupt high_isr (void)
    {
        if (PIR1bits.TMR1IF==1)
        {
            j++;
            if (j=5)
            {
                TRISBbits.RB3 = 0;       // Disable RB3 output
                PIR1bits.TMR1IF = 0; // Timer1 interrupt Flag cleared
                        if (d<20)
                        {
                            TRISBbits.RB3 = 1;       // Disable RB3 output
                            TMR1H = 255;             // preset for timer1 MSB register
                            TMR1L = 255;             // preset for timer1 LSB register
                            //0 sec
                        }
    
                        if ((d>=20)&&(d<40))
                        {
                            TRISBbits.RB3 = 1;       // Disable RB3 output
                            TMR1H = 236;             // preset for timer1 MSB register
                            TMR1L = 231;             // preset for timer1 LSB register
                            // 0.1s
                        }
    
                        if ((d>=40)&&(d<100))
                        {
                            TRISBbits.RB3 = 1;       // Disable RB3 output
                            TMR1H = 207;             // preset for timer1 MSB register
                            TMR1L = 102;             // preset for timer1 LSB register
                            //0.25s
                        }
    
                        if (d>=100)
                        {
                            TRISBbits.RB3 = 1;       // Disable RB3 output
                            TMR1H = 110;             // preset for timer1 MSB register
                            TMR1L = 53;             // preset for timer1 LSB register
                            //0.75s
                        }
                j=0;
            }
            TMR1IF=0;
            T1CONbits.TMR1ON  = 1;
        }
    }
    
    // Main Program
    void main (void)
    {
        OSCCON = 0b01100000;
    
        // PWM output setup (CCP2 on RB3)
        // --------------------------------------------------------------------
        CCP2CON = 0b00001111; // CCP2 as PWM mode, LSB's set to 0
        PR2 = 0xff; // Initial Period
        CCPR2L = 0x1F; // Initial duty cycle (MSB's)
        T2CON = 0x00; // Timer 2 prescaler is 1 ->
        T2CONbits.TMR2ON = 1; // Launch Timer 2 ->
        TRISBbits.RB3 = 1;       // Disable RB3 output
    
        //Timer1 Registers Prescaler= 8 - TMR1 Preset = 0 - Freq = 7.63 Hz - Period = 0.131072 seconds
    
        T1CONbits.T1CKPS1 = 1;
        T1CONbits.T1CKPS0 = 1;
        T1CONbits.T1OSCEN = 0;
        T1CONbits.T1SYNC  = 0;
        T1CONbits.TMR1CS  = 0;
        T1CONbits.TMR1ON  = 1;
    
        INTCONbits.PEIE = 1;    // Bit6 Enable Peripheral interrupts
        PIE1bits.TMR1IE = 1;    // Timer1 interrupt enabled
        PIR1bits.TMR1IF = 0;    // Timer1 interrupt Flag cleared
        
        TMR1L = 0x00;          // Reset Timer1 lower 8 bits
        TMR1H = 0x00;          // Reset Timer1 upper 8 bits
    
        INTCONbits.GIE  = 1;    // Bit7 enable Global interrupts
    
        
    }

    -----

  2. Publicité
  3. #2
    HAYAC

    Re : Radar de recul -- Sonar

    Bonjour,

    Je ne connais pas du tout le compilateur XC8 mais à la lecture du code et sauf erreur, je ne vois pas de condition d'activation dans MAIN ou de désactivation, je m'explique :
    Au delà de X mètres pas de son, pas d'activation de la sortie du bip ni de l'interruption (pour des économies de ressource MCU).
    Et si la distance capté est inférieure ou égale alors j'active cette ensemble.

    Cordialement,

  4. #3
    gautyy5

    Re : Radar de recul -- Sonar

    Quelque chose de ce genre?

    Code:
    while(1)
        {
            if (d>100)
            {
                TRISBbits.RB3 = 1;       // Disable RB3 output
                PIE1bits.TMR1IE = 0;    // Timer1 interrupt disabled
            }
    
            else
            {
                PIE1bits.TMR1IE = 1;    // Timer1 interrupt enabled
            }
        }
    (J'ai pas fait d'activation de la sortie dans le main, elle l'est dans l'interruption).

  5. #4
    HAYAC

    Re : Radar de recul -- Sonar

    ça me semble cohérent,
    sauf le
    TRISBbits.RB3 = 1;
    qui, je pense devrais etre à 0 (pas de tension au repos).
    Pour ce qui est de d>100 n'ayant pas connaissance du capteur je suppose la valeur 100 correct.

    NB: pour un projet (en général) il est intéressant de prevoir les convertions de captage Ex: Val-capteur = 100 => Mètres = 2.5 ou 3.22V => 79.5°C ...
    information converti peut être stocké, affiché ou servir à la compréhension plus aisé d'un code

  6. #5
    gautyy5

    Re : Radar de recul -- Sonar

    Merci je testerai ça ce soir!

    Pour d, comme expliqué au début c'est un ami qui s'occupe du capteur et de la conversion. Ensuite il m'envoie une valeur qui sera en cm!
    Donc d est la valeur en cm

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

    Re : Radar de recul -- Sonar

    Pas de prob,

    Bon test

  9. Publicité

Sur le même thème :

Discussions similaires

  1. Radar de recul
    Par yazzer dans le forum Électronique
    Réponses: 8
    Dernier message: 22/04/2012, 21h44
  2. Radar de recul
    Par sameon dans le forum Technologies
    Réponses: 1
    Dernier message: 23/02/2011, 06h10
  3. TIPE sur sonar/radar
    Par Freekys dans le forum TPE / TIPE et autres travaux
    Réponses: 0
    Dernier message: 16/09/2008, 16h01
  4. Radar de recul
    Par swap dans le forum Dépannage
    Réponses: 1
    Dernier message: 28/02/2006, 21h39
  5. Radar de recul
    Par rlelapin dans le forum Électronique
    Réponses: 1
    Dernier message: 16/06/2005, 20h47