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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

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

[復制鏈接]
跳轉到指定樓層
樓主
ID:616761 發表于 2019-9-26 16:20 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
內含ADS111配置代碼以及IIC通訊驅動

單片機源程序如下:
  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) //數據從高位到低位//
  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) //數據從高位到低位//
  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. * 入口參數:id:設備地址;write_address寄存器 ;byte1:高字節配置;byte2:低字節 最高轉換速度  
  147. * 出口參數: 無
  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);//發送數據   
  158.         while(!I2C_WaitAck());   
  159.         I2C_SendByte(byte2);//發送數據   
  160.         while(!I2C_WaitAck());   
  161.         I2C_Stop();         
  162.         I2C_delay();
  163.         I2C_delay();   
  164. }

  165. /****************************************************************************
  166. * 名    稱: I2C_AD1115_Point
  167. * 功    能: 指向ADS1115內部特定的寄存器
  168. * 入口參數: id:設備地址;write_address寄存器
  169. * 出口參數: 無  
  170. * 說    明: 指向ADS1115內部特定的寄存器  
  171. ****************************************************************************/
  172. void I2C_AD1115_Point(unsigned char id,unsigned char write_address)
  173. {  
  174.         while(!I2C_Start());  
  175.         //產生起始條件
  176.         I2C_SendByte(id);//寫器件地址
  177.         //向設備發送設備地址  
  178.         while(!I2C_WaitAck());  
  179.         //等待ACK   
  180.         I2C_SendByte(write_address);//發送數據
  181.         //寄存器地址
  182.         while(!I2C_WaitAck());   
  183.         I2C_Stop();   
  184.         //產生結束信號
  185. }  
  186. /****************************************************************************
  187. * 名    稱: I2C_Read2
  188. * 功    能: 讀ADS1115轉換結果  
  189. * 入口參數: id:設備地址;read_address寄存器地址
  190. * 出口參數: 無
  191. * 說    明: 轉換的值放在BUF【2】
  192. ****************************************************************************/
  193. void I2C_Read2(unsigned char  id, unsigned char read_address)   
  194. {           
  195.         while(!I2C_Start());  
  196.         //產生起始條件
  197.         I2C_SendByte(id);//寫器件地址  
  198.         //發送地址   
  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. * 入口參數: 通道0、1、2、3
  211. * 出口參數: 采樣值
  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, 下載次數: 39)


評分

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

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人动慢 | 亚洲国产网| 视频在线观看一区二区 | 亚洲一区二区不卡在线观看 | 日本一区二区三区视频在线 | 欧美精品网站 | 亚洲视频网 | 精品久久久久久红码专区 | 男女午夜免费视频 | 一区二区三区四区免费视频 | 亚州成人 | 欧美一区二区三区小说 | 中文字幕免费视频 | 国产高清在线观看 | 成人在线电影在线观看 | 免费视频99 | 一级毛片黄片 | 精品欧美一区二区精品久久 | 日韩欧美一区二区三区 | 一区二区手机在线 | 日韩美女在线看免费观看 | 青青久久久 | 成人亚洲精品 | 日本一卡精品视频免费 | 久久爱综合 | 成人国产午夜在线观看 | av天天看 | 一区二区久久 | 一区二区三区四区免费在线观看 | 国产一二三区电影 | 精品国产一区二区国模嫣然 | 欧美黄色录像 | 国产在线第一页 | 欧美精品一区二区三区在线播放 | 色999视频 | 亚洲精品区 | 日韩精品成人一区二区三区视频 | 99亚洲精品 | 综合久久av | 亚洲综合无码一区二区 | 亚洲精品电影在线观看 |