欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: stc12單片機(jī)+AD7091R無(wú)法正常顯示輸入 [打印本頁(yè)]

作者: Capta1nY    時(shí)間: 2021-7-12 09:45
標(biāo)題: stc12單片機(jī)+AD7091R無(wú)法正常顯示輸入
各位大佬,我想用AD讀取下電壓,通過(guò)LCD顯示,單片機(jī)用的STC12C5A60S2,20M外接晶振,1T的工作模式,AD用的AD7091R,這個(gè)AD是SPI的方式通信,但是寫完程序調(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)題,感激不盡。
[attach]275631[/attach] 這個(gè)圖引腳不對(duì),AD的幾個(gè)引腳從上到下是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. }
復(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)





作者: yzwzfyz    時(shí)間: 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á)開始轉(zhuǎn)換之后,要確保轉(zhuǎn)換已結(jié)束了,這時(shí)再讀數(shù)據(jù)。

作者: yzwzfyz    時(shí)間: 2021-7-12 17:26
以上你做到了嗎?
作者: Capta1nY    時(shí)間: 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ī)格要求,紅色劃掉的是最小值。



作者: 5191    時(shí)間: 2021-7-13 11:36
stc不是有自帶ad嗎

作者: Capta1nY    時(shí)間: 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)了,您有什么建議嗎
作者: glinfei    時(shí)間: 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();
作者: Capta1nY    時(shí)間: 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)效果
作者: Capta1nY    時(shí)間: 2021-7-15 10:46
問(wèn)一下各位大佬,有沒(méi)有可能是51的時(shí)鐘頻率不夠,我查到的用這個(gè)AD的都是FPGA和32的
作者: glinfei    時(shí)間: 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í)也用不著了。
作者: Capta1nY    時(shí)間: 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吧,謝謝啦
作者: as21cxz    時(shí)間: 2021-7-16 15:49
單片機(jī)自帶AD操作容易,有范例程序直接可以用,自帶AD現(xiàn)在隨便都10位和12位精度一般應(yīng)用夠用了,你自己用AD芯片程序和時(shí)序搞不對(duì),就無(wú)法AD轉(zhuǎn)換。




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