Hola... Creo que aun que ya es un poco pasado este medidor de distancia (hc-sr04), para mi es novedad, pues apenas lo estoy implementando
Bueno pues resulta que por viendo algunos formas de como implementarlo, llegue a lo siguiente:
#include <18F2550.h>
#device *=16
#FUSES XT,NOPROTECT,BROWNOUT,PUT,NOCPD,STVREN,NODEBUG,NOLVP,NOWRT,NOWRTD,IESO,FCMEN,NOPBADEN,NOWRTC,NOWRTB,NOEBTR,NOEBTRB,NOCPB,MCLR
#use delay(clock=4000000, crystal=4000000)
#include<lcd.c>
int16 time_eco_Us = 0;
float time_eco_ms = 0.0;
float temperature = 25.0;
//int16 bitsADC = 0;
float distancia = 0.0;
void main (void){
porta=0x00; portb=0x00; portc=0x00;
set_tris_a(0x10);
set_tris_b(0b00000000); // 1 = entrada, 2 = salida Ra7-Ra6-Ra5-Ra4-Ra3-Ra2-Ra1-Ra0
set_tris_c(0b00000000);
//SETUP_ADC_PORTS(AN0); // determina que el puerto RA0/AN0 será analógico
//SET_ADC_CHANNEL(0);
//setup_adc(ADC_CLOCK_DIV_32); //desactivamos comparadores del puerto A
lcd_init();
trigger_off;
setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);
set_timer1(0);
enable_interrupts(GLOBAL);
while(true){
demora_pulso_trigger; // Le damos tiempo de 10 mS al primer pulso
trigger_on; delay_us(20); trigger_off;
for (;!input(pin_echo););
set_timer1(0);
for (;input(pin_echo););
time_eco_Us = get_timer1();
// distancia = tiempo * velocidad
distancia = ((((time_eco_Us * 0.000001)*(331.4 + (0.61 * temperatura)))*0.5)*100);
lcd_gotoxy(1,3); printf(lcd_putc," Dist: %3.2f cm ",distancia ;
Pues el code funciona, peroaqui va el pero....
Lo quiero pasar a 48Mhz con un cristal externo de 4 Mhz para verlo en un programita que java. Pero resulta que todos los valores se me han movido al quererlo hacer los usb.
Asi estoy configurando los fuses y el cristal:
#fuses PLL1,CPUDIV1,USBDIV,XTPLL,NOFCMEN,NOIESO,PUT,NOBROWNOUT,VREGEN,NOWDT,NOPBADEN,MCLR,NOSTVREN,NOLVP,NODEBUG,NOPROTECT,NOSTVREN,NOCPB,NOWRT,NOWRTC
#use delay(clock=48000000)