PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SRF05 an PIC18F4550



TDK
22.01.2009, 07:34
Hi,
vorweg erstmal - mein erstes Projekt mit dem µC^^.
Probleme hab ich beim Auslesen der Zeit die der Ultraschallsensor zurück schickt.

Der Code:

#include <18F4550.h>
#use delay(clock=20000000)
#fuses HS,NOWDT,NOPROTECT,NOLVP,NOBROWNOUT
#include <lcd.c>
#int_timer1
int i;
int u;
int z;
int t;
void main()
{
setup_timer_1(t1_internal); // Start timer1
enable_interrupts(int_timer1); // Timer1-Interrupt freigeben
enable_interrupts(global); // alle Interrupts freigeben
lcd_init();

while(1)
{
printf(lcd_putc,"\f");
printf(lcd_putc,"Welcome");
if(!input(pin_a4))
{
output_high(pin_e0);
delay_us(50);
output_low(pin_e0);
set_timer1(0);
for(u = 0; u <= 250; u++)
{
if(input(pin_e1))
{
z=1;
}
if(!input(pin_e1)&&z==0)
{
set_timer1(0);
}
if(!input(pin_e1)&&z==1)
{
i = get_timer1()/290;
u = 251;
z=0;
}
delay_us(100);
}
printf(lcd_putc,"\n");
printf(lcd_putc,"Messung gestartet");
lcd_gotoxy(1,2);
printf(lcd_putc,"%u cm Abstand",i);
delay_ms(500);
}
i = 0;
delay_ms(50);
}
}

Gedacht hab ich mir das im Grunde so:
Auf Pin E0 leg ich 50µs das Signal an (ich will den SRF05 im SRF04 kompatiblen Modus betreiben^^). Danach sollte die messung eigentlich gestartet werden...
Alle 100µs überprüft er ob der E1 (da wo das Echo Signal anliegt) auf 0 geht. Falls dies das erste mal der Fall ist wird der Timer auf 0 gesetzt. Wenn dies das zweite mal geschieht wird der Wert vom Timer ausgelesen.
Fragt mich nicht wo ich die /290 her hab... stand glaub irgendwo im Datenblatt. Nur leider funktioniert das nicht so wie ich mir das gedacht habe^^ Könnte mich vllt jemand über meinen Denkfehler aufklären?
Danke schon mal
mfg
TDK