View Single Post
Old 15-09-2012, 05:17 PM   #1
nvb_moitrang
Nhập môn đệ tử
 
nvb_moitrang's Avatar
 
Tham gia ngày: Aug 2010
Bài gửi: 7
:
Post Cần giúp về SRS05 dùng pic18

Em đang làm ứng dụng dùng srf05 để đo khoảng cách code của em như sau:


#include "18F4550.h"
#device *=16
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,PLL5,CPUDIV1,V REGEN
#use delay(clock=20000000)
#define LCD_ENABLE_PIN PIN_D2
#define LCD_RS_PIN PIN_D0
#define LCD_RW_PIN PIN_D1
#define LCD_DATA4 PIN_D4
#define LCD_DATA5 PIN_D5
#define LCD_DATA6 PIN_D6
#define LCD_DATA7 PIN_D7
#include "lcd.c"
#define SRF05_IN PIN_B4


//=================================

long rise,fall,pulse_width;
int8 tram1,chuc1,donvi1;
//int16 d;
#int_ccp1
#int_ccp2
void isr(void)
{
rise = CCP_1;
fall = CCP_2;
pulse_width =fall-rise; // CCP_1 luu thoi gian xung len muc cao
// CCP_2 luu thoi gian xung xuong muc thap

}
void convert_bcd1(int16 x)
{ donvi1=(((x%1000)%100)%10) + 0x30; //chia lay phan du, so hang don vi
tram1=((x%1000)/100) + 0x30; //tach hang tram va hang chuc
chuc1=((x%1000)%100)/10 + 0x30;
lcd_gotoxy(7,2);
lcd_putc(tram1);
lcd_gotoxy(8,2);
lcd_putc(chuc1);
lcd_gotoxy(9,5);
lcd_putc(donvi1);
lcd_gotoxy(10,2);
lcd_putc("cm");
}

void main() {
LCD_init();
setup_ccp1(CCP_CAPTURE_RE); // Configure CCP1 to capture rise
setup_ccp2(CCP_CAPTURE_FE); // Configure CCP2 to capture fall
setup_timer_1(T1_INTERNAL); // Start timer 1
//enable_interrupts(INT_CCP1); // Setup interrupt on rising edge
enable_interrupts(INT_CCP2); // Setup interrupt on falling edge
enable_interrupts(GLOBAL);

while (1)
{
int16 d;
//10us cho trigger
output_high(SRF05_IN);
delay_us(10);
output_low(SRF05_IN);
d =pulse_width/(12*58);
//d =123;
printf(lcd_putc,"\f Khoang cach");
convert_bcd1(d);
delay_ms(100);
}
}

Em nạp vào mạch thì khoảng cánh đo được nhảy loạn xa lên, bác nào có thể chỉ cho em sai chổ nào không à
__________________
học thầy không tày học bạn
nvb_moitrang vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn