亚洲春色中文字幕久久久-三上亚,91精品国产亚一区二区三区,久久久九色综合亚洲成色777,涩涩视频下载,国产午夜亚洲精品午夜鲁丝片,国产精品A一区二区三区腾讯导航,影音先锋色情AV在线看片,蜜臀国产在线视频,极品少妇高潮啪啪无码吴梦梦 ,精品人妻无码一区二区三区手机版

標題: ADC0832調試問題求解,單片機讀取不到數據 [打印本頁]

作者: cfxiaobai    時間: 2021-10-31 01:01
標題: ADC0832調試問題求解,單片機讀取不到數據
做了一個讀取ph值,光照強度,土壤濕度的單片機
需要用到2個0832,第一個沒問題,可以正常用,第二個死活讀取不到數據。。
0832確認沒有問題,放在其他單片機上可以正常跑。
電路反復確認了好多次,應該也沒有接錯(焊工非常渣,見諒。)

實在找不到原因了,發(fā)帖求助一下。。希望各位大佬可以幫忙找找原因T.T


2.png (34.62 KB, 下載次數: 64)

2.png

作者: stycx    時間: 2021-10-31 09:19
你現在有兩個同樣的ADC0832,調試起來就簡單了,可以用替換法,交換兩個ADC0832看看什么情況。

還有,這種單片機系統(tǒng)的問題有可能出現在硬件連接或程序代碼,最好同時發(fā)代碼,電路連接,硬件照片,方便大家?guī)湍闩挪閱栴}。
作者: wulin    時間: 2021-10-31 12:17
既然電路反復確認了好多次沒有問題那只能是代碼問題。
作者: 188610329    時間: 2021-10-31 14:49
你說,你要用到2塊, 但是,看你CH卻只接了一個,實在不明白,為什么不只用一塊?

另外,你說讀不到數據,實際上是不可能的,這種串型數據傳輸方案,你給了時鐘然后讀,要么讀到0,要么讀到1,不存在讀不到這個情況。所以,描述問題要客觀,不要主觀,憑自己的猜想描述,如果你能主觀的分析出問題,也就不用上來問了。

如果你確認幾次都找不到問題,那么你先不要把DI,DO連一起,雖然兩個口是異步工作,但是不排除會產生干擾。不然和DS1302一樣,做成一個IO就完了,為什么要做成兩個呢?
作者: cfxiaobai    時間: 2021-10-31 19:01
本帖最后由 cfxiaobai 于 2021-10-31 19:09 編輯

T.T還沒有編輯好,本來以為發(fā)的是草稿的。
首先兩個0832互換,第一個可以正常用,第二個不能用,排除0832硬件問題
用到兩個0832是因為需要3個采集模塊,第一個0832的ch已經接滿了,而且是可以正常讀取到值的。。

第二個0832,cs接的單片機P0^3口,clk是P0^4,DI DO確實是連在一起的,接在了P0^5口(晚點我試試分開接有沒有效果)
程序方面,用的是和第一個0832一樣的程序,修改了聲明的io口,改成了對應io口,電路用萬用表測量,沒有短路,沒有虛焊,可以正常和單片機通訊。

最后,感謝各位大佬的耐心解答!
作者: cfxiaobai    時間: 2021-10-31 19:06
然后還有一個奇怪的問題,換一個不同的0832,有的讀出來的是254,有的讀出來的是0,采集模塊確實會給CH0返回不同的電壓,但是0832讀出來的數是一直不變的。。(只有1個0832讀出來是254,其他的0832讀出來的都是0)
作者: cfxiaobai    時間: 2021-10-31 19:09
另外附上0832的代碼io我確認沒有接錯,0832也的vcc與gnd和ch0也都接上了
adc0832這個子程序對應的是第一個0832可以正常讀取ch0和ch1的數據
adc0832_這個對應的是第二個0832反復嘗試都讀取不到數據T.T
  1. //ad的控 制口
  2. sbit  cs   = P3 ^ 5;         //片選
  3. sbit  date = P3 ^ 4;         //數據口
  4. sbit  clk  = P3 ^ 3;         //數據口

  5. sbit  cs_   = P0 ^ 3;         //片選
  6. sbit  date_ = P0 ^ 5;         //數據口
  7. sbit  clk_  = P0 ^ 4;         //數據口
  8. //////////==========ad轉換  返回ad的采樣數值=========////////////
  9. uchar adc0832(bit channel)
  10. {
  11.     uchar i, temp;

  12.     clk = 0;

  13.     cs = 0;                 //選中ad芯片

  14.     clk = 0;
  15.     date = 1; //發(fā)送bit 1 規(guī)定啟動信號
  16. //DIN=1;
  17.     clk = 1; //第一個一個上升沿 規(guī)定啟動信號

  18.     clk = 0;
  19.     date = 1; //單通道入 倆個控制位  10 為 通道  0  11為通道1      多通道差分出入  00為 0+ 1-          01 為0- 1+          這里選擇10 只有通道0輸入
  20. //DIN=1;

  21.     clk = 1; //第二一個上升沿 設置為通道

  22.     clk = 0;
  23. //        DIN=0;
  24.     date = channel; //0;//
  25.     clk = 1; //第三一個上升沿 設置通道0

  26.     clk = 0;                         //第一個下降沿數據沒有輸出
  27.     date = 1;                         //置一端口,設置51的io口為輸入
  28.     clk = 1;
  29. //數據從頭到尾輸出
  30.     for(i = 8; i > 0; i--)
  31.     {

  32.         clk = 1;                         //        準備數據輸出

  33.         clk = 0;                //下降沿出數據
  34. //穩(wěn)定一下在讀取數據
  35.         //           temp|=date;
  36.         if(date)
  37.             temp++;
  38.         temp <<= 1;
  39.     }
  40. //數據從尾到頭輸出
  41. //        for(i=8;i>0;i--){

  42. //                   clk =1;                         //        準備數據輸出
  43. //                   clk =0;                 //下降沿出數據
  44. //        }
  45.     cs = 1;                 //釋放芯片
  46.     return temp;  //返回讀回來的數值
  47. }



  48. uchar adc0832_(bit channel)
  49. {
  50.     uchar i, temp;

  51.     clk_ = 0;

  52.     cs_ = 0;                 //選中ad芯片

  53.     clk_ = 0;
  54.     date_ = 1; //發(fā)送bit 1 規(guī)定啟動信號
  55. //DIN=1;
  56.     clk_ = 1; //第一個一個上升沿 規(guī)定啟動信號

  57.     clk_ = 0;
  58.     date_ = 1; //單通道入 倆個控制位  10 為 通道  0  11為通道1      多通道差分出入  00為 0+ 1-          01 為0- 1+          這里選擇10 只有通道0輸入
  59. //DIN=1;

  60.     clk_ = 1; //第二一個上升沿 設置為通道

  61.     clk_ = 0;
  62. //        DIN=0;
  63.     date_ = channel; //0;//
  64.     clk_ = 1; //第三一個上升沿 設置通道0

  65.     clk_ = 0;                         //第一個下降沿數據沒有輸出
  66.     date_ = 1;                         //置一端口,設置51的io口為輸入
  67.     clk_ = 1;
  68. //數據從頭到尾輸出
  69.     for(i = 8; i > 0; i--)
  70.     {

  71.         clk_ = 1;                         //        準備數據輸出

  72.         clk_ = 0;                //下降沿出數據
  73. //穩(wěn)定一下在讀取數據
  74.         //           temp|=date_;
  75.         if(date_)
  76.             temp++;
  77.         temp <<= 1;
  78.     }
  79. //數據從尾到頭輸出
  80. //        for(i=8;i>0;i--){

  81. //                   clk_ =1;                         //        準備數據輸出
  82. //                   clk_ =0;                 //下降沿出數據
  83. //        }
  84.     cs_ = 1;                 //釋放芯片
  85.     return temp;  //返回讀回來的數值
  86. }
復制代碼




作者: cfxiaobai    時間: 2021-10-31 19:48
好像回復的太快了。。被吞了好多我的回復T.T
DI,DO口分開,解決了某些0832會讀出來254的問題。。讀數已經全變成0了。。

然后,拿了另一塊使用了0832的板子,用跳線飛過去,可以正常使用,確認 硬件以及傳感器的電路部分正常使用。

問題應該出在單片機引腳 或者 程序上面了。
引腳方面,0832對單片機的引腳有要求嗎。。(連的是P0^3、P0^4、P0^5這三個引腳)

程序方面,3個0832使用的是同一套程序,修改了程序中定義的引腳,應該不會出現問題T.T
晚一些我嘗試一下更換到其他引腳(目前嘗試過P0^0 — P0^7都不行T.T)
作者: cfxiaobai    時間: 2021-10-31 20:11
本帖最后由 cfxiaobai 于 2021-10-31 20:13 編輯

確定了是io口的問題T.T
沒想到研究了好幾天最后發(fā)現是因為這個

對于P0來說,輸出需要接上拉電阻才能正常輸出。


感謝樓上各位大佬的回答,再次感謝!


作者: cfxiaobai    時間: 2021-10-31 20:15
emmm編輯回復好像會造成回復被吞掉(也有可能是還在審核...)
最后找到了原因是因為0832接到了P0口的原因(T.T)
對于P0來說,輸出需要接上拉電阻才能正常輸出。


感謝樓上各位大佬的回復,再次感謝!
作者: biyuntao    時間: 2025-10-11 22:28
有沒有人幫我看看呢,為什么采集到的數據只有一個數據,幫我看看是哪里出了問題,是軟件還是硬件

IMG_20251011_220844.jpg (739.17 KB, 下載次數: 0)

IMG_20251011_220844.jpg

IMG_20251011_220831.jpg (593.16 KB, 下載次數: 0)

IMG_20251011_220831.jpg

IMG_20251011_220828.jpg (649.87 KB, 下載次數: 0)

IMG_20251011_220828.jpg

IMG_20251011_220819.jpg (602.49 KB, 下載次數: 0)

IMG_20251011_220819.jpg





歡迎光臨 (http://www.denmoz.com/bbs/) Powered by Discuz! X3.1