Ðề tài: SRF05 and PIC6F877A !
View Single Post
Old 27-10-2008, 08:12 PM   #13
anh_gioi
Đệ tử 6 túi
 
Tham gia ngày: Oct 2006
Bài gửi: 147
:
Trích:
Nguyên văn bởi falleaf View Post
Em nối mạch thế nào, gửi lên cho mọi người xem. Bỏ hết code phần LCD đi chỉ viết code cho phần SRF thôi.

Nối một con LED vào chân ECHO. Xuất xung 10us trên chân TRIGGER, xem thử xem con LED trên chân ECHO có nháy không. Nếu nháy thì nó vẫn còn sống.

Quan sát kỹ vì có thể con LED nháy một tí thôi. Nhớ để cảm biến ra khoảng trống để thời gian nháy của LED vào khoảng 30ms (xa nhất). Không cần điện trở nối tiếp LED. Nếu có OSC thì cắm vào chân ECHO đo thử, nếu không có thì mang lên RP test thử.

Trường hợp em nối sai MODE, không đặt ngõ vào và ngõ ra đúng rất nguy hiểm, vì lúc đó cả 2 con PIC đều đặt là ngõ ra, mà một bên đặt mức cao, một bên đặt mức thấp, rất nguy hiểm. Có khả năng con PIC bị toi. Nếu may mắn là con PIC của em toi, còn xui xẻo thì con PIC trên SRF toi.

Con PIC trên SRF toi thì kể như xong phim. Tìm cái OSC để kiểm tra, hoặc mang tới RP để kiểm tra bằng OSC.

Tụi em làm thí nghiệm phải đọc kỹ tài liệu hướng dẫn, và phải làm rất cẩn thận, không thì lãng phí tiền bạc chỉ vì cái "thích vọc" của mình đấy.

Chúc vui.
ôi, cám ơn anh đã chỉ bảo em kiểm tra. em kiểm tra xong rùi, kết quả là SRF05 ko toi, kiểm tra chân PIC cũng ko sao? lạ ghê.. nhưng em thấy nó không sao là em vui lắm rồi. em nạp cho nó đoạn code này ạ, mong anh xem qua giúp em:
Trích:
#include "F:\NCKH 2009\PIC 16\capture---\cpture----.h"
#bit TMR1IF = 0x0C.0
#include <F:\NCKH 2009\PIC 16\count_timer2\LCD_lib_4bit.c>
int8 tram,chuc,donvi;
int8 count;
int16 CCP1Value; // Gia tri CCP hien tai
int16 CCP1OldValue; // Gia tri CCP truoc do
BOOLEAN CCP1Captured;

void Init_ccp(void)
{
setup_ccp1(CCP_CAPTURE_RE);;
setup_timer_1(T1_INTERNAL); // Start timer 1
CCP1Value = 0;
CCP1OldValue = 0;
CCP1Captured = TRUE;
enable_interrupts(INT_CCP1);
enable_interrupts(GLOBAL);
}

#int_CCP1
void CCP1_isr()
{

if(TMR1IF)
{
CCP1Value = CCP_1 +(65535-CCP1OldValue);
CCP1OldValue = CCP_1;
TMR1IF=0;

}
else
{
CCP1Value = CCP_1 - CCP1OldValue;
CCP1OldValue = CCP_1;
}
CCP1Captured = TRUE;

}

void convert_bcd(int8 x)
{

donvi=(((x%1000)%100)%10) + 0x30; //chia lay phan du, so hang don vi
tram=((x%1000)/100) + 0x30; //tach hang tram va hang chuc
chuc=((x%1000)%100)/10 + 0x30;
///// hien thi len gia tri LCD//////
LCD_putcmd(0xC5);
LCD_putchar(tram);
LCD_putcmd(0xc6);
LCD_putchar(chuc);
LCD_putcmd(0xC7);
LCD_putchar(donvi);
}

void main()
{
Init_ccp();
LCD_init();
CCP1_isr();
//---hien thi LCD---
LCD_putcmd(0x85);
LCD_putchar("anh_gioi");

while(1)
{
output_high(pin_d0);
delay_us(10);
output_low(pin_d0);

count = CCP1Value;
convert_bcd(count);
delay_ms(100);
}
}
thì trên LCD của em báo con số từ 230-245 ạ.
khi em di chuyển đầu SRF ra xa hơn(hay gần đi ) thì chỉ số vẫn không thay đổi, không biết em sai chỗ nào ạ?(em dò trên 1 mặt phẳng)
thứ hai: em dùng thạch anh 20MHZ với timer1 (setup_timer_1(T1_INTERNAL); ) thì tính thời gian thế nào ạ? em thấy 1 số đoạn code tính khác nhau nên em chưa hỉu lắm?
Hình Kèm Theo
File Type: jpg capture.JPG (80.4 KB, 72 lần tải)
anh_gioi vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn