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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2982|回復: 0
收起左側(cè)

ADS111的STM32驅(qū)動程序 含配置代碼以及IIC通訊驅(qū)動

[復制鏈接]
ID:616761 發(fā)表于 2019-9-26 16:20 | 顯示全部樓層 |閱讀模式
內(nèi)含ADS111配置代碼以及IIC通訊驅(qū)動

單片機源程序如下:
  1. #include "stm32f10x_lib.h"
  2. #include "ADS1115.h"
  3. #include "stm32f10x_i2c.h"
  4. #ifndef __cplusplus  
  5. #endif  
  6. /*--Private Value----------------------------------------------------------*/
  7. enum TestPort {BatVal,BatCur};
  8. unsigned char AD_BUF[2]={0};   
  9. #define SCLH        GPIOB->BSRR = GPIO_Pin_6
  10. #define SCLL        GPIOB->BRR  = GPIO_Pin_6     
  11. #define SDAH        GPIOB->BSRR = GPIO_Pin_7
  12. #define SDAL        GPIOB->BRR  = GPIO_Pin_7   
  13. #define SCLread     GPIOB->IDR  & GPIO_Pin_6
  14. #define SDAread     GPIOB->IDR  & GPIO_Pin_7  
  15. void I2C_GPIO_Config(void)
  16. {   
  17.         GPIO_InitTypeDef  GPIO_InitStructure;      
  18.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);   
  19.        
  20.         // Configure I2C1 pins: SCL and SDA   
  21.         GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_6;   
  22.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  23.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;   
  24.         GPIO_Init(GPIOB, &GPIO_InitStructure);   
  25.         GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_7;   
  26.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  27.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;  
  28.         GPIO_Init(GPIOB, &GPIO_InitStructure);
  29.         GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_4;//assert管腳
  30.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  
  31.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
  32.         GPIO_Init(GPIOB, &GPIO_InitStructure);        
  33. }

  34. void I2C_delay(void)
  35. {  unsigned char i=30; //
  36.    while(i)
  37.    {
  38.        i--;
  39.    }
  40. }  

  41. bool I2C_Start(void)
  42. {   
  43.         SDAH;
  44.         I2C_delay();  
  45.         SCLH;   
  46.         I2C_delay();  
  47.         if(!SDAread)return FALSE; //SDA線為低則總線忙,退出
  48.         SDAL;   
  49.         I2C_delay();  
  50.         if(SDAread)
  51.         return FALSE; //SDA線為高則總線出錯,退出  
  52.         SDAL;   
  53.         I2C_delay();
  54.         return TRUE;       
  55. }  
  56. void I2C_Stop(void)
  57. {  
  58.         SCLL;
  59.         I2C_delay();
  60.         SDAL;  
  61.         I2C_delay();  
  62.         SCLH;  
  63.         I2C_delay();  
  64.         SDAH;  
  65.         I2C_delay();
  66. }  

  67. void I2C_Ack(void)
  68. {   
  69.         SCLL;   
  70.         I2C_delay();  
  71.         SDAL;  
  72.         I2C_delay();
  73.         SCLH;  
  74.         I2C_delay();
  75.         SCLL;   
  76.         I2C_delay();
  77. }  

  78. void I2C_NoAck(void)
  79. {   
  80.         SCLL;
  81.         I2C_delay();
  82.         SDAH;   
  83.         I2C_delay();  
  84.         SCLH;   
  85.         I2C_delay();
  86.         SCLL;   
  87.         I2C_delay();
  88. }

  89. bool I2C_WaitAck(void)  //返回1有ACK,返回0無ACK
  90. {  
  91.         SCLL;  
  92.         I2C_delay();  
  93.         SDAH;     
  94.         I2C_delay();
  95.         SCLH;  
  96.         I2C_delay();
  97.         if(SDAread)
  98.         { SCLL;
  99.           return FALSE;
  100.         }  
  101.         SCLL;
  102.         return TRUE;
  103.         }
  104.        
  105. void I2C_SendByte(u8 SendByte) //數(shù)據(jù)從高位到低位//
  106. {      
  107.         u8 i=8;  
  108.         while(i--)
  109.         {         
  110.           SCLL;         
  111.           I2C_delay();         
  112.           if(SendByte&0x80)         
  113.           SDAH;         
  114.           else         
  115.           SDAL;         
  116.           SendByte<<=1;        
  117.           I2C_delay();  
  118.                 SCLH;         
  119.           I2C_delay();     
  120.         }      
  121.         SCLL;
  122. }  
  123. u8 I2C_ReceiveByte(void) //數(shù)據(jù)從高位到低位//
  124. {
  125.         u8 i=8;     
  126.         u8 ReceiveByte=0;   
  127.         SDAH;         
  128.         while(i--)     
  129.         {      
  130.                 ReceiveByte<<=1;            
  131.                 SCLL;        
  132.                 I2C_delay();      
  133.                 SCLH;        
  134.                 I2C_delay();        
  135.                 if(SDAread)      
  136.                 {         
  137.                  ReceiveByte|=0x01;      
  138.                 }     
  139.         }      
  140.         SCLL;     
  141.         return ReceiveByte;
  142. }  
  143. /****************************************************************************
  144. * 名    稱: ADS1115_Init
  145. * 功    能: 初始化ADS1115
  146. * 入口參數(shù):id:設備地址;write_address寄存器 ;byte1:高字節(jié)配置;byte2:低字節(jié) 最高轉(zhuǎn)換速度  
  147. * 出口參數(shù): 無
  148. * 說    明:  完成ADS1115的配置寄存器的初始化
  149. *****************************************************************************/
  150. void ADS1115_Init(unsigned char id,unsigned char write_address,unsigned char byte1,unsigned char byte2)
  151. {   
  152.         while(!I2C_Start());
  153.   I2C_SendByte(id);//寫器件地址   
  154.         while(!I2C_WaitAck());   
  155.         I2C_SendByte(write_address);//寄存器地址
  156.         while(!I2C_WaitAck());   
  157.         I2C_SendByte(byte1);//發(fā)送數(shù)據(jù)   
  158.         while(!I2C_WaitAck());   
  159.         I2C_SendByte(byte2);//發(fā)送數(shù)據(jù)   
  160.         while(!I2C_WaitAck());   
  161.         I2C_Stop();         
  162.         I2C_delay();
  163.         I2C_delay();   
  164. }

  165. /****************************************************************************
  166. * 名    稱: I2C_AD1115_Point
  167. * 功    能: 指向ADS1115內(nèi)部特定的寄存器
  168. * 入口參數(shù): id:設備地址;write_address寄存器
  169. * 出口參數(shù): 無  
  170. * 說    明: 指向ADS1115內(nèi)部特定的寄存器  
  171. ****************************************************************************/
  172. void I2C_AD1115_Point(unsigned char id,unsigned char write_address)
  173. {  
  174.         while(!I2C_Start());  
  175.         //產(chǎn)生起始條件
  176.         I2C_SendByte(id);//寫器件地址
  177.         //向設備發(fā)送設備地址  
  178.         while(!I2C_WaitAck());  
  179.         //等待ACK   
  180.         I2C_SendByte(write_address);//發(fā)送數(shù)據(jù)
  181.         //寄存器地址
  182.         while(!I2C_WaitAck());   
  183.         I2C_Stop();   
  184.         //產(chǎn)生結(jié)束信號
  185. }  
  186. /****************************************************************************
  187. * 名    稱: I2C_Read2
  188. * 功    能: 讀ADS1115轉(zhuǎn)換結(jié)果  
  189. * 入口參數(shù): id:設備地址;read_address寄存器地址
  190. * 出口參數(shù): 無
  191. * 說    明: 轉(zhuǎn)換的值放在BUF【2】
  192. ****************************************************************************/
  193. void I2C_Read2(unsigned char  id, unsigned char read_address)   
  194. {           
  195.         while(!I2C_Start());  
  196.         //產(chǎn)生起始條件
  197.         I2C_SendByte(id);//寫器件地址  
  198.         //發(fā)送地址   
  199.         while(!I2C_WaitAck());
  200.         //等待ACK           
  201.         AD_BUF[0] = I2C_ReceiveByte();   
  202.         I2C_Ack();   
  203.         AD_BUF[1]  = I2C_ReceiveByte();
  204.         I2C_NoAck();   
  205.         I2C_Stop();
  206. }  
  207. /****************************************************************************
  208. * 名    稱: StartChannel
  209. * 功    能: 選擇通道測量
  210. * 入口參數(shù): 通道0、1、2、3
  211. * 出口參數(shù): 采樣值
  212. * 說    明: 完成ADS1115的采樣工作  
  213. ****************************************************************************/

  214. s16 Out,AIN2,AIN1,AIN3,AIN0;
  215. s16 AD_Buff[4];
  216. int temp=0;  
  217. float StartChannlel(char Channel)
  218. {
  219.         float AD_Val=0;
  220.        
  221.         if(Channel==0)
  222.         {   //First (1001000)Address+0; Second :Point to the Config resgister   BatVal
  223.                 ADS1115_Init(0x90,0x01,0xc2,0xe0); //量程4.096;Continuous conversionmode;AIN1
  224.                 //860SPS;
  225.                 Out=AIN0-AIN1;  
  226.         }  
  227.         if(Channel==1)
  228.         {   
  229.                 ADS1115_Init(0x90,0x01,0xd2,0xe0); //量程1.024;Continuous conversionmode;AIN3  BatCur
  230.                 //860SPS;
  231.                 Out=AIN2-AIN3;//00110110
  232.         }   
  233.         if(Channel==2)  
  234.          {   
  235.            ADS1115_Init(0x90,0x01,0xe2,0xe0); //量程4.096;Continuous conversionmode;GND
  236.           //860SPS;  
  237.          }   
  238.          if(Channel==3)   
  239.          {     
  240.            ADS1115_Init(0x90,0x01,0xf2,0xe0); //量程4.096;Continuous conversionmode;GND
  241.           //860SPS;  
  242.    }  
  243.         while(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_4));
  244.         I2C_AD1115_Point(0x90,0x00);         
  245.         I2C_delay();
  246.         I2C_delay();  
  247.         I2C_Read2(0x91,0x00);
  248.   while(!I2C_Start());           
  249.         temp=(AD_BUF[0] << 8) | AD_BUF[1];
  250. //        AD_Val=4096*temp/32768.0;  
  251.          AD_Val=temp;
  252.          if(Channel==0)
  253.                 {   
  254.                          AD_Buff[0]=AD_Val;
  255.                 }   
  256.                 if(Channel==1)
  257.                 {   
  258.                          AD_Buff[1]=AD_Val;
  259.                 }   
  260.                 if(Channel==2)
  261.                 {   
  262.                          AD_Buff[2]=AD_Val;
  263.                 }   
  264.                 if(Channel==3)
  265.                 {   
  266.                          AD_Buff[3]=AD_Val;
  267.                 }   
  268.         return AD_Val;
  269.          
  270.          
  271. }
  272.        
復制代碼

所有資料51hei提供下載:
ADS115.rar (610.13 KB, 下載次數(shù): 39)

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 草草在线观看 | 国产一二区视频 | 亚洲欧美自拍偷拍视频 | 国产蜜臀97一区二区三区 | 日日摸夜夜添夜夜添精品视频 | 97综合在线 | 久久这里只有精品首页 | 国产精品欧美一区二区 | 日本一区二区三区视频在线 | 国家一级黄色片 | 天天夜碰日日摸日日澡 | 日韩av在线免费 | 日韩欧美在线一区 | 天堂av中文在线 | 国产欧美精品区一区二区三区 | 国产丝袜一区二区三区免费视频 | 亚洲乱码一区二区三区在线观看 | 久久精品av麻豆的观看方式 | 国产一卡二卡三卡 | 中国美女av | 搞黄网站在线观看 | 久久不射网 | 91在线免费视频 | 久草中文在线 | 国产精品久久久久久久免费大片 | 久久丁香| 欧美伊人久久久久久久久影院 | 国产自产c区| 日韩一 | 一本大道久久a久久精二百 国产成人免费在线 | 精品成人| 黄色大片观看 | 中文字幕一区在线 | 日韩成人精品一区 | 国产精品中文字幕在线 | 美女黄18岁以下禁止观看 | 免费观看一级特黄欧美大片 | 欧美最猛性xxxxx亚洲精品 | 国产女人与拘做受视频 | 国产一区二区三区四区 | 欧美一区二区三区在线播放 |