久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3377|回復: 9
收起左側

ADC0832調試問題求解,單片機讀取不到數據

[復制鏈接]
ID:946216 發表于 2021-10-31 01:01 | 顯示全部樓層 |閱讀模式
做了一個讀取ph值,光照強度,土壤濕度的單片機
需要用到2個0832,第一個沒問題,可以正常用,第二個死活讀取不到數據。。
0832確認沒有問題,放在其他單片機上可以正常跑。
電路反復確認了好多次,應該也沒有接錯(焊工非常渣,見諒。)

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


2.png
回復

使用道具 舉報

ID:973695 發表于 2021-10-31 09:19 | 顯示全部樓層
你現在有兩個同樣的ADC0832,調試起來就簡單了,可以用替換法,交換兩個ADC0832看看什么情況。

還有,這種單片機系統的問題有可能出現在硬件連接或程序代碼,最好同時發代碼,電路連接,硬件照片,方便大家幫你排查問題。
回復

使用道具 舉報

ID:213173 發表于 2021-10-31 12:17 | 顯示全部樓層
既然電路反復確認了好多次沒有問題那只能是代碼問題。
回復

使用道具 舉報

ID:624769 發表于 2021-10-31 14:49 | 顯示全部樓層
你說,你要用到2塊, 但是,看你CH卻只接了一個,實在不明白,為什么不只用一塊?

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

如果你確認幾次都找不到問題,那么你先不要把DI,DO連一起,雖然兩個口是異步工作,但是不排除會產生干擾。不然和DS1302一樣,做成一個IO就完了,為什么要做成兩個呢?
回復

使用道具 舉報

ID:946216 發表于 2021-10-31 19:01 | 顯示全部樓層
本帖最后由 cfxiaobai 于 2021-10-31 19:09 編輯

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

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

最后,感謝各位大佬的耐心解答!
回復

使用道具 舉報

ID:946216 發表于 2021-10-31 19:06 | 顯示全部樓層
然后還有一個奇怪的問題,換一個不同的0832,有的讀出來的是254,有的讀出來的是0,采集模塊確實會給CH0返回不同的電壓,但是0832讀出來的數是一直不變的。。(只有1個0832讀出來是254,其他的0832讀出來的都是0)
回復

使用道具 舉報

ID:946216 發表于 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; //發送bit 1 規定啟動信號
  16. //DIN=1;
  17.     clk = 1; //第一個一個上升沿 規定啟動信號

  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. //穩定一下在讀取數據
  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; //發送bit 1 規定啟動信號
  55. //DIN=1;
  56.     clk_ = 1; //第一個一個上升沿 規定啟動信號

  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. //穩定一下在讀取數據
  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. }
復制代碼



回復

使用道具 舉報

ID:946216 發表于 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)
回復

使用道具 舉報

ID:946216 發表于 2021-10-31 20:11 | 顯示全部樓層
本帖最后由 cfxiaobai 于 2021-10-31 20:13 編輯

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

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


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

回復

使用道具 舉報

ID:946216 發表于 2021-10-31 20:15 | 顯示全部樓層
emmm編輯回復好像會造成回復被吞掉(也有可能是還在審核...)
最后找到了原因是因為0832接到了P0口的原因(T.T)
對于P0來說,輸出需要接上拉電阻才能正常輸出。


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

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 在线播放一区二区三区 | 精品一区二区三区不卡 | 久久久久一区 | 亚洲毛片在线观看 | 91精品国产综合久久久久蜜臀 | 久久99深爱久久99精品 | 欧美一二三区 | 一区二区三区四区日韩 | 天天插天天射天天干 | 999久久久精品 | 成人在线视频免费看 | 欧美日韩亚洲视频 | 看av电影| 日韩成人影院在线观看 | 欧美一区视频 | 亚洲美女在线一区 | 国产欧美一区二区三区在线播放 | 91久久国产综合久久 | 欧美日韩一区不卡 | 精品视频一区二区三区在线观看 | 亚洲欧美精品国产一级在线 | 精品视频在线一区 | 亚洲色图插插插 | 国产精品精品久久久 | 午夜激情影院 | 一级国产精品一级国产精品片 | 亚洲精品福利视频 | 一级黄色片一级黄色片 | 成人精品一区二区三区 | 国产精品高清一区二区 | 色综合天天天天做夜夜夜夜做 | 日韩中文字幕第一页 | 国产精品一区二区三区在线 | 精品国产视频在线观看 | 99这里只有精品视频 | 在线播放日韩 | 国产a区| 综合色久 | 91精品久久久 | 人人射人人| 中文字幕在线不卡播放 |