ultrasonido
TRANSCRIPT
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);
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
centimetros = 0; }
}