PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   PIC - Thiết kế và Ứng dụng (http://www.picvietnam.com/forum/forumdisplay.php?f=23)
-   -   nhờ mấy anh giúp em code cảm biến srf04 (http://www.picvietnam.com/forum/showthread.php?t=17709)

binhcddt09b 06-05-2012 10:50 PM

nhờ mấy anh giúp em code cảm biến srf04
 
em có code này viết cho cảm biến siêu âm,nhưng giá trị đọc về từ cảm biến nó chỉ giữ nguyên chứ ko chuyển đổi j khi em di chuyển cảm biến, các bác giúp em sử nó với.mà mỗi đoạn code em coi thì nó lại có một cách chia giá trị khác nhau,em ko biết nên chia ntn nên em lấy trong datasheet luôn.
#include <16f887.h>
#FUSES,nowdt,noprotect,nolvp,put
#use delay(clock=20000000)
#use fast_io(a)
#use fast_io(b)
#use fast_io(c)
#use fast_io(d)
#use fast_io(e)
#byte porta=0x5
#byte portc=0x7
#byte portd=0x8
#byte portb=0x6
#byte porte=0x9
#bit c3=portc.3
#include <lcd.c>
float kc=0;

#INT_CCP1
void ccp1_isr()
{
set_timer1(0); //Cai gia tri cho Timer1
setup_ccp1(CCP_CAPTURE_FE); //chuyen sang do canh xuong
kc=(get_timer1())/58;

}

void hienthi(int16 )
{
lcd_gotoxy(1,1);
printf(lcd_putc,"CACH VAT:%f",kc);
lcd_gotoxy(14,1);
Printf(LCD_putc,"cm");
lcd_gotoxy(2,2);
lcd_putc("ROBOT TU HANH");
delay_ms(30);
}
void main()
{
LCD_init();
setup_timer_1(T1_INTERNAL|T1_DIV_BY_2);
setup_ccp1(CCP_CAPTURE_RE);
enable_interrupts(INT_CCP1); // Cho phép ng?t khi CCP1 có tín hi?u
enable_interrupts(GLOBAL);
//---hien thi LCD---

while(TRUE) {
set_tris_c(0x04);
c3 = 1; //trigger
delay_us(10);
c3 = 0;
hienthi(kc);
delay_ms(50);
}
}

binhcddt09b 07-05-2012 12:52 PM

ủa thấy hồi đầu mọi người bàn tán nhiều về con này lắm mà?sao ko thấy ai trả lời ta?

nguyenducdktd13 31-10-2012 11:42 AM

Trích:

Nguyên văn bởi binhcddt09b (Post 60727)
em có code này viết cho cảm biến siêu âm,nhưng giá trị đọc về từ cảm biến nó chỉ giữ nguyên chứ ko chuyển đổi j khi em di chuyển cảm biến, các bác giúp em sử nó với.mà mỗi đoạn code em coi thì nó lại có một cách chia giá trị khác nhau,em ko biết nên chia ntn nên em lấy trong datasheet luôn.
#include <16f887.h>
#FUSES,nowdt,noprotect,nolvp,put
#use delay(clock=20000000)
#use fast_io(a)
#use fast_io(b)
#use fast_io(c)
#use fast_io(d)
#use fast_io(e)
#byte porta=0x5
#byte portc=0x7
#byte portd=0x8
#byte portb=0x6
#byte porte=0x9
#bit c3=portc.3
#include <lcd.c>
float kc=0;

#INT_CCP1
void ccp1_isr()
{
set_timer1(0); //Cai gia tri cho Timer1
setup_ccp1(CCP_CAPTURE_FE); //chuyen sang do canh xuong
kc=(get_timer1())/58;

}

void hienthi(int16 )
{
lcd_gotoxy(1,1);
printf(lcd_putc,"CACH VAT:%f",kc);
lcd_gotoxy(14,1);
Printf(LCD_putc,"cm");
lcd_gotoxy(2,2);
lcd_putc("ROBOT TU HANH");
delay_ms(30);
}
void main()
{
LCD_init();
setup_timer_1(T1_INTERNAL|T1_DIV_BY_2);
setup_ccp1(CCP_CAPTURE_RE);
enable_interrupts(INT_CCP1); // Cho phép ng?t khi CCP1 có tín hi?u
enable_interrupts(GLOBAL);
//---hien thi LCD---

while(TRUE) {
set_tris_c(0x04);
c3 = 1; //trigger
delay_us(10);
c3 = 0;
hienthi(kc);
delay_ms(50);
}
}

cho cai code nay toi lam mach chay on hien thi ra led7seg


//nguyen van duc
//KS tu dong hoa
//cong thuc tinh thoi gian T= (65536-VALUE)*(4/Fosc)*P

#include <16F877A.h>
#include <def_877a.h>
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT,NOLVP, NOCPD, NOWRT
#use delay(clock=20000000)
#use fast_io(d)//Dùng cái này thì trong chu+o+ng trình khi dùng các le^.nh io nhu+ output_low() , . . . nó se~ set chi? vo+'i 1 le^.nh ,
#use fast_io(b)
#use fast_io(a)
int16 thoigiantruyen,CCP1value;
int16 CCP1Oldvalue;
BOOLEAN CCP1Captured;
int8 hangdonvi,hangchuc,hangtram;
int16 ketqua;
int8 i,k;

#INT_CCP1
void ngat_ccp1()
{
set_timer1(0);
}

#INT_CCP2
void ngat_ccp2()
{
CCP1Value =CCP_2;
CCP_2=0;
CCP1Captured = TRUE;
//j=0;
}
#INT_TIMER0
void interrup_timer0()
{i++;
set_timer0(8);
if(i==5){
output_d(hangtram);
output_high(pin_d5);
}
if(i==10){
output_d(hangchuc);
output_high(pin_d6);}
if(i==15){
output_d(hangdonvi);
output_high(pin_d7);}
if(i>=16){i=0;}
}
void triger()
{
output_high(PIN_A0);
delay_us(12);
output_low(PIN_A0);
}
void init_ccp()
{
setup_ccp1(CCP_capture_RE);//do xung canh len R
setup_ccp2(CCP_capture_FE);
setup_timer_1(T1_INTERNAL|T1_DIV_BY_4); //tang mot gia tri timer1 mat 4/5uS
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_32);
CCP1value=0;
CCP1Oldvalue=0;
CCP1Captured=TRUE;
enable_interrupts(INT_CCP1);
enable_interrupts(INT_CCP2);
enable_interrupts(INT_TIMER0);
enable_interrupts(GLOBAL);
}
void Main()
{
init_ccp();
set_tris_d(0x00);
set_tris_b(0x00);
set_tris_c(0xff); //ff xac lap cac chan port C la chan input
set_tris_a(0x00);
set_timer0(8);
while(true){
delay_ms(100);
triger();
if(CCP1Captured){
thoigiantruyen=CCP1value*0.8;
ketqua=thoigiantruyen/58;
CCP1Captured=FALSE;

if(ketqua>999){hangdonvi=0;hangchuc=0;hangtram=0;}
else{
hangdonvi=ketqua%10;
hangchuc=(ketqua/10)%10;
hangtram=(ketqua/100);
}

}

if(ketqua<175){output_high(PIN_A1);
delay_ms(500);
k=0;}
k++;
if(k>=5){
output_low(PIN_A1);
delay_ms(500);
k=0;
}
}
}


Múi giờ GMT. Hiện tại là 01:15 AM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam