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

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

QQ登錄

只需一步,快速開始

搜索
查看: 3258|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

ads117.h頭文件驅(qū)動(dòng)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:76127 發(fā)表于 2015-4-18 03:38 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式

基于msp430單片機(jī)下的ads117.h驅(qū)動(dòng):
  1. #define SCL_H P2OUT |= BIT4
  2. #define SCL_L P2OUT &= ~BIT4
  3. #define SDA_H P2OUT |= BIT3
  4. #define SDA_L P2OUT &= ~BIT3
  5. #define address 0x90
  6. #define config  0x01     
  7. #define conversion 0x00   
  8. #define Lsiwei  0xE3                     //860sps,比較模式關(guān)閉
  9. #define Lsiwei1  0x03                     //8sps,比較模式關(guān)閉
  10. #define  channel_0      0                //表示選擇通道0和通道1的差分輸入
  11. #define  channel_1      1                //表示選擇通道1
  12. #define  channel_2      2                //表示選擇通道2
  13. #define  channel_3      3                //表示選擇通道3

  14. #define SDA_in  P2DIR &= ~BIT3          //SDA改成輸入模式
  15. #define SDA_out P2DIR |= BIT3          //SDA變回輸出模式
  16. #define SDA_val P2IN&BIT3             //SDA的位值

  17. #define TRUE    1
  18. #define FALSE   0
  19. /******************************
  20. 函數(shù)名:delay
  21. 功能:延時(shí)程序/////////////15us
  22. ********************************/
  23. void delay1(void)
  24. {
  25.     uchar i;
  26. for(i = 0;i < 15;i++)
  27.    _NOP();
  28. }
  29. /*******************************************
  30. 函數(shù)名稱:start
  31. 功    能:完成IIC的起始條件操作
  32. 參    數(shù):無
  33. 返回值  :無
  34. ********************************************/
  35. void start(void)
  36. {
  37. SCL_H;
  38. SDA_H;
  39. delay1();
  40. SDA_L;
  41. delay1();
  42. SCL_L;
  43. delay1();
  44. }
  45. /*******************************************
  46. 函數(shù)名稱:stop
  47. 功    能:完成IIC的終止條件操作
  48. 參    數(shù):無
  49. 返回值  :無
  50. ********************************************/
  51. void stop(void)
  52. {
  53. SDA_L;
  54. delay1();
  55. SCL_H;
  56. delay1();
  57. SDA_H;
  58. delay1();   
  59. }
  60. /*******************************************
  61. 函數(shù)名稱:mack
  62. 功    能:完成IIC的主機(jī)應(yīng)答操作
  63. 參    數(shù):無
  64. 返回值  :無
  65. ********************************************/
  66. void mack(void)
  67. {
  68. SDA_L;
  69. _NOP(); _NOP();
  70. SCL_H;
  71. delay1();
  72. _NOP();_NOP();
  73. SCL_L;
  74. SDA_H;   
  75. delay1();
  76. }
  77. /*******************************************
  78. 函數(shù)名稱:mnack
  79. 功    能:完成IIC的主機(jī)無應(yīng)答操作
  80. 參    數(shù):無
  81. 返回值  :無
  82. ********************************************/
  83. void mnack(void)
  84. {
  85. SDA_H;
  86. _NOP(); _NOP();
  87. SCL_H;
  88. delay1();
  89. SCL_L;
  90. _NOP(); _NOP();
  91. SDA_L;  
  92. delay1();      
  93. }
  94. /*******************************************
  95. 函數(shù)名稱:ack
  96. 功    能:檢查從機(jī)的應(yīng)答操作
  97. 參    數(shù):無
  98. 返回值  :從機(jī)是否有應(yīng)答:1--wu,0--you
  99. ********************************************/
  100. void ack()
  101. {
  102.   uchar i;
  103.   i=0;
  104.   SDA_in;
  105.   SCL_H;
  106.   delay1();
  107.   while((P2IN&BIT1)&&(i<250)) i++;
  108.   SDA_out;
  109.   SCL_L;
  110.   delay1();
  111. }
  112. /*******************************************
  113. 函數(shù)名稱:write1
  114. 功    能:向IIC總線發(fā)送一個(gè)1
  115. 參    數(shù):無
  116. 返回值  :無
  117. ********************************************/
  118. void write1(void)                      //下降沿發(fā)送
  119. {
  120. SDA_H;
  121. delay1();
  122. SCL_H;
  123. delay1();
  124. SCL_L;   
  125. delay1();
  126. }
  127. /*******************************************
  128. 函數(shù)名稱:write0
  129. 功    能:向IIC總線發(fā)送一個(gè)0
  130. 參    數(shù):無
  131. 返回值  :無
  132. ********************************************/
  133. void write0(void)                    //下降沿發(fā)送
  134. {
  135. SDA_L;
  136. delay1();
  137. SCL_H;
  138. delay1();   
  139. SCL_L;   
  140. delay1();
  141. }
  142. /*******************************************
  143. 函數(shù)名稱:write1byte
  144. 功    能:向IIC總線發(fā)送一個(gè)字節(jié)的數(shù)據(jù)
  145. 參    數(shù):wdata--發(fā)送的數(shù)據(jù)
  146. 返回值  :無
  147. ********************************************/
  148. void write1byte(uchar wdata)
  149. {
  150. uchar i;
  151.    
  152. for(i = 8;i > 0;i--)
  153. {
  154.   if(wdata & 0x80)  
  155.                       write1();
  156.   else   
  157.                       write0();
  158.   wdata <<= 1;
  159. }                 

  160. SDA_H;
  161. _NOP();  
  162. }
  163. /*******************************************
  164. 函數(shù)名稱:read1byte
  165. 功    能:從IIC總線讀取一個(gè)字節(jié)
  166. 參    數(shù):無
  167. 返回值  :讀取的數(shù)據(jù)
  168. ********************************************/
  169. uchar read1byte(void)
  170. {
  171.     uchar  rdata = 0x00,i;
  172.     uchar flag;
  173.    
  174. for(i = 0;i < 8;i++)
  175. {
  176.   SDA_H;
  177.   delay1();
  178.   SCL_H;
  179.                 SDA_in;            //設(shè)為輸入模式
  180.   delay1();
  181.   flag = SDA_val;  
  182.   rdata <<= 1;
  183.   if(flag) rdata |= 0x01;
  184.                     SDA_out ;           //設(shè)為輸出模式,輸出高電平,空閑
  185.   SCL_L;
  186.   delay1();
  187. }
  188. return rdata;
  189. }
  190. /***********************************
  191. 函數(shù)名;Confige1115
  192. 功能:選擇通道模式,對(duì)ads1115進(jìn)行初始化
  193. 參數(shù):uchar channel通道編號(hào)
  194. ***************************************/
  195. void Confige1115(uchar channel)    //對(duì)地址,通道,采樣范圍,轉(zhuǎn)換速率
  196. {
  197.   uchar a_channel;
  198.   switch (channel)
  199.   {
  200.      case 0:a_channel=0xC2;break;//通道0 ,1倍放大,連續(xù)模式
  201.      case 1:a_channel=0xD2;break;//通道1,1倍放大,連續(xù)模式
  202.      case 2:a_channel=0xE2;break;//通道2,1倍放大,連續(xù)模式
  203.      case 3:a_channel=0xF2;break;//通道3,1倍放大,連續(xù)模式
  204.      default: break;
  205.   }
  206.   start();
  207.   write1byte(address);//0x90    //先寫地址,,,由Datashit知,address接地時(shí)從機(jī)地址為0X90
  208.   ack();
  209.   write1byte(config);//0x01     //再寫高字節(jié)配置,,100 : AINP = AIN0 and AINN = GND,001 : FS = ±4.096V(1)
  210.   ack();
  211.   write1byte(a_channel);        //選擇通道
  212.   ack();
  213. // write1byte(Lsiwei1);             //0xe3,8sps,比較模式關(guān)閉
  214. write1byte(Lsiwei);           //0xe3,860sps,比較模式關(guān)閉    //低字節(jié)配置,111 : 860SPS
  215.   ack();
  216.   stop();
  217. }
  218. /**************************************
  219. 函數(shù)名:read1115
  220. 功能:從ads1115中讀出采樣值
  221. **************************************/
  222. long int read1115()     
  223. {
  224.   uchar result_l,result_h;      //結(jié)果為兩字節(jié)
  225.   long int result;
  226.   start();
  227.    write1byte(address);//地址0x90
  228.   ack();
  229.    write1byte(conversion);//寫入0x00,告訴ads1115下一步要從conversion register中讀數(shù)據(jù)    ???
  230.   ack();
  231.   stop();
  232.   delay_ms(5);
  233.   start();
  234.   write1byte(address+1);//要讀數(shù)據(jù)了   ????
  235.    ack();
  236.   result_h=read1byte();   //先讀高字節(jié)
  237.    mack();//主機(jī)應(yīng)答
  238.   result_l=read1byte();  
  239.    mack();//主機(jī)應(yīng)答
  240.    stop();
  241.   result=result_h*256+result_l;   //****很關(guān)鍵
  242.   return result;
  243. }
  244. /***********************************
  245. 函數(shù)名:go_1115
  246. 功能:進(jìn)行一次采樣并得到采樣值
  247. 參數(shù):uchar temp  通道選擇
  248. *********************************/
  249. float go_1115(uchar temp)
  250. {
  251.   long int result_gd;
  252.   float result_v;
  253.   Confige1115(temp);
  254.   delay_ms(5);
  255.   result_gd=read1115();
  256.   delay_ms(5);
  257.   result_v=result_gd/7999.755859;//轉(zhuǎn)化為電壓值,單位為v   
  258.                                   //有正有負(fù),最高位為符號(hào)位,單位量值=32768/4.096 V-1
  259.   return result_v;
  260. }
  261. /*********************************
  262. 函數(shù)名:sample
  263. 參數(shù):int a采樣次數(shù),uchar tep通道選擇
  264.       tep=0為通道0和通道1的差分輸入
  265. 功能:進(jìn)行a次采樣,且去掉最大最小值求平均
  266. *************************************/
  267. float sample(int a,uchar tep)            //連續(xù)采樣,  ,采樣算法
  268. {                                        //去掉最大最小值求平均值
  269. int i,j;
  270. float max,min,v_out,c=0;
  271. max=min=go_1115(tep);
  272.   for(i=0;i<=9;i++)
  273.   {
  274.    for(j=0;j<=4;j++)
  275.    {
  276.      v_out=go_1115(tep);
  277.    if(v_out>max)     //找出最值
  278.    {max=v_out;}
  279.    if(v_out<min)
  280.    {min=v_out;}
  281.    c=c+v_out;//全部加,到最后減掉最值
  282.    }
  283.    if(j<=5)   
  284.      c=c-max-min;     //去掉最大最小
  285. }
  286.     c=c/30;   
  287.   //每5次采樣為一組,每次保留每組中的除去最大最小值的3個(gè)值之和
  288.   //一共采樣次數(shù)為5*10-2*10=30次
  289.     return c;
  290. }
復(fù)制代碼



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

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 天天综合网天天综合色 | 欧美高清视频在线观看 | 黄视频网站免费观看 | 国产欧美日韩视频 | 久久精品网 | 日韩激情在线 | 91中文字幕在线观看 | 精品一区二区三区视频在线观看 | 成人精品毛片国产亚洲av十九禁 | 99国产精品视频免费观看一公开 | 欧美一区二区在线观看 | 亚洲网站在线观看 | 中文字幕高清视频 | 天堂在线www | 欧美在线观看一区 | 国产美女福利在线观看 | 国产精品日产欧美久久久久 | 国产精品一区在线 | 成人毛片视频免费 | 一区二区三区国产 | 日韩成人在线播放 | 日韩免费视频一区二区 | 一级片av| 亚洲精品免费在线 | 亚洲精品一区二区在线 | 青娱乐一区二区 | 久久免费精品 | 国产激情一区二区三区 | 超碰97免费在线 | 欧美美女二区 | 中文字幕在线一区 | 日本精品一区 | 国产一区91精品张津瑜 | 国产精品日本一区二区在线播放 | 亚洲精品欧美 | 亚洲日韩欧美一区二区在线 | 午夜精品一区二区三区在线观看 | 成人区精品一区二区婷婷 | 精品一区二区三区日本 | 日本天堂视频在线观看 | 日韩成人高清 |