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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3687|回復(fù): 11
收起左側(cè)

stc12單片機(jī)+AD7091R無(wú)法正常顯示輸入

[復(fù)制鏈接]
ID:947166 發(fā)表于 2021-7-12 09:45 | 顯示全部樓層 |閱讀模式
100黑幣
各位大佬,我想用AD讀取下電壓,通過(guò)LCD顯示,單片機(jī)用的STC12C5A60S2,20M外接晶振,1T的工作模式,AD用的AD7091R,這個(gè)AD是SPI的方式通信,但是寫(xiě)完程序調(diào)試不出結(jié)果,有沒(méi)有輸入都是顯示4.99V,感覺(jué)是AD的DO引腳接的單片機(jī)引腳一直高電平的結(jié)果,AD貌似沒(méi)有工作,AD前面接了AD820濾波,當(dāng)有輸入的時(shí)候測(cè)820輸出和AD7091輸入都是沒(méi)問(wèn)題的,麻煩各位大佬給看看程序有啥問(wèn)題,感激不盡。
AD.PNG 這個(gè)圖引腳不對(duì),AD的幾個(gè)引腳從上到下是3.2-3.5 引腳定義.png 時(shí)序.PNG
  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. }
復(fù)制代碼


主程序
  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.         //數(shù)據(jù)
  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. }
復(fù)制代碼




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




回復(fù)

使用道具 舉報(bào)

ID:123289 發(fā)表于 2021-7-12 17:24 | 顯示全部樓層
仔細(xì)讀手冊(cè):
1、數(shù)據(jù)是串行工作的,每位數(shù)據(jù)的切換是需要時(shí)間的,切換位數(shù)(CLK)不要超過(guò)允許的時(shí)間。
2、數(shù)據(jù)切換后,要等數(shù)據(jù)穩(wěn)定了再讀取,要防止讀到數(shù)據(jù)的邊沿上。
3、AD轉(zhuǎn)換需要時(shí)間,當(dāng)下達(dá)開(kāi)始轉(zhuǎn)換之后,要確保轉(zhuǎn)換已結(jié)束了,這時(shí)再讀數(shù)據(jù)。
回復(fù)

使用道具 舉報(bào)

ID:123289 發(fā)表于 2021-7-12 17:26 | 顯示全部樓層
以上你做到了嗎?
回復(fù)

使用道具 舉報(bào)

ID:947166 發(fā)表于 2021-7-13 10:16 | 顯示全部樓層
yzwzfyz 發(fā)表于 2021-7-12 17:24
仔細(xì)讀手冊(cè):
1、數(shù)據(jù)是串行工作的,每位數(shù)據(jù)的切換是需要時(shí)間的,切換位數(shù)(CLK)不要超過(guò)允許的時(shí)間。
...

感謝您的回復(fù),首先為了讓轉(zhuǎn)換結(jié)束再讀數(shù)據(jù),我在convst引腳置1后延時(shí)1us,是滿足轉(zhuǎn)換時(shí)間的650ns的,然后您說(shuō)的數(shù)據(jù)讀取時(shí)的切換位數(shù)不超過(guò)允許時(shí)間,手冊(cè)里給了最小值,我在CLK每次轉(zhuǎn)換后也延時(shí)1us,讀取頻率遠(yuǎn)沒(méi)有到允許的最大值50MHz,最后您說(shuō)的防止讀到數(shù)據(jù)邊緣該如何操作呢,我程序里就是參考0832的讀取做的。
這是手冊(cè)里的時(shí)序規(guī)格要求,紅色劃掉的是最小值。 Inked時(shí)序時(shí)間_LI.jpg


回復(fù)

使用道具 舉報(bào)

ID:500971 發(fā)表于 2021-7-13 11:36 | 顯示全部樓層
stc不是有自帶ad嗎
回復(fù)

使用道具 舉報(bào)

ID:947166 發(fā)表于 2021-7-13 14:10 | 顯示全部樓層
本帖最后由 Capta1nY 于 2021-7-13 14:20 編輯
5191 發(fā)表于 2021-7-13 11:36
stc不是有自帶ad嗎

是,但是目前電路已經(jīng)設(shè)計(jì)好了,就想著能用就用吧,之前用過(guò)0832沒(méi)啥問(wèn)題,換了個(gè)結(jié)果調(diào)不出來(lái)了,您有什么建議嗎
回復(fù)

使用道具 舉報(bào)

ID:844772 發(fā)表于 2021-7-13 16:09 | 顯示全部樓層
看你發(fā)的手冊(cè)應(yīng)該在CLK下沿讀DO,但你程序?qū)懙氖巧涎刈x啊。
就這段  ad_clk = 1;
           dat <<= 1;Delay1us();
           if(ad_do) dat |= 0x0001;
           Delay1us();
           ad_clk = 0; Delay1us();
回復(fù)

使用道具 舉報(bào)

ID:947166 發(fā)表于 2021-7-14 09:56 | 顯示全部樓層
glinfei 發(fā)表于 2021-7-13 16:09
看你發(fā)的手冊(cè)應(yīng)該在CLK下沿讀DO,但你程序?qū)懙氖巧涎刈x啊。
就這段  ad_clk = 1;
           dat

你說(shuō)的有道理,我改成了
  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.   }
復(fù)制代碼

結(jié)果還是沒(méi)效果
回復(fù)

使用道具 舉報(bào)

ID:947166 發(fā)表于 2021-7-15 10:46 | 顯示全部樓層
問(wèn)一下各位大佬,有沒(méi)有可能是51的時(shí)鐘頻率不夠,我查到的用這個(gè)AD的都是FPGA和32的
回復(fù)

使用道具 舉報(bào)

ID:844772 發(fā)表于 2021-7-15 11:12 | 顯示全部樓層
Capta1nY 發(fā)表于 2021-7-15 10:46
問(wèn)一下各位大佬,有沒(méi)有可能是51的時(shí)鐘頻率不夠,我查到的用這個(gè)AD的都是FPGA和32的

我那天就想問(wèn),你手冊(cè)上給的最大讀取時(shí)間好短啊,比如T4 只有3ns,都不夠if用的,能否先把a(bǔ)d_do賦值個(gè)中間變量,再去判斷?另外那些我看延時(shí)也用不著了。
回復(fù)

使用道具 舉報(bào)

ID:947166 發(fā)表于 2021-7-16 09:48 | 顯示全部樓層
glinfei 發(fā)表于 2021-7-15 11:12
我那天就想問(wèn),你手冊(cè)上給的最大讀取時(shí)間好短啊,比如T4 只有3ns,都不夠if用的,能否先把a(bǔ)d_do賦值個(gè)中 ...

放棄了,杠了幾天沒(méi)辦法了,就用自帶的AD吧,謝謝啦
回復(fù)

使用道具 舉報(bào)

ID:708541 發(fā)表于 2021-7-16 15:49 | 顯示全部樓層
單片機(jī)自帶AD操作容易,有范例程序直接可以用,自帶AD現(xiàn)在隨便都10位和12位精度一般應(yīng)用夠用了,你自己用AD芯片程序和時(shí)序搞不對(duì),就無(wú)法AD轉(zhuǎn)換。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日韩精品在线网站 | 日韩精品免费一区 | 狠狠入ady亚洲精品经典电影 | 91精品久久久久久久久久入口 | 视频一区二区中文字幕 | 午夜av免费 | 国产美女精品 | 成年人网站在线观看视频 | 久草中文在线观看 | 黄色免费av | 日韩视频在线一区 | 看毛片的网站 | 黄色在线免费观看视频 | 国产精品久久av | 国产综合久久久 | 婷婷综合久久 | 精品国产一区二区三区久久 | 欧美激情区 | 欧一区 | 日本三级网站在线观看 | 三级免费av| 91免费视频 | 免费国产精品久久久久久 | 国产98色在线 | 日韩 | 在线国产欧美 | 亚洲福利在线视频 | 99精品视频在线 | 亚洲视频在线播放 | 成人一区av偷拍 | 亚洲视频在线观看免费 | 久久亚洲免费 | 在线成人免费视频 | 精品成人免费视频 | 高清视频一区二区三区 | cao在线| 国产美女自拍视频 | 久久亚洲天堂 | 亚洲精品一区二区三区蜜桃久 | 三级av在线 | 午夜精品久久久久久久久久久久 | 精品久久久久久久人人人人传媒 |