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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

4通道ADS1120 SPI驅動程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:868131 發表于 2024-10-16 15:12 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  1. #include "ADS1220.h"

  2. void ADS1220SendByte(u8 Byte)
  3. {       
  4.         //HAL_SPI_Transmit(&hspi1,&Byte,1,10);   
  5.         SPI2_ReadWriteByte(Byte);
  6. }
  7. unsigned char ADS1220ReceiveByte()
  8. {
  9.         unsigned char SData = 0xff ,Result = 0;
  10.         Result = SPI2_ReadWriteByte(SData);
  11.         //HAL_SPI_TransmitReceive(&hspi1,&SData,&Result,1,10);

  12.         return Result;
  13. }
  14. /*
  15. ******************************************************************************
  16. higher level functions
  17. */

  18. void ADS1220ReadRegister(int StartAddress, int NumRegs, unsigned * pData)
  19. {
  20.    int i;

  21.         /* send the command byte */
  22.         ADS1220SendByte(ADS1220_CMD_RREG | (((StartAddress<<2) & 0x0c) |((NumRegs-1)&0x03)));
  23.            /* get the register content */
  24.         for (i=0; i< NumRegs; i++)
  25.         {
  26.                 *pData++ = ADS1220ReceiveByte();
  27.         }

  28.         return;
  29. }
  30. void ADS1220WriteRegister(int StartAddress, int NumRegs, unsigned char * pData)
  31. {
  32.         int i;
  33.            /* send the command byte */
  34.         ADS1220SendByte(ADS1220_CMD_WREG | (((StartAddress<<2) & 0x0c) |((NumRegs-1)&0x03)));
  35.     /* send the data bytes */
  36.         for (i=0; i< NumRegs; i++)
  37.         {
  38.                 ADS1220SendByte(*pData++);
  39.         }
  40.            return;
  41. }
  42. void ADS1220SendResetCommand()
  43. {

  44.            /* send the command byte */
  45.         ADS1220SendByte(ADS1220_CMD_RESET);

  46.            return;
  47. }
  48. void ADS1220SendStartCommand()
  49. {

  50.    /* send the command byte */
  51.         ADS1220SendByte(ADS1220_CMD_SYNC);

  52.     return;
  53. }
  54. void ADS1220SendShutdownCommand()
  55. {

  56.            /* send the command byte */
  57.         ADS1220SendByte(ADS1220_CMD_SHUTDOWN);

  58.     return;
  59. }

  60. /* ADS1220 Initial Configuration */
  61. unsigned int test[4];
  62. void ADS1220Init(void)
  63. {
  64.        
  65.         uint8_t ch_cfg[4]={ADS1220_MUX_3_G|ADS1220_GAIN_1|ADS1220_PGA_BYPASS, ADS1220_CC|ADS1220_DR_45, ADS1220_VREF_SUPPLY|ADS1220_PSW_SW_OFF, ADS1220_IDAC1_OFF|ADS1220_IDAC2_OFF};

  66.         ADS1220SendResetCommand();//復位

  67.         delay_ms(100);
  68.         ADS1220WriteRegister(ADS1220_0_REGISTER,4,ch_cfg);//配置4個寄存器
  69.         delay_ms(100);
  70.                
  71.         //ADS1220SendShutdownCommand();
  72.         ADS1220SendStartCommand();
  73. }


  74. long ADS1220ReadData()
  75. {
  76.         long Data;

  77.         /* send the command byte */
  78.         ADS1220SendByte(ADS1220_CMD_RDATA);
  79.         /* get the conversion result */
  80. #ifdef ADS1120
  81.         Data = ADS1220ReceiveByte();
  82.         Data = (Data << 8) | ADS1220ReceiveByte();
  83.         /* sign extend data */
  84.         if (Data & 0x8000)
  85.                 Data |= 0xffff0000;
  86. #else
  87.         Data = ADS1220ReceiveByte();
  88.         Data = (Data << 8) | ADS1220ReceiveByte();
  89.         Data = (Data << 8) | ADS1220ReceiveByte();
  90.         /* sign extend data */
  91.         if (Data & 0x800000)
  92.                 Data |= 0xff000000;
  93. #endif

  94.         return Data;
  95. }


  96. //選擇通道函數
  97. void ADS1220_SelCh(uint8_t ch)
  98. {
  99.         uint8_t cfg[2]={ADS1220_MUX_0_G|ADS1220_GAIN_1|ADS1220_PGA_BYPASS};
  100.        
  101.         switch(ch)
  102.         {
  103.                 case 0://選擇通道0
  104.                         cfg[0] = ADS1220_MUX_0_G|ADS1220_GAIN_1|ADS1220_PGA_BYPASS;
  105.                         ADS1220WriteRegister(ADS1220_0_REGISTER,1,cfg);
  106.                         break;
  107.                 case 1://選擇通道1
  108.                         cfg[0] = ADS1220_MUX_1_G|ADS1220_GAIN_1|ADS1220_PGA_BYPASS;
  109.                         ADS1220WriteRegister(ADS1220_0_REGISTER,1,cfg);
  110.                         break;
  111.                 case 2://選擇通道2
  112.                         cfg[0] = ADS1220_MUX_2_G|ADS1220_GAIN_1|ADS1220_PGA_BYPASS;
  113.                         ADS1220WriteRegister(ADS1220_0_REGISTER,1,cfg);
  114.                         break;
  115.                 case 3://選擇通道3
  116.                         cfg[0] = ADS1220_MUX_3_G|ADS1220_GAIN_1|ADS1220_PGA_BYPASS;
  117.                         ADS1220WriteRegister(ADS1220_0_REGISTER,1,cfg);
  118.                         break;
  119.         }
  120. }


  121. __IO uint16_t ADS1220_Tick = 0;
  122. uint32_t temp,data;
  123. float Vin[4];
  124. //循環讀取4個通道
  125. u32 ADS1220_GetData(void)
  126. {
  127.         static uint8_t ads_ch = 3;//通道選擇
  128.                
  129.   //if(ADS1220_Tick<50)return;
  130.   //ADS1220_Tick=0;
  131.         delay_ms(100);
  132.         //ADS1220ReadRegister(ADS1220_0_REGISTER,4,test);
  133.         switch(ads_ch)
  134.   {
  135.     case 0://讀取通道0 然后切換到通道1
  136.         temp = ADS1220ReadData();
  137.                                 Vin[0] = temp*2.048f/8388608;//轉換為電壓 單位V
  138.                                 ads_ch = 1;
  139.                                 ADS1220_SelCh(ads_ch);
  140.         break;
  141.     case 1://讀取通道1 然后切換到通道2
  142.         temp = ADS1220ReadData();
  143.                                 Vin[1] = temp*2.048f/8388608;//轉換為電壓 單位V
  144.         ads_ch = 2;
  145.                                 ADS1220_SelCh(ads_ch);
  146.         break;
  147.                 case 2://讀取通道2 然后切換到通道3
  148.         temp = ADS1220ReadData();
  149.                                 Vin[2] = temp*2.048f/8388608;
  150.         ads_ch = 3;
  151.                                 ADS1220_SelCh(ads_ch);
  152.         break;
  153.                 case 3://讀取通道3 然后切換到通道0
  154.         temp = ADS1220ReadData();
  155.                                 Vin[3] = (temp*5/32767.0000)+0.0005;
  156.                                 data = ((temp*5/32767.0000)+0.0005)*1000;
  157.         //ads_ch = 0;
  158.                                 ADS1220_SelCh(ads_ch);
  159.         break;
  160.     }
  161.        
  162.                 return temp;
  163. }

復制代碼



ADS1220.h

  1. #ifndef _ADS1220_H
  2. #define _ADS1220_H

  3. #include "spi.h"

  4. #define ADS1220_NO_ERROR           0
  5. #define ADS1220_ERROR                                -1
  6. /* Command Definitions */
  7. #define ADS1220_CMD_RDATA            0x10
  8. #define ADS1220_CMD_RREG             0x20
  9. #define ADS1220_CMD_WREG             0x40
  10. #define ADS1220_CMD_SYNC            0x08
  11. #define ADS1220_CMD_SHUTDOWN    0x02
  12. #define ADS1220_CMD_RESET            0x06
  13. /* ADS1220 Register Definitions */
  14. #define ADS1220_0_REGISTER           0x00
  15. #define ADS1220_1_REGISTER             0x01
  16. #define ADS1220_2_REGISTER             0x02
  17. #define ADS1220_3_REGISTER            0x03
  18. /* ADS1220 Register 0 Definition */
  19. /*   Bit 7   |   Bit 6   |   Bit 5   |   Bit 4   |   Bit 3   |   Bit 2   |   Bit 1   |   Bit 0
  20. //--------------------------------------------------------------------------------------------
  21. //                     MUX [3:0]                 |             GAIN[2:0]             | PGA_BYPASS
  22. */
  23. /* Define MUX */
  24. #define ADS1220_MUX_0_1           0x00
  25. #define ADS1220_MUX_0_2           0x10
  26. #define ADS1220_MUX_0_3           0x20
  27. #define ADS1220_MUX_1_2           0x30
  28. #define ADS1220_MUX_1_3           0x40
  29. #define ADS1220_MUX_2_3           0x50
  30. #define ADS1220_MUX_1_0           0x60
  31. #define ADS1220_MUX_3_2           0x70
  32. #define ADS1220_MUX_0_G                        0x80
  33. #define ADS1220_MUX_1_G           0x90
  34. #define ADS1220_MUX_2_G           0xa0
  35. #define ADS1220_MUX_3_G           0xb0
  36. #define ADS1220_MUX_EX_VREF 0xc0
  37. #define ADS1220_MUX_AVDD           0xd0
  38. #define ADS1220_MUX_DIV2           0xe0
  39. /* Define GAIN */
  40. #define ADS1220_GAIN_1      0x00
  41. #define ADS1220_GAIN_2      0x02
  42. #define ADS1220_GAIN_4      0x04
  43. #define ADS1220_GAIN_8      0x06
  44. #define ADS1220_GAIN_16     0x08
  45. #define ADS1220_GAIN_32     0x0a
  46. #define ADS1220_GAIN_64     0x0c
  47. #define ADS1220_GAIN_128    0x0e
  48. /* Define PGA_BYPASS */
  49. #define ADS1220_PGA_BYPASS         0x01
  50. /* ADS1220 Register 1 Definition */
  51. /*   Bit 7   |   Bit 6   |   Bit 5   |   Bit 4   |   Bit 3   |   Bit 2   |   Bit 1   |   Bit 0
  52. //--------------------------------------------------------------------------------------------
  53. //                DR[2:0]            |      MODE[1:0]        |     CM    |     TS    |    BCS
  54. */
  55. /* Define DR (data rate) */
  56. #define ADS1220_DR_20                0x00
  57. #define ADS1220_DR_45                0x20
  58. #define ADS1220_DR_90                0x40
  59. #define ADS1220_DR_175                0x60
  60. #define ADS1220_DR_330                0x80
  61. #define ADS1220_DR_600                0xa0
  62. #define ADS1220_DR_1000                0xc0
  63. /* Define MODE of Operation */
  64. #define ADS1220_MODE_NORMAL 0x00
  65. #define ADS1220_MODE_DUTY        0x08
  66. #define ADS1220_MODE_TURBO         0x10
  67. #define ADS1220_MODE_DCT        0x18
  68. /* Define CM (conversion mode) */
  69. #define ADS1220_CC                        0x04
  70. /* Define TS (temperature sensor) */
  71. #define ADS1220_TEMP_SENSOR        0x02
  72. /* Define BCS (burnout current source) */
  73. #define ADS1220_BCS                        0x01
  74. /* ADS1220 Register 2 Definition */
  75. /*   Bit 7   |   Bit 6   |   Bit 5   |   Bit 4   |   Bit 3   |   Bit 2   |   Bit 1   |   Bit 0
  76. //--------------------------------------------------------------------------------------------
  77. //         VREF[1:0]     |        50/60[1:0]     |    PSW    |             IDAC[2:0]
  78. */
  79. /* Define VREF */
  80. #define ADS1220_VREF_INT        0x00
  81. #define ADS1220_VREF_EX_DED        0x40
  82. #define ADS1220_VREF_EX_AIN        0x80
  83. #define ADS1220_VREF_SUPPLY        0xc0
  84. /* Define 50/60 (filter response) */
  85. #define ADS1220_REJECT_OFF        0x00
  86. #define ADS1220_REJECT_BOTH        0x10
  87. #define ADS1220_REJECT_50        0x20
  88. #define ADS1220_REJECT_60        0x30
  89. /* Define PSW (low side power switch) */
  90. #define ADS1220_PSW_SW                0x08
  91. #define ADS1220_PSW_SW_OFF                0x00
  92. /* Define IDAC (IDAC current) */
  93. #define ADS1220_IDAC_OFF        0x00
  94. #define ADS1220_IDAC_10                0x01
  95. #define ADS1220_IDAC_50                0x02
  96. #define ADS1220_IDAC_100        0x03
  97. #define ADS1220_IDAC_250        0x04
  98. #define ADS1220_IDAC_500        0x05
  99. #define ADS1220_IDAC_1000        0x06
  100. #define ADS1220_IDAC_2000        0x07
  101. /* ADS1220 Register 3 Definition */
  102. /*   Bit 7   |   Bit 6   |   Bit 5   |   Bit 4   |   Bit 3   |   Bit 2   |   Bit 1   |   Bit 0
  103. //--------------------------------------------------------------------------------------------
  104. //               I1MUX[2:0]          |               I2MUX[2:0]          |   DRDYM   | RESERVED
  105. */
  106. /* Define I1MUX (current routing) */
  107. #define ADS1220_IDAC1_OFF        0x00
  108. #define ADS1220_IDAC1_AIN0        0x20
  109. #define ADS1220_IDAC1_AIN1        0x40
  110. #define ADS1220_IDAC1_AIN2        0x60
  111. #define ADS1220_IDAC1_AIN3        0x80
  112. #define ADS1220_IDAC1_REFP0        0xa0
  113. #define ADS1220_IDAC1_REFN0        0xc0
  114. /* Define I2MUX (current routing) */
  115. #define ADS1220_IDAC2_OFF        0x00
  116. #define ADS1220_IDAC2_AIN0        0x04
  117. #define ADS1220_IDAC2_AIN1        0x08
  118. #define ADS1220_IDAC2_AIN2        0x0c
  119. #define ADS1220_IDAC2_AIN3        0x10
  120. #define ADS1220_IDAC2_REFP0        0x14
  121. #define ADS1220_IDAC2_REFN0        0x18
  122. /* define DRDYM (DOUT/DRDY behaviour) */
  123. #define ADS1220_DRDY_MODE        0x02

  124. #define ADS1120

  125. extern float Vin[4];

  126. void ADS1220Init(void);
  127. void ADS1220Config(unsigned char ch);
  128. u32 ADS1220_GetData(void);       

  129. #endif
復制代碼


評分

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

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产亚洲欧美另类一区二区三区 | 欧美精品成人 | 久久久久国产精品一区二区 | 精品99久久| 欧美一区二区视频 | 奇米超碰 | 国产高清精品一区二区三区 | 91精品国产一区二区三区香蕉 | 午夜寂寞影院在线观看 | 国产一级一片免费播放 | 亚洲精品一区中文字幕乱码 | 天堂久久网 | 欧美二区在线 | 亚洲国产精品成人综合久久久 | 日韩成人影院在线观看 | 欧美激情视频一区二区三区在线播放 | 成年人网站免费 | 狠狠操电影 | 日韩精品一区二区三区在线观看 | 91精品综合久久久久久五月天 | 成人性生交大片 | 欧美在线视频一区二区 | 成人在线一区二区 | 亚洲欧美国产毛片在线 | 91亚洲精| 一级全黄少妇性色生活免费看 | 久久精品一区二区三区四区 | 日韩性在线| 九九热视频这里只有精品 | 91pron在线| 九九热在线视频观看这里只有精品 | 亚洲视频手机在线 | 欧美福利专区 | 久久www免费人成看片高清 | 久久99精品久久久久久 | 黄色免费观看 | 免费在线观看黄网站 | 久久久综合网 | 精品视频免费 | 自拍偷拍中文字幕 | 亚洲精品国产电影 |