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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3620|回復: 11
打印 上一主題 下一主題
收起左側

stc12單片機+AD7091R無法正常顯示輸入

[復制鏈接]
跳轉到指定樓層
樓主
100黑幣
各位大佬,我想用AD讀取下電壓,通過LCD顯示,單片機用的STC12C5A60S2,20M外接晶振,1T的工作模式,AD用的AD7091R,這個AD是SPI的方式通信,但是寫完程序調試不出結果,有沒有輸入都是顯示4.99V,感覺是AD的DO引腳接的單片機引腳一直高電平的結果,AD貌似沒有工作,AD前面接了AD820濾波,當有輸入的時候測820輸出和AD7091輸入都是沒問題的,麻煩各位大佬給看看程序有啥問題,感激不盡。
這個圖引腳不對,AD的幾個引腳從上到下是3.2-3.5
  1. </blockquote></div><div><div class="blockcode"><blockquote>#include "STC12C5A60S2.H"
  2. #include "tool.h"


  3. //ADC signal pin defination
  4. sbit ad_do = P3^2;
  5. sbit ad_cs = P3^3;
  6. sbit ad_cvt = P3^4;
  7. sbit ad_clk = P3^5;


  8. //ADC7091R Reset
  9. void adc_reset(void){
  10.         unsigned char i;
  11.         
  12.         ad_cvt = 0;        Delay1us();
  13.         ad_cvt = 1;        Delay1us();
  14.         ad_cs = 0;  Delay1us();
  15.         
  16.         
  17.         for(i=0;i<4;i++){
  18.                 ad_clk = 1; Delay1us();
  19.                 ad_clk = 0; Delay1us();               
  20.         }

  21.         ad_cs = 1;
  22.         ad_cvt = 0; Delay1us();
  23.         ad_cvt = 1;
  24.         
  25.         for(i=0;i<12;i++){
  26.                 ad_clk = 1; Delay1us();
  27.                 ad_clk = 0; Delay1us();
  28.         }


  29. }


  30. //ADC7091 Initialization
  31. void adc_init(void){
  32.   
  33.         ad_cvt = 1;
  34.   ad_cvt = 0;
  35.         ad_cvt = 1;Delay1us();
  36.   ad_cs  = 0;
  37.         
  38.         
  39. }

  40. //ADC7091 Converst progress
  41. uint adc_conv(void){
  42.   uchar i=0;
  43.         uint dat=0;
  44.   adc_init();

  45.   for(i=0; i<12; i++){
  46.                 ad_clk = 1;
  47.                
  48.                 dat <<= 1;Delay1us();
  49.                 if(ad_do) dat |= 0x0001;
  50.                 Delay1us();
  51.                 ad_clk = 0;Delay1us();
  52.                
  53.   }
  54.         
  55.   ad_cs = 1;
  56.         return dat;
  57. }
復制代碼


主程序
  1. #include "adc7091.h"
  2. #include "IIC_1602.h"

  3. void Delay1000ms()                //@20.000MHz
  4. {
  5.         unsigned char i, j, k;

  6.         i = 76;
  7.         j = 255;
  8.         k = 241;
  9.         do
  10.         {
  11.                 do
  12.                 {
  13.                         while (--k);
  14.                 } while (--j);
  15.         } while (--i);
  16. }


  17. void main(){
  18.         //數據
  19.         uchar i=0;
  20.         uint ad_res;
  21.         uint ad_view = 0;
  22.         //IO口和LCD初始化
  23.         IO_Init();
  24.         init();
  25.         init_lcd();
  26.         adc_reset();
  27.         //adc_init();

  28.         while(1){
  29.                 ad_res = adc_conv();
  30.                
  31.                 ad_view = (ad_res*250.0/4095.0);
  32.                 bit_dis(ad_view);
  33.                 yuanshi(ad_res);
  34.                 ShowString(1,1,"V:");
  35.                 write_date(yuanshi_arr[3]);
  36.                 write_date(yuanshi_arr[2]);
  37.                 write_date(yuanshi_arr[1]);
  38.                 write_date(yuanshi_arr[0]);
  39.                
  40.                 ShowString(2,1,"Voltage:");
  41.                 write_date(res_arr[2]);
  42.                 write_date('.');
  43.                 write_date(res_arr[1]);
  44.                 write_date(res_arr[0]);

  45.                 //init_lcd();
  46.                 //Delay1000ms();Delay1000ms();
  47.         }
  48. }
復制代碼




AD7091R_cn.pdf (1.25 MB, 下載次數: 4)




分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:123289 發表于 2021-7-12 17:24 | 只看該作者
仔細讀手冊:
1、數據是串行工作的,每位數據的切換是需要時間的,切換位數(CLK)不要超過允許的時間。
2、數據切換后,要等數據穩定了再讀取,要防止讀到數據的邊沿上。
3、AD轉換需要時間,當下達開始轉換之后,要確保轉換已結束了,這時再讀數據。
回復

使用道具 舉報

板凳
ID:123289 發表于 2021-7-12 17:26 | 只看該作者
以上你做到了嗎?
回復

使用道具 舉報

地板
ID:947166 發表于 2021-7-13 10:16 | 只看該作者
yzwzfyz 發表于 2021-7-12 17:24
仔細讀手冊:
1、數據是串行工作的,每位數據的切換是需要時間的,切換位數(CLK)不要超過允許的時間。
...

感謝您的回復,首先為了讓轉換結束再讀數據,我在convst引腳置1后延時1us,是滿足轉換時間的650ns的,然后您說的數據讀取時的切換位數不超過允許時間,手冊里給了最小值,我在CLK每次轉換后也延時1us,讀取頻率遠沒有到允許的最大值50MHz,最后您說的防止讀到數據邊緣該如何操作呢,我程序里就是參考0832的讀取做的。
這是手冊里的時序規格要求,紅色劃掉的是最小值。


回復

使用道具 舉報

5#
ID:500971 發表于 2021-7-13 11:36 | 只看該作者
stc不是有自帶ad嗎
回復

使用道具 舉報

6#
ID:947166 發表于 2021-7-13 14:10 | 只看該作者
本帖最后由 Capta1nY 于 2021-7-13 14:20 編輯
5191 發表于 2021-7-13 11:36
stc不是有自帶ad嗎

是,但是目前電路已經設計好了,就想著能用就用吧,之前用過0832沒啥問題,換了個結果調不出來了,您有什么建議嗎
回復

使用道具 舉報

7#
ID:844772 發表于 2021-7-13 16:09 | 只看該作者
看你發的手冊應該在CLK下沿讀DO,但你程序寫的是上沿讀啊。
就這段  ad_clk = 1;
           dat <<= 1;Delay1us();
           if(ad_do) dat |= 0x0001;
           Delay1us();
           ad_clk = 0; Delay1us();
回復

使用道具 舉報

8#
ID:947166 發表于 2021-7-14 09:56 | 只看該作者
glinfei 發表于 2021-7-13 16:09
看你發的手冊應該在CLK下沿讀DO,但你程序寫的是上沿讀啊。
就這段  ad_clk = 1;
           dat

你說的有道理,我改成了
  1.   for(i=0; i<12; i++){
  2.                 ad_clk = 1;Delay1us();
  3.                 ad_clk = 0;
  4.                 dat <<= 1;
  5.                 if(ad_do) dat |= 0x0001;
  6.                 Delay1us();               
  7.   }
復制代碼

結果還是沒效果
回復

使用道具 舉報

9#
ID:947166 發表于 2021-7-15 10:46 | 只看該作者
問一下各位大佬,有沒有可能是51的時鐘頻率不夠,我查到的用這個AD的都是FPGA和32的
回復

使用道具 舉報

10#
ID:844772 發表于 2021-7-15 11:12 | 只看該作者
Capta1nY 發表于 2021-7-15 10:46
問一下各位大佬,有沒有可能是51的時鐘頻率不夠,我查到的用這個AD的都是FPGA和32的

我那天就想問,你手冊上給的最大讀取時間好短啊,比如T4 只有3ns,都不夠if用的,能否先把ad_do賦值個中間變量,再去判斷?另外那些我看延時也用不著了。
回復

使用道具 舉報

11#
ID:947166 發表于 2021-7-16 09:48 | 只看該作者
glinfei 發表于 2021-7-15 11:12
我那天就想問,你手冊上給的最大讀取時間好短啊,比如T4 只有3ns,都不夠if用的,能否先把ad_do賦值個中 ...

放棄了,杠了幾天沒辦法了,就用自帶的AD吧,謝謝啦
回復

使用道具 舉報

12#
ID:708541 發表于 2021-7-16 15:49 | 只看該作者
單片機自帶AD操作容易,有范例程序直接可以用,自帶AD現在隨便都10位和12位精度一般應用夠用了,你自己用AD芯片程序和時序搞不對,就無法AD轉換。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 男人天堂国产 | 国产成人精品免费视频大全最热 | 国产91 在线播放 | 在线免费观看成年人视频 | 日韩欧美国产精品综合嫩v 一区中文字幕 | 国产一区二区三区免费视频 | 日韩欧美第一页 | 日韩av一区二区在线观看 | 日韩欧美一级 | 黄瓜av | 99re热精品视频 | 日韩中文欧美 | 久久久久久女 | 日韩精品色网 | 一区亚洲 | 欧美日韩亚洲视频 | 九九av| 美女网站视频免费黄 | 狠狠综合网 | 日韩视频国产 | 亚洲一区二区视频 | 亚洲人va欧美va人人爽 | 日韩欧美天堂 | 婷婷久久网 | 亚洲高清在线免费观看 | 国产91亚洲精品一区二区三区 | 91在线第一页 | 精品毛片视频 | 久久久久久久综合 | 亚洲精品日韩综合观看成人91 | 精品欧美一区二区三区久久久 | 在线视频国产一区 | 在线观看国产视频 | 国产成人精品一区二区三区四区 | 亚洲高清免费观看 | 成人啊啊啊 | 日韩中文字幕在线不卡 | 成人av免费网站 | av一区在线观看 | 国产精品久久久久久久久久久久冷 | 国产精品一区二区在线 |