|
Tài trợ cho PIC Vietnam |
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 |
17-01-2013, 07:33 PM | #2 |
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. thay đổi nội dung bởi: phamhang, 17-01-2013 lúc 07:39 PM. Lý do: thiếu |
|
|