89S52與ADC0804 輸入電壓失真問題 |
尚未結案
|
ctmos
一般會員 發表:1 回覆:1 積分:0 註冊:2013-07-04 發送簡訊給我 |
各位先進大大們,
小弟目前做專題,遇到一些問題,想請教各位大大 使用的編譯器是keil uVision4 我利用C語言寫if else的範圍判斷式,利用DAQ card 同時輸入兩個電壓值進入ADC0804 ,經過範圍判斷式後,將結果表現為LED輸出 但是現在,假設我輸入值是3.5V 顯示的燈 卻會是4~4.5V才會亮的燈,請問失真的原因是硬體的問題還是程式的問題? 請各位前輩們幫幫忙!! 電路圖,如附件所示~ 程式碼如下: #include #define WR P1_7 #define INTR P1_6 #define ADC P3 #define WR2 P1_5 #define INTR2 P1_4 #define ADC2 P2 main() { while(1) WR2=0; WR=1; { WR2=0; while(INTR2==1); if((26<=ADC && ADC<53) && (26<=ADC2 && ADC2<53)) else if((53<=ADC && ADC<77) && (53<=ADC2 && ADC2<77)) else if((77<=ADC && ADC<102) && (77<=ADC2 && ADC2<102)) else if((102<=ADC && ADC<128) && (102<=ADC2 && ADC2<128)) else if((128<=ADC && ADC<153) && (128<=ADC2 && ADC2<153)) else if((153<=ADC && ADC<186) && (153<=ADC2 && ADC2<186)) else if((186<=ADC && ADC<204) && (186<=ADC2 && ADC2<204)) else if((204<=ADC && ADC<230) && (204<=ADC2 && ADC2<230)) else {P0= 0x00;} } } } |
kib72377
高階會員 發表:1 回覆:217 積分:238 註冊:2004-11-12 發送簡訊給我 |
你的程式邏輯有問題.
你希望什麼條件做什麼動作 說清楚先. if((26<=ADC && ADC<53) && (26<=ADC2 && ADC2<53)) 像這樣頻繁操作ADC是很容易出問題的. (因為光這一式,adc的值你就撈了2次,adc2也是2次,誰知道這2次的值會不會變?連後面的一串加起來十幾次,等於拿十幾次的亂數在作比較阿..) 先設2個臨時變數x,y來儲存 adc,adc2的值,然後再拿x,y去做比較... |
ctmos
一般會員 發表:1 回覆:1 積分:0 註冊:2013-07-04 發送簡訊給我 |
感謝前輩的回答,前輩您好,
目前我利用ADLINK的DAQ card 結合 labview程式 定值輸出兩個電壓值,在經由兩顆ADC 輸入至89S52當中,透過上述所撰寫的程式,讓89s52完成我所指定的亮燈 假設我輸入兩個都是0.5V(換算後為26)~小於1V(換算後為53)範圍的電壓值,我希望他是能夠亮0x7f這個LED燈 依此列推下去,做到4~4.5V範圍的電壓值,他能亮0Xfe這個LED燈~ 之後的每一個範圍亮燈,都無法如我設定的值那樣跑,最大就是輸入兩個都是3.5V 則會亮4~4.5V範圍的這個0XfeLED燈 之後輸入3.6、3.7.....4,5V的電壓值, LED燈都沒有反應,請問會造成這樣失真的原因是哪個地方出問題了呢? 希望各位前輩能夠指點迷津,謝謝!! |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |