Projet

Général

Profil

Mesure distante capteur ultrason - pic18f45k50 » Historique » Version 1

Romain CHAMBELLON, 22/11/2022 14:57

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