PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > dsPIC - Bộ điều khiển tín hiệu số 16-bit

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

dsPIC - Bộ điều khiển tín hiệu số 16-bit Theo dự kiến của Microchip, vào khoảng năm 2011 dsPIC sẽ có doanh số lớn hơn PIC

 
 
Ðiều Chỉnh Xếp Bài
Prev Previous Post   Next Post Next
Old 17-01-2013, 07:33 PM   #2
phamhang
Nhập môn đệ tử
 
Tham gia ngày: Dec 2011
Bài gửi: 8
:
kiểm tra giúp code Dspic33f + DS18B20 + LCD

Các bác giúp em với. Bây giờ thì em đã trả lời dc câu hỏi trên của em rồi. nhưng không hiểu sao chương trình của em vẫn không hiển thị được nhiệt độ lên LCD. LCD chỉ hiển thị là 0000 thôi. em up chương trình đo và đọc nhiệt độ lên các bác kiểm tra giúp em với. Em loay hoay với con này lâu quá rồi .
Chip em dùng là dspic33f.
Em cấu hình Tần số hoạt động của chíp là Fosc = 40MPs.
Chân DQ của cảm biến em kết nối với chân RB2 của DSpic.
DS18B20 em dùng nguồn 3.3v, chân DQ có điện trở kéo 4.7k lên nguồn 3.3v.

Chương trình đo nhiệt độ của em :
//------ham tao tre 1us (khi PR1=40)-------------------------------------------
void Delay_us(unsigned long time)
{ PMD1bits.T1MD = 0; // Enable Timer1 module
T1CONbits.TON = 0; // Disable Timer
T1CONbits.TCS = 0; // Select Internal Clock for Timer1
T1CONbits.TGATE = 0; // Disable Gated Timer Mode
T1CONbits.TCKPS = 0b00; // Set Timer1 Prescaler = 1:1
TMR1 = 0; // Reset timer to 0
PR1 = time; // Timer1 period set
IFS0bits.T1IF = 0; // Clears Timer 1 interupt flag
IEC0bits.T1IE = 0; // Disable timer 1 interupts
T1CONbits.TON = 1; // Starts timer
while(IFS0bits.T1IF==0); // While the interupt flag is not set
IFS0bits.T1IF = 0;
T1CONbits.TON = 0; // Stop timer
// LED2=0;
}

//================================================== ====
char Reset()
{
DQ=0; // DQ is output
LATBbits.LATB2=0; // DQ to low
Delay_us(20000);// delay 500us
DQ=1; // QD is input
Delay_us(2400); //delay 60us
if(PORTBbits.RB2==0) // if there is a presence pule
{
Delay_us(20000); // delay 500us
return 0;
}
else
{
Delay_us(20000); // delay 500us
return 1;
}
}
//================================================== ====

void Write_DS18B20(unsigned char CMD)
{
char i;
DQ=1; // DQ is input
for (i=0; i<8; i++)
{
if ((CMD&(1<<i))!=0)
{ // wirte 1
DQ=0; // DQ is output
LATBbits.LATB2=0;
Delay_us(100);// delay 2us
DQ=1; // DQ is input
Delay_us(2400); // Delay 60us
}
else
{ // wirte 0
DQ=0; // DQ is output
LATBbits.LATB2=0;
Delay_us(2400); // Delay 60us
DQ=1; // DQ is input
}
}
}
//================================================== ====
char Read_DS18B20()
{
char i,result=0;
DQ=1; // QD is input
for(i=0;i<8;i++)
{
DQ=0; // DQ is output
LATBbits.LATB2=0;
Delay_us(80); // delay 2us
DQ=1; // DQ is input
if(LATBbits.LATB2!=0)
result |=1<<i;
Delay_us(2400); // Delay 60us
}
return result;

}
//=====chuong trinh doc nhiet do===================================
void nhiet_do()
{
if(Reset()==0)
{
Write_DS18B20(Skip_Rom);
Write_DS18B20(Convert_T);
Delay_us(40000); // Delay 1ms
Reset();

Write_DS18B20(Skip_Rom );
Write_DS18B20(Read_Scratchpad);
a=Read_DS18B20();

b=Read_DS18B20();
temp = (a >> 4) | (b << 4);
temp=((int)(temp)); // hiển thị nhiệt độ lên LCD dưới dạng số nguyên

}
}



Chương trình đầy đủ ở trong file đính kèm . Các bác cố gắng giúp em với. em cảm ơn rất nhiều.
File Kèm Theo
File Type: rar ds18b.rar (84.0 KB, 9 lần tải)

thay đổi nội dung bởi: phamhang, 17-01-2013 lúc 07:39 PM. Lý do: thiếu
phamhang vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
 


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


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


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam