![]() |
|
Tài trợ cho PIC Vietnam |
Cảm biến Camera, siêu âm, hồng ngoại, gyro, la bàn... |
![]() |
|
Ðiều Chỉnh | Xếp Bài |
|
![]() |
#1 |
PIC Bang chủ
|
Cảm biến laser thì tôi chưa dùng, nhưng cảm biến siêu âm thì bạn cứ đặt câu hỏi, nếu trong phạm vi hiểu biết tôi sẽ giúp.
Chúc vui.
__________________
Công ty TNHH Thương mại và Giao nhận R&P store.hn@rpc.vn - store.hcm@rpc.vn Học PIC như thế nào? |
![]() |
![]() |
![]() |
#2 | |
Nhập môn đệ tử
Tham gia ngày: Mar 2010
Bài gửi: 1
: |
srf05
Trích:
#include <16F877.h> #include <defs_16f877a.h> #fuses HS,NOWDT,NOPROTECT,NOLVP #device *=16 #use delay(clock=20000000) #include <lcd_lib_4bit.c> #define led1 pin_E1 #define button pin_B1 #define TRIGGER pin_B4// chan phat song sieu am //chan ECHO nhan tin hieu ve noi vao RC2 #BYTE TRISC=0X87 #BYTE PORTC=0X07 #BIT RC2=0X7.2 float dist,getvar ; int1 has_echo=0,echo=0; //////////////////////////////////////////////// #int_CCP1 void ccp1_isr() { setup_ccp1(CCP_CAPTURE_RE);//thiet lap Capture CCP1 do xung canh len enable_interrupts(INT_CCP1);//cho phep ngat khi ccp1 co tin hieu enable_interrupts(GLOBAL); if(pin_c2) set_timer1(1000); //reset timer1 ve 0 setup_ccp1(CCP_CAPTURE_FE); //chuyen sang do xung canh xuong if(!pin_c2);//khi co xung canh xuong getvar=get_timer1(); //doc gia tri timer1 ngay khi co xung echo canh xuong dist=(getvar-485)/28.3; //so lieu dua theo ket qua do thuc te dist=getvar; } //----10us cho trigger---- void trig() { output_high(TRIGGER); delay_us(10); output_low(TRIGGER); } void main() { SET_TRIS_A(0x00); // Port A output SET_TRIS_B(0X00); SET_TRIS_E(0x00); SET_TRIS_C(0xff); SET_TRIS_D(0b00000011); lcd_init(); while(1) { trig(); ccp1_isr(); lcd_putcmd(0x01); printf(lcd_putchar,"dist=%6.1f",dist); lcd_putchar("cm"); delay_ms(1000); } } lcd chỉ hiển thị số 0. em chưa biêt sai chỗ nào cả |
|
![]() |
![]() |
![]() |
#3 | |
Đệ tử 2 túi
Tham gia ngày: Aug 2008
Bài gửi: 38
: |
Trích:
+ Điều trước hết là bạn phải cho xem cái mạch của bạn, để biết rằng bạn đang sử dụng Mode nào, và có mắc đúng hay chưa ? + Điều thứ 2: là con SRF05 này cần xung Trigger >=10uS, vậy thì bạn cho nó 50us hay 100us cho chắc chắn, không vấn đề gì hết. + Thứ 3 là bạn có chắc cái chương trình ngắt của bạn có đúng không ? Con SRF05 còn hoạt động không ? + Bạn tính khoảng cách theo công thức gì vậy, bởi vì trong datasheet của nó có nói, thời gian xung đo được là uS, lấy kết quả đó chia cho 58 thì ra khoảng cách là cm, vậy tại sao công thức bạn kỳ vậy ? |
|
![]() |
![]() |
![]() |
|
|