線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:8472
推到 Plurk!
推到 Facebook!
[<<] [1] [2] [>>]

8051 溫度感測器的問題

答題得分者是:aki
hanah77h12
一般會員


發表:12
回覆:39
積分:10
註冊:2011-10-01

發送簡訊給我
#32 引用回覆 回覆 發表時間:2011-11-14 18:17:47 IP:114.41.xxx.xxx 訂閱
我接好電路後  他一直顯示 U U 電路確定沒有問題  這程式 好像也沒捨麼問題耶..
===================引 用 aki 文 章===================
轉貼以前一位網友的問題,有一些Code請參考!

/*

震盪器使用12MHz
目前狀況是
顯示器一直顯示固定值55
請各位幫幫忙
指點指點
感激不盡



*/
//目的使DS1821讀取的溫度值 顯示在七段顯示器上
//目前程式如下
#include
#include
#define SCANP P0
#define SEG7P P1
sbit DQ=P3^7;
sbit DQOut=P3^7;
sbit DQIn=P3^7;
char code TAB[10]={0x10,0xf6,0x0a,0x42,0xe4,0x41,0x01,0xf0,0x00,0x40};
unsigned char disp[2]={0,0};

void TemperatureRead(void);
void ds1821_reset(void);
void ds1821_WrByte(unsigned char);
void ds1821_RdByte(void);
void dataproc(unsigned char);
void display(void);
void delay_ms(char);
void delay_us(char);
#define uint unsigned int
#define uchar unsigned char
uchar temperature;
bit BTemp;

main()
{
while(1)
{
TemperatureRead();
}
}

void ds1821_reset(void)
{
if(DQOut==1)
{
_nop_();
DQOut=0;
delay_us(58);
DQOut=1;
}
else
{
DQOut=1;
_nop_();
DQOut=0;
delay_us(58);
DQOut=1;
}
delay_us(58);
}
void TemperatureRead(void)
{
ds1821_reset();
ds1821_WrByte(0xEE);
ds1821_reset();
ds1821_WrByte(0xAA);
ds1821_RdByte();
dataproc(temperature);
display();
}
void ds1821_WrByte(uchar dat)
{
uchar i;
for(i=0;i<8;i )
{
BTemp=dat&0x01;
dat=dat>>1;
if((BTemp)==0)
{
DQOut=0;
delay_us(8);
DQOut=1;
}
else
{
DQOut=0;
_nop_();
DQOut=1;
delay_us(8);
}
}
}
void ds1821_RdByte(void)
{
uchar temp,dat,i;
for(i=0;i<8;i )
{
DQOut=0;
_nop_();
DQOut=1;
_nop_();
_nop_();
_nop_();
_nop_();
temp=DQIn;
dat=(temp<<7|dat>>1);
delay_us(8);
}
temperature=dat;
}
void dataproc(uchar data_in)
{
uchar results;
results=data_in;
disp[1]=(results/10);
disp[0]=results;
}
void display(void)
{
char i,scan,k;
{
for(k=0;k<10;k )
{
for(i=0;i<2;i )
{
if( i==0)
{
scan=0xfe;
}
else
{
scan=0xfd;
}
SCANP=scan;
SEG7P=TAB[disp[i]];
delay_ms(4);
}
}
}
}

void delay_ms(char x)
{
int i,j;
for(i=0;i
void delay_us(char x)
{
int i,j;
for(i=0;i




hanah77h12
一般會員


發表:12
回覆:39
積分:10
註冊:2011-10-01

發送簡訊給我
#33 引用回覆 回覆 發表時間:2011-11-14 18:55:55 IP:114.41.xxx.xxx 訂閱
請問  我電路接出來  按照這個程式打  他一直顯示UU  請問  這程式錯在哪裡  我看好像都沒錯耶..


===================引 用 aki 文 章===================
轉貼以前一位網友的問題,有一些Code請參考!

/*

震盪器使用12MHz
目前狀況是
顯示器一直顯示固定值55
請各位幫幫忙
指點指點
感激不盡



*/
//目的使DS1821讀取的溫度值 顯示在七段顯示器上
//目前程式如下
#include
#include
#define SCANP P0
#define SEG7P P1
sbit DQ=P3^7;
sbit DQOut=P3^7;
sbit DQIn=P3^7;
char code TAB[10]={0x10,0xf6,0x0a,0x42,0xe4,0x41,0x01,0xf0,0x00,0x40};
unsigned char disp[2]={0,0};

void TemperatureRead(void);
void ds1821_reset(void);
void ds1821_WrByte(unsigned char);
void ds1821_RdByte(void);
void dataproc(unsigned char);
void display(void);
void delay_ms(char);
void delay_us(char);
#define uint unsigned int
#define uchar unsigned char
uchar temperature;
bit BTemp;

main()
{
while(1)
{
TemperatureRead();
}
}

void ds1821_reset(void)
{
if(DQOut==1)
{
_nop_();
DQOut=0;
delay_us(58);
DQOut=1;
}
else
{
DQOut=1;
_nop_();
DQOut=0;
delay_us(58);
DQOut=1;
}
delay_us(58);
}
void TemperatureRead(void)
{
ds1821_reset();
ds1821_WrByte(0xEE);
ds1821_reset();
ds1821_WrByte(0xAA);
ds1821_RdByte();
dataproc(temperature);
display();
}
void ds1821_WrByte(uchar dat)
{
uchar i;
for(i=0;i<8;i )
{
BTemp=dat&0x01;
dat=dat>>1;
if((BTemp)==0)
{
DQOut=0;
delay_us(8);
DQOut=1;
}
else
{
DQOut=0;
_nop_();
DQOut=1;
delay_us(8);
}
}
}
void ds1821_RdByte(void)
{
uchar temp,dat,i;
for(i=0;i<8;i )
{
DQOut=0;
_nop_();
DQOut=1;
_nop_();
_nop_();
_nop_();
_nop_();
temp=DQIn;
dat=(temp<<7|dat>>1);
delay_us(8);
}
temperature=dat;
}
void dataproc(uchar data_in)
{
uchar results;
results=data_in;
disp[1]=(results/10);
disp[0]=results;
}
void display(void)
{
char i,scan,k;
{
for(k=0;k<10;k )
{
for(i=0;i<2;i )
{
if( i==0)
{
scan=0xfe;
}
else
{
scan=0xfd;
}
SCANP=scan;
SEG7P=TAB[disp[i]];
delay_ms(4);
}
}
}
}

void delay_ms(char x)
{
int i,j;
for(i=0;i
void delay_us(char x)
{
int i,j;
for(i=0;i




ScottWang
版主


發表:32
回覆:486
積分:688
註冊:2009-04-27

發送簡訊給我
#34 引用回覆 回覆 發表時間:2011-11-14 19:21:20 IP:218.161.xxx.xxx 訂閱
若是正常時顯示00,而現在顯示UU,你要去檢查LED a字節,還有MCU Port 1的腳P1.0之間的線路.
若是有LED整個不亮的話,就去檢查相對的電晶體的線路,看看是否線路沒接.
------
高壓直流電源供應器,高壓模組,測試LED專用AC LED定電流源,全範圍可調電壓電流,
中低壓直流電源供應器,電壓放大器,電流放大器,帶通濾波器,高精度參考電壓,
標準電壓,恆流源(定電流源),恆壓源(定電壓源),大電流電源供應器.
接受訂製,設計生產各種特殊規格,高精度產品,學校實驗室,研究單位實驗設備,
另可接受其它電子專案設計,HV Power,Vmax=20KV,Imax=2000A.
http://hvpower.myweb.hinet.net/
hanah77h12
一般會員


發表:12
回覆:39
積分:10
註冊:2011-10-01

發送簡訊給我
#35 引用回覆 回覆 發表時間:2011-11-15 02:54:41 IP:118.170.xxx.xxx 訂閱
剛剛仔細的看完  都沒有問題耶...

假設 真的有可能....8051這一顆..她會只燒壞一隻接腳嗎...


===================引 用 ScottWang 文 章===================
若是正常時顯示00,而現在顯示UU,你要去檢查LED a字節,還有MCU Port 1的腳P1.0之間的線路.
若是有LED整個不亮的話,就去檢查相對的電晶體的線路,看看是否線路沒接.
ScottWang
版主


發表:32
回覆:486
積分:688
註冊:2009-04-27

發送簡訊給我
#36 引用回覆 回覆 發表時間:2011-11-15 03:12:01 IP:218.161.xxx.xxx 訂閱
若有示波器的話,可以看看是否有波形.
若無示波器,可以用0.01uf或0.1uf電容,再接數位電表20Vac,或者指針表AC10V,看看指針是否有電壓.
------
高壓直流電源供應器,高壓模組,測試LED專用AC LED定電流源,全範圍可調電壓電流,
中低壓直流電源供應器,電壓放大器,電流放大器,帶通濾波器,高精度參考電壓,
標準電壓,恆流源(定電流源),恆壓源(定電壓源),大電流電源供應器.
接受訂製,設計生產各種特殊規格,高精度產品,學校實驗室,研究單位實驗設備,
另可接受其它電子專案設計,HV Power,Vmax=20KV,Imax=2000A.
http://hvpower.myweb.hinet.net/
hanah77h12
一般會員


發表:12
回覆:39
積分:10
註冊:2011-10-01

發送簡訊給我
#37 引用回覆 回覆 發表時間:2011-11-15 17:22:17 IP:118.170.xxx.xxx 訂閱
七段那邊顯示有問題 調過  可以了  但是現在又差在...一直顯示55..
===================引 用 ScottWang 文 章===================
若有示波器的話,可以看看是否有波形.
若無示波器,可以用0.01uf或0.1uf電容,再接數位電表20Vac,或者指針表AC10V,看看指針是否有電壓.
ScottWang
版主


發表:32
回覆:486
積分:688
註冊:2009-04-27

發送簡訊給我
#38 引用回覆 回覆 發表時間:2011-11-15 21:33:11 IP:218.161.xxx.xxx 訂閱
你如果是延用aki版主提供的程式碼,它開頭就有寫:
顯示器一直顯示固定值55...
所以你還是要去抓蟲,看是


===================引 用 hanah77h12 文 章===================
七段那邊顯示有問題 調過 可以了 但是現在又差在...一直顯示55..
------
高壓直流電源供應器,高壓模組,測試LED專用AC LED定電流源,全範圍可調電壓電流,
中低壓直流電源供應器,電壓放大器,電流放大器,帶通濾波器,高精度參考電壓,
標準電壓,恆流源(定電流源),恆壓源(定電壓源),大電流電源供應器.
接受訂製,設計生產各種特殊規格,高精度產品,學校實驗室,研究單位實驗設備,
另可接受其它電子專案設計,HV Power,Vmax=20KV,Imax=2000A.
http://hvpower.myweb.hinet.net/
hanah77h12
一般會員


發表:12
回覆:39
積分:10
註冊:2011-10-01

發送簡訊給我
#39 引用回覆 回覆 發表時間:2011-11-16 00:43:56 IP:114.46.xxx.xxx 訂閱
前輩!  看不太懂 可以解釋一下嗎@@
===================引 用 ScottWang 文 章===================
你如果是延用aki版主提供的程式碼,它開頭就有寫:
目前狀況是
顯示器一直顯示固定值55...
所以你還是要去抓蟲,看是ds1821的資料抓起錯誤,或者資料為AAH反相後的錯誤,或者送出資料時的I/O錯誤.

===================引 用 hanah77h12 文 章===================
七段那邊顯示有問題 調過 可以了 但是現在又差在...一直顯示55..
ScottWang
版主


發表:32
回覆:486
積分:688
註冊:2009-04-27

發送簡訊給我
#40 引用回覆 回覆 發表時間:2011-11-16 01:31:02 IP:218.161.xxx.xxx 訂閱
你看看以下的資料,再看看DS1821的datasheet.

DS1821FAQ集
DS1821使用說明

再去trace你的程式.

網路查尋 :
你可以用"ds1821 c 範例"找相關的資料.

===================引 用 hanah77h12 文 章===================
前輩! 看不太懂 可以解釋一下嗎@@
===================引 用 ScottWang 文 章===================
你如果是延用aki版主提供的程式碼,它開頭就有寫:
目前狀況是
顯示器一直顯示固定值55...
所以你還是要去抓蟲,看是ds1821的資料抓起錯誤,或者資料為AAH反相後的錯誤,或者送出資料時的I/O錯誤.

===================引 用 hanah77h12 文 章===================
七段那邊顯示有問題 調過 可以了 但是現在又差在...一直顯示55..
------
高壓直流電源供應器,高壓模組,測試LED專用AC LED定電流源,全範圍可調電壓電流,
中低壓直流電源供應器,電壓放大器,電流放大器,帶通濾波器,高精度參考電壓,
標準電壓,恆流源(定電流源),恆壓源(定電壓源),大電流電源供應器.
接受訂製,設計生產各種特殊規格,高精度產品,學校實驗室,研究單位實驗設備,
另可接受其它電子專案設計,HV Power,Vmax=20KV,Imax=2000A.
http://hvpower.myweb.hinet.net/
hanah77h12
一般會員


發表:12
回覆:39
積分:10
註冊:2011-10-01

發送簡訊給我
#41 引用回覆 回覆 發表時間:2011-11-18 17:27:08 IP:114.41.xxx.xxx 訂閱
請問前輩
KEIL C的 1微秒 怎麼寫...我只會寫1ms..網路也都只查到1ms

hanah77h12
一般會員


發表:12
回覆:39
積分:10
註冊:2011-10-01

發送簡訊給我
#42 引用回覆 回覆 發表時間:2011-11-18 22:31:32 IP:114.41.xxx.xxx 訂閱
終於會動了...

前輩謝謝

請問一下 我的 七段顯示器 他兩個亮度不一樣 這是為捨麼...
===================引 用 ScottWang 文 章===================
你看看以下的資料,再看看DS1821的datasheet.

DS1821FAQ集
DS1821使用說明

再去trace你的程式.

網路查尋 :
你可以用"ds1821 c 範例"找相關的資料.

===================引 用 hanah77h12 文 章===================
前輩! 看不太懂 可以解釋一下嗎@@
===================引 用 ScottWang 文 章===================
你如果是延用aki版主提供的程式碼,它開頭就有寫:
目前狀況是
顯示器一直顯示固定值55...
所以你還是要去抓蟲,看是ds1821的資料抓起錯誤,或者資料為AAH反相後的錯誤,或者送出資料時的I/O錯誤.

===================引 用 hanah77h12 文 章===================
七段那邊顯示有問題 調過 可以了 但是現在又差在...一直顯示55..
ScottWang
版主


發表:32
回覆:486
積分:688
註冊:2009-04-27

發送簡訊給我
#43 引用回覆 回覆 發表時間:2011-11-19 08:11:02 IP:218.161.xxx.xxx 訂閱
>KEIL C的 1微秒 怎麼寫...我只會寫1ms..網路也都只查到1ms
你是做什麼用,想寫delay嗎?
我沒寫過1uS,以前我用11.0592Mhz的,以asm送一個Hi一個Lo,做為方波,最快約153Khz=6.993uS=7uS.
其中還要再加jmp的時間.
------------------
Xtal用12Mhz 一個命令約1uS.
main:
setb P1.0 ;1us
clr P1.0 ;1us
jmp main ;2us
------------------
void delay_us(unsigned int us)
{
int a=(us)/13; //BY TRIAL
while(a--);
}
11.0592*2 MHZ
------------------
以上兩段asm和C來自以下的討論:
http://www.8051projects.net/forum-t27988.html
>請問一下 我的 七段顯示器 他兩個亮度不一樣 這是為捨麼...
亮度不同的幾個可能原因:
1. LED本身的差異性.
2. 電晶體的hfe差距.
3. B極電阻看看是否相同.
4. 兩個位數的Port 0 bit掃描時間是否相同.
*注意顯示相同數字時亮度是否相同.
你把解決顯示55的地方,稍為說明一下,以供他人參考.
------
高壓直流電源供應器,高壓模組,測試LED專用AC LED定電流源,全範圍可調電壓電流,
中低壓直流電源供應器,電壓放大器,電流放大器,帶通濾波器,高精度參考電壓,
標準電壓,恆流源(定電流源),恆壓源(定電壓源),大電流電源供應器.
接受訂製,設計生產各種特殊規格,高精度產品,學校實驗室,研究單位實驗設備,
另可接受其它電子專案設計,HV Power,Vmax=20KV,Imax=2000A.
http://hvpower.myweb.hinet.net/
hanah77h12
一般會員


發表:12
回覆:39
積分:10
註冊:2011-10-01

發送簡訊給我
#44 引用回覆 回覆 發表時間:2011-11-20 12:38:19 IP:122.118.xxx.xxx 訂閱
我的七段  它顯示亮度不一樣  他兩個Port輸出  一個在4V  一個在0.多V 也不知道是啥原因..應該又是掃描出問題吧 掃描時間好像不一樣 我再找看看


你把解決顯示55的地方,稍為說明一下,以供他人參考.

找很久 就是他DELAY傳輸出了問題 他要我在480uS把8 bit 傳輸過去 之前那個問題出在 他的1us不是真的1us 而是10us 所以他叫延遲叫了60次 不是60us而是600us 所以他才一直接收不到 我就徒法煉鋼...用_nop_(); ...不知道有沒有比較好的方法
[<<] [1] [2] [>>]
系統時間:2024-05-08 13:01:37
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!