8051 溫度感測器的問題 |
答題得分者是:aki
|
hanah77h12
一般會員 發表:12 回覆:39 積分:10 註冊:2011-10-01 發送簡訊給我 |
我接好電路後 他一直顯示 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 發送簡訊給我 |
請問 我電路接出來 按照這個程式打 他一直顯示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 發送簡訊給我 |
若是正常時顯示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 發送簡訊給我 |
|
ScottWang
版主 發表:32 回覆:486 積分:688 註冊:2009-04-27 發送簡訊給我 |
若有示波器的話,可以看看是否有波形.
若無示波器,可以用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 發送簡訊給我 |
|
ScottWang
版主 發表:32 回覆:486 積分:688 註冊:2009-04-27 發送簡訊給我 |
你如果是延用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 發送簡訊給我 |
前輩! 看不太懂 可以解釋一下嗎@@
===================引 用 ScottWang 文 章=================== 你如果是延用aki版主提供的程式碼,它開頭就有寫: 目前狀況是 顯示器一直顯示固定值55... 所以你還是要去抓蟲,看是ds1821的資料抓起錯誤,或者資料為AAH反相後的錯誤,或者送出資料時的I/O錯誤. ===================引 用 hanah77h12 文 章=================== 七段那邊顯示有問題 調過 可以了 但是現在又差在...一直顯示55.. |
ScottWang
版主 發表:32 回覆:486 積分:688 註冊:2009-04-27 發送簡訊給我 |
你看看以下的資料,再看看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 發送簡訊給我 |
|
hanah77h12
一般會員 發表:12 回覆:39 積分:10 註冊:2011-10-01 發送簡訊給我 |
終於會動了...
前輩謝謝 請問一下 我的 七段顯示器 他兩個亮度不一樣 這是為捨麼... ===================引 用 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 發送簡訊給我 |
>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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |