Projet

Général

Profil

Mesure distante capteur ultrason - pic18f45k50 » Historique » Version 3

Romain CHAMBELLON, 22/11/2022 14:59

1 2 Romain CHAMBELLON
h1. Mesure distance capteur ultrason - pic18f45k50
2 1 Romain CHAMBELLON
3
Le programme récupère une distance avec un capteur ultrason, on utilise la carte de synthèse avec un PIC18F45K50
4
5
Le but d'allumer une led quand on est trop prêt, donc quand on est inférieur à une certaine distance.
6
7
Ceci permet de simuler une détection d'obstacle avec un capteur ultrason.
8
9 3 Romain CHAMBELLON
10
*
11
Voici le code de ce programme :* 
12 1 Romain CHAMBELLON
13
#include <stdio.h>	
14
#include <stdlib.h>	
15
16
#if defined(__XC)	
17
    #include <xc.h>        /* XC8 General Include File */	
18
#elif defined(HI_TECH_C)	
19
    #include <htc.h>       /* HiTech General Include File */	
20
#elif defined(__18CXX)	
21
    #include <p18cxxx.h>   /* C18 General Include File */	
22
#endif	
23
24
#if defined(__XC) || defined(HI_TECH_C)	
25
#include <stdint.h>        /* For uint8_t definition */	
26
#include <stdbool.h>       /* For true/false definition */	
27
#endif	
28
29
// Definition de l'oscillateur comme oscillateur externe 	
30
#pragma config FOSC = INTOSCIO	
31
32
// Desactivation du WATCHDOG
33
#pragma config WDTEN = OFF		
34
#pragma config MCLRE = OFF
35
#pragma config LVP = OFF
36
37
// determination de la frequence
38
#define _XTAL_FREQ 16000000L
39
40
///////////////////////////////// ULTRASON /////////////////////////////////////
41
42
int calcul_distance()
43
{
44
    // Declaration des variables
45
    
46
    int distance = 0;
47
    int timer = 0;
48
    TMR1H = 0; 
49
    TMR1L = 0;
50
    
51
    LATBbits.LATB0 = 1; // Impulsion de 10 us sur le trigger
52
    __delay_us(10); 
53
    LATBbits.LATB0 = 0;
54
   
55
    while(PORTBbits.RB1==0); // Mesure de la durée entre l'envoi et la réception du signal
56
    T1CONbits.TMR1ON = 1;
57
    while(PORTBbits.RB1==1);
58
    timer=TMR1;
59
    T1CONbits.TMR1ON = 0;
60
    
61
    distance=timer/17; // Calcul de la distance en cm
62
    return distance;
63
}
64
65
////////////////////////////////////////////////////////////////////////////////
66
//////////////////////////////// FONCTION MAIN /////////////////////////////////
67
////////////////////////////////////////////////////////////////////////////////
68
69
int main() 
70
{
71
    // Declaration et configuration des broches	
72
    
73
    TRISDbits.TRISD7 = 0;          // Broche D7 = LED témoin, ultrason
74
    ANSELDbits.ANSD7 = 0;
75
    LATDbits.LATD7 = 0;
76
    
77
    PORTD = 0;                     // PORTD initialisé à 0
78
     
79
    TRISBbits.TRISB0 = 0;          // Broche B0 = trigger ultrason
80
    ANSELBbits.ANSB0 = 0;
81
    PORTBbits.RB0 = 0;
82
    
83
    TRISBbits.TRISB1 = 1;          // Broche B1 = echo ultrason
84
    ANSELBbits.ANSB1 = 0;
85
    PORTBbits.RB1 = 0; 
86
  
87
    // Configuration du timer
88
    T1CKPS0 = 0;
89
    T1CKPS1 = 0;
90
    T1CONbits.TMR1CS = 0; // L'horloge locale est l'horloge source
91
    
92
    ////////////////////////////////////////////////////////////////////////////
93
    //////////////////////////* PROGRAMME PRINCIPAL *///////////////////////////
94
    ////////////////////////////////////////////////////////////////////////////
95
   
96
    /**/
97
    while(1)
98
    {
99
    
100
        __delay_ms(10);
101
        
102
        int dist = calcul_distance();
103
        
104
        
105
        
106
        if (dist<10){ // valeur de distance de détection à définir en cm
107
            LATD7=1;
108
        }
109
        else {
110
            LATD7=0;
111
        }
112
    
113
    }
114
    
115
    return 0;
116
}
117