Hi,
vorweg erstmal - mein erstes Projekt mit dem µC^^.
Probleme hab ich beim Auslesen der Zeit die der Ultraschallsensor zurück schickt.
Der Code:
Gedacht hab ich mir das im Grunde so: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); } }
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
Lesezeichen