ultrasonido

3
Programa distancias en compilador MikroC /* Programa para el PIC16F818 para calcular distancias utilizando el sensor de ultrasonidos HC-SR04 y mostrando la distancia en un LCD 2x16 Pin para el Trigger---->RA1 Pin para el ECO-------->RA2 Oscilador interno de 8 MHz */ sbit LCD_RS at RB4_bit; sbit LCD_EN at RB5_bit; sbit LCD_D4 at RB6_bit; sbit LCD_D5 at RB1_bit; sbit LCD_D6 at RB2_bit; sbit LCD_D7 at RB3_bit; sbit LCD_RS_Direction at TRISB4_bit; sbit LCD_EN_Direction at TRISB5_bit; sbit LCD_D4_Direction at TRISB6_bit; sbit LCD_D5_Direction at TRISB1_bit; sbit LCD_D6_Direction at TRISB2_bit; sbit LCD_D7_Direction at TRISB3_bit; // Final de las conexiones del módulo LCD int centimetros=0; char strvalor[7];

Upload: carlos-edgar-buitron-quispe

Post on 19-Jan-2016

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: ultrasonido

Programa distancias en compilador MikroC

/*Programa para el PIC16F818 para calcular distancias utilizandoel sensor de ultrasonidos HC-SR04 y mostrando la distancia en un LCD 2x16Pin para el Trigger---->RA1Pin para el ECO-------->RA2Oscilador interno de 8 MHz*/

sbit LCD_RS at RB4_bit;  sbit LCD_EN at RB5_bit;  

sbit LCD_D4 at RB6_bit;  sbit LCD_D5 at RB1_bit;  sbit LCD_D6 at RB2_bit;  sbit LCD_D7 at RB3_bit;  

sbit LCD_RS_Direction at TRISB4_bit;  sbit LCD_EN_Direction at TRISB5_bit;  

sbit LCD_D4_Direction at TRISB6_bit;  sbit LCD_D5_Direction at TRISB1_bit;  sbit LCD_D6_Direction at TRISB2_bit;  sbit LCD_D7_Direction at TRISB3_bit;  // Final de las conexiones del módulo LCD

int centimetros=0;  char strvalor[7];  

void main() {  //Oscilador interno -ojo cambiar palabra configuracion    OSCCON = 0x70; // 8 Mhz interno    while (OSCCON.IOFS=0){}; //Espera hasta qu se estabilice    

//inicio lcd      Lcd_Init(); // Inicialización del visualizador LCD      delay_ms(1000);      

Page 2: ultrasonido

Lcd_Cmd(_LCD_CURSOR_OFF); // Comando LCD (apagar el cursor)      Lcd_Cmd(_LCD_CLEAR); // Comando LCD (borrar el LCD)      Lcd_Out(1,1,"cm=");      

ADCON1.PCFG1= 1; //A1 ES DIGITAL      ADCON1.PCFG2= 1; //A2 ES DIGITAL      TRISA = 0b00000100; //PORTA como salidas excepto RA2 que es entrada del ECO      

while(1){      //disparo el trigger        RA1_bit = 1;        Delay_us(60);        RA1_bit = 0;        

//espero a que el bit ECO se ponga a 1        while( RA2_bit == 0 ) {}        

//entonces arranco el TMR0        OPTION_REG.T0CS = 0;        

//espero que el bit ECO baje a 0 mientras cuento 1 cm cada 58us (ida y vuelta del sonido para 1cm)        while( RA2_bit == 1 ) {        centimetros++;          delay_us(58);          }        //pausa exigida por el datasheet        delay_ms(50);        

//paro el timer0        OPTION_REG.T0CS = 1;        

//pinto distancia en el lcd        IntToStr(centimetros,strvalor);        Lcd_Out(1,7,strvalor);        

//resete centimetros        

Page 3: ultrasonido

centimetros = 0;        }     

}