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

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

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 4672|回復(fù): 3
收起左側(cè)

求助關(guān)AD7705雙通道STC15F2K60S2單片機(jī)讀取問(wèn)題

[復(fù)制鏈接]
ID:38631 發(fā)表于 2018-6-10 13:25 | 顯示全部樓層 |閱讀模式
STC15F2K60S2、晶振11.0592、AD7705晶振2.4576、基準(zhǔn)2.485V、串口波特率9600
AIN1和AIN2并聯(lián)同時(shí)接輸入信號(hào)67mV左右下面是串口接收到的不同增益時(shí)讀到的數(shù)據(jù)
CH1: 1                                CH2: 16
CH1=28047 ( 2139mV) CH2=28352 ( 2163mV)
CH1=28047 ( 2139mV) CH2=28352 ( 2163mV)
CH1=28047 ( 2139mV) CH2=28352 ( 2163mV)
CH1=28046 ( 2139mV) CH2=28352 ( 2163mV)
CH1=28046 ( 2139mV) CH2=28351 ( 2163mV)
CH1=28046 ( 2139mV) CH2=28352 ( 2163mV)

CH1: 16                                CH2: 1
CH1= 2035 (  155mV) CH2= 1772 (  135mV)
CH1= 2035 (  155mV) CH2= 1772 (  135mV)
CH1= 2035 (  155mV) CH2= 1772 (  135mV)
CH1= 2035 (  155mV) CH2= 1772 (  135mV)
CH1= 2035 (  155mV) CH2= 1772 (  135mV)
CH1= 2035 (  155mV) CH2= 1772 (  135mV)

CH1: 1                                  CH2: 1
CH1= 1772 (  135mV) CH2= 1772 (  135mV)
CH1= 1773 (  135mV) CH2= 1772 (  135mV)
CH1= 1773 (  135mV) CH2= 1772 (  135mV)
CH1= 1772 (  135mV) CH2= 1772 (  135mV)
CH1= 1773 (  135mV) CH2= 1772 (  135mV)
CH1= 1773 (  135mV) CH2= 1772 (  135mV)

CH1: 16                                CH2: 16
CH1=28354 ( 2163mV) CH2=28352 ( 2163mV)
CH1=28355 ( 2163mV) CH2=28351 ( 2163mV)
CH1=28355 ( 2163mV) CH2=28352 ( 2163mV)
CH1=28355 ( 2163mV) CH2=28351 ( 2163mV)
CH1=28355 ( 2163mV) CH2=28351 ( 2163mV)
CH1=28355 ( 2163mV) CH2=28352 ( 2163mV)

兩個(gè)通道設(shè)不同增益時(shí)讀到的數(shù)據(jù)不對(duì)
程序是本站找的按電路改了一下請(qǐng)各位幫忙看一下哪里不對(duì)。

以下是部分代碼
  1.         uint16_t adc1, adc2;
  2.         
  3.         bsp_InitTM7705();                        /* 初始化配置TM7705 */

  4.         TM7705_CalibSelf(1);                /* 自校準(zhǔn)。執(zhí)行時(shí)間較長(zhǎng),約180ms */               
  5.         adc1 = TM7705_ReadAdc(1);                                
  6.         
  7.         TM7705_CalibSelf(2);                /* 自校準(zhǔn)。執(zhí)行時(shí)間較長(zhǎng),約180ms */
  8.         adc2 = TM7705_ReadAdc(2);        
  9.         
  10.         while (1)
  11.         {        
  12.                 bsp_Idle();               

  13.                 #if 1        
  14.                         /* 雙通道切換采樣,執(zhí)行一輪實(shí)際那約 160ms */                        
  15.                         adc1 = TM7705_ReadAdc(1);        /* 執(zhí)行時(shí)間 80ms */               
  16.                         adc2 = TM7705_ReadAdc(2);        /* 執(zhí)行時(shí)間 80ms */
  17.                 #else
  18.                         /* 如果只采集1個(gè)通道,則刷新速率 50Hz (缺省設(shè)置的,最大可以設(shè)置為500Hz) */
  19.                         adc1 = TM7705_ReadAdc(1);        /* 執(zhí)行時(shí)間 20ms (50Hz速率刷新時(shí)) */               
  20.                         adc2 = 0;
  21.                 #endif
  22.                         
  23.                 /* 打印采集數(shù)據(jù) */
  24.                 {
  25.                         int volt1, volt2;
  26.                         
  27.                         /* 計(jì)算實(shí)際電壓值(近似估算的),如需準(zhǔn)確,請(qǐng)進(jìn)行校準(zhǔn) */
  28.                         volt1 = ((int32_t)adc1 * 5000) / 65535;
  29.                         volt2 = ((int32_t)adc2 * 5000) / 65535;
  30.                         
  31.                         /* 打印ADC采樣結(jié)果 */        
  32.                         printf("CH1=%5ld (%5dmV) CH2=%5ld (%5dmV)\r\n", (long int)adc1, volt1, (long int)adc2, volt2);
  33.                 }
  34.         }
復(fù)制代碼
  1. /*
  2. *********************************************************************************************************
  3. *
  4. *        模塊名稱 : TM7705 驅(qū)動(dòng)模塊(2通道帶PGA的16位ADC)
  5. *        文件名稱 : bsp_tm7705.c
  6. *        版    本 : V1.0
  7. *        說(shuō)    明 : TM7705模塊和CPU之間采用SPI接口。本驅(qū)動(dòng)程序支持軟件SPI接口。
  8. *
  9. *        修改記錄 :
  10. *                版本號(hào)  日期        作者     說(shuō)明
  11. *                V1.0    2013-10-20  armfly  正式發(fā)布
  12. *
  13. *        Copyright (C), 2013-2014, 安富萊電子 www.armfly.com
  14. *
  15. *********************************************************************************************************
  16. */

  17. #include "bsp.h"

  18. #define SOFT_SPI                /* 定義此行表示使用GPIO模擬SPI接口 */
  19. //#define HARD_SPI                /* 定義此行表示使用CPU的硬件SPI接口 */

  20. /* 通道1和通道2的增益,輸入緩沖,極性 */
  21. #define __CH1_GAIN_BIPOLAR_BUF        (GAIN_1 | UNIPOLAR | BUF_EN)
  22. #define __CH2_GAIN_BIPOLAR_BUF        (GAIN_16 | UNIPOLAR | BUF_EN)

  23. /*                                                                                
  24.         接線方法: STC89C52開(kāi)發(fā)板,請(qǐng)使用杜邦線連接。

  25.     TM7705模塊   STC89C52開(kāi)發(fā)板
  26.       VCC   ------  5.0V (3.3V)
  27.       GND   ------  GND
  28.       CS    ------  P1.0
  29.       RST   ------  P1.1   
  30.       DIN   ------  P1.2
  31.           SCK   ------  P1.3
  32.       DOUT  ------  P1.4
  33.       DRDY  ------  P1.5        
  34. */

  35. #if !defined(SOFT_SPI) && !defined(HARD_SPI)
  36.          #error "Please define SPI Interface mode : SOFT_SPI or HARD_SPI"
  37. #endif

  38. #ifdef SOFT_SPI                /* 軟件SPI */
  39.         /* 定義GPIO端口 */
  40.         sbit CS     = P1^0;
  41.         sbit RESET  = P1^1;
  42.         sbit DIN    = P3^7;
  43.         sbit SCK    = P4^1;
  44.         sbit DOUT   = P3^6;
  45.         sbit DRDY        = P3^5;

  46.         /* 定義口線置0和置1的宏 */
  47.         #define CS_0()                CS = 0
  48.         #define CS_1()                CS = 1

  49.         #define RESET_0()        RESET = 0
  50.         #define RESET_1()        RESET = 1

  51.         #define DI_0()                DIN = 0
  52.         #define DI_1()                DIN = 1

  53.         #define SCK_0()                SCK = 0
  54.         #define SCK_1()                SCK = 1

  55.         #define DO_IS_HIGH()        (DOUT != 0)

  56.         #define DRDY_IS_LOW()        (DRDY == 0)
  57. #endif

  58. #ifdef HARD_SPI                /* 硬件SPI */
  59.         #error "Don't surport Hard SPI Interface mode"
  60. #endif

  61. /* 通信寄存器bit定義 */
  62. enum
  63. {
  64.         /* 寄存器選擇  RS2 RS1 RS0  */
  65.         REG_COMM        = 0x00,        /* 通信寄存器 */
  66.         REG_SETUP        = 0x10,        /* 設(shè)置寄存器 */
  67.         REG_CLOCK        = 0x20,        /* 時(shí)鐘寄存器 */
  68.         REG_DATA        = 0x30,        /* 數(shù)據(jù)寄存器 */
  69.         REG_ZERO_CH1        = 0x60,        /* CH1 偏移寄存器 */
  70.         REG_FULL_CH1        = 0x70,        /* CH1 滿量程寄存器 */
  71.         REG_ZERO_CH2        = 0x61,        /* CH2 偏移寄存器 */
  72.         REG_FULL_CH2        = 0x71,        /* CH2 滿量程寄存器 */

  73.         /* 讀寫(xiě)操作 */
  74.         WRITE                 = 0x00,        /* 寫(xiě)操作 */
  75.         READ                 = 0x08,        /* 讀操作 */

  76.         /* 通道 */
  77.         CH_1                = 0,        /* AIN1+  AIN1- */
  78.         CH_2                = 1,        /* AIN2+  AIN2- */
  79.         CH_3                = 2,        /* AIN1-  AIN1- */
  80.         CH_4                = 3                /* AIN1-  AIN2- */
  81. };

  82. /* 設(shè)置寄存器bit定義 */
  83. enum
  84. {
  85.         MD_NORMAL                = (0 << 6),        /* 正常模式 */
  86.         MD_CAL_SELF                = (1 << 6),        /* 自校準(zhǔn)模式 */
  87.         MD_CAL_ZERO                = (2 << 6),        /* 校準(zhǔn)0刻度模式 */
  88.         MD_CAL_FULL                = (3 << 6),        /* 校準(zhǔn)滿刻度模式 */

  89.         GAIN_1                        = (0 << 3),        /* 增益 */
  90.         GAIN_2                        = (1 << 3),        /* 增益 */
  91.         GAIN_4                        = (2 << 3),        /* 增益 */
  92.         GAIN_8                        = (3 << 3),        /* 增益 */
  93.         GAIN_16                        = (4 << 3),        /* 增益 */
  94.         GAIN_32                        = (5 << 3),        /* 增益 */
  95.         GAIN_64                        = (6 << 3),        /* 增益 */
  96.         GAIN_128                = (7 << 3),        /* 增益 */

  97.         /* 無(wú)論雙極性還是單極性都不改變?nèi)魏屋斎胄盘?hào)的狀態(tài),它只改變輸出數(shù)據(jù)的代碼和轉(zhuǎn)換函數(shù)上的校準(zhǔn)點(diǎn) */
  98.         BIPOLAR                        = (0 << 2),        /* 雙極性輸入 */
  99.         UNIPOLAR                = (1 << 2),        /* 單極性輸入 */

  100.         BUF_NO                        = (0 << 1),        /* 輸入無(wú)緩沖(內(nèi)部緩沖器不啟用) */
  101.         BUF_EN                        = (1 << 1),        /* 輸入有緩沖 (啟用內(nèi)部緩沖器) */

  102.         FSYNC_0                        = 0,
  103.         FSYNC_1                        = 1                /* 不啟用 */
  104. };

  105. /* 時(shí)鐘寄存器bit定義 */
  106. enum
  107. {
  108.         CLKDIS_0        = 0x00,                /* 時(shí)鐘輸出使能 (當(dāng)外接晶振時(shí),必須使能才能振蕩) */
  109.         CLKDIS_1        = 0x10,                /* 時(shí)鐘禁止 (當(dāng)外部提供時(shí)鐘時(shí),設(shè)置該位可以禁止MCK_OUT引腳輸出時(shí)鐘以省電 */

  110.         /*
  111.                 2.4576MHz(CLKDIV=0 )或?yàn)?4.9152MHz (CLKDIV=1 ),CLK 應(yīng)置 “0”。
  112.                 1MHz (CLKDIV=0 )或 2MHz   (CLKDIV=1 ),CLK 該位應(yīng)置  “1”
  113.         */
  114.         CLK_4_9152M = 0x08,
  115.         CLK_2_4576M = 0x00,
  116.         CLK_1M                 = 0x04,
  117.         CLK_2M                 = 0x0C,

  118.         FS_50HZ                = 0x00,
  119.         FS_60HZ                = 0x01,
  120.         FS_250HZ        = 0x02,
  121.         FS_500HZ        = 0x04,

  122.         /*
  123.                 四十九、電子秤應(yīng)用中提高TM7705 精度的方法
  124.                         當(dāng)使用主時(shí)鐘為 2.4576MHz 時(shí),強(qiáng)烈建議將時(shí)鐘寄存器設(shè)為 84H,此時(shí)數(shù)據(jù)輸出更新率為10Hz,即每0.1S 輸出一個(gè)新數(shù)據(jù)。
  125.                         當(dāng)使用主時(shí)鐘為 1MHz 時(shí),強(qiáng)烈建議將時(shí)鐘寄存器設(shè)為80H, 此時(shí)數(shù)據(jù)輸出更新率為4Hz, 即每0.25S 輸出一個(gè)新數(shù)據(jù)
  126.         */
  127.         ZERO_0                = 0x00,
  128.         ZERO_1                = 0x80
  129. };

  130. static void TM7705_SyncSPI(void);
  131. static void TM7705_Send8Bit(uint8_t _data);
  132. static uint8_t TM7705_Recive8Bit(void);
  133. static void TM7705_WriteByte(uint8_t _data);
  134. static void TM7705_Write3Byte(uint32_t _data);
  135. static uint8_t TM7705_ReadByte(void);
  136. static uint16_t TM7705_Read2Byte(void);
  137. static uint32_t TM7705_Read3Byte(void);
  138. static void TM7705_WaitDRDY(void);
  139. static void TM7705_ResetHard(void);
  140. static void TM7705_Delay(void);

  141. /*
  142. *********************************************************************************************************
  143. *        函 數(shù) 名: bsp_InitTM7705
  144. *        功能說(shuō)明: 配置STM32的GPIO和SPI接口,用于連接 TM7705
  145. *        形    參: 無(wú)
  146. *        返 回 值: 無(wú)
  147. *********************************************************************************************************
  148. */
  149. void bsp_InitTM7705(void)
  150. {
  151. #ifdef SOFT_SPI                /* 軟件SPI */
  152.         /* 配置REST口線為推挽輸出,缺省輸出高電平 */

  153.         /* 配置CS口線為推挽輸出,缺省輸出高電平 */

  154.         /* 配置SCK口線為推挽輸出,缺省輸出高電平 */

  155.         /* 配置DIN口線為推挽輸出,缺省輸出高電平 */

  156.         /* 配置DOUT口線為輸入浮空模式 */

  157.         /* 配置DOUT口線為輸入上拉模式 */
  158. #endif

  159.         bsp_DelayMS(10);

  160.         TM7705_ResetHard();                /* 硬件復(fù)位 */

  161.         /*
  162.                 在接口序列丟失的情況下,如果在DIN 高電平的寫(xiě)操作持續(xù)了足夠長(zhǎng)的時(shí)間(至少 32個(gè)串行時(shí)鐘周期),
  163.                 TM7705 將會(huì)回到默認(rèn)狀態(tài)。
  164.         */
  165.         bsp_DelayMS(5);

  166.         TM7705_SyncSPI();                /* 同步SPI接口時(shí)序 */

  167.         bsp_DelayMS(5);

  168.         /* 配置時(shí)鐘寄存器 */
  169.         TM7705_WriteByte(REG_CLOCK | WRITE | CH_1);                        /* 先寫(xiě)通信寄存器,下一步是寫(xiě)時(shí)鐘寄存器 */

  170.         TM7705_WriteByte(CLKDIS_0 | CLK_2_4576M | FS_50HZ);        /* 刷新速率50Hz */
  171.         //TM7705_WriteByte(CLKDIS_0 | CLK_2_4576M | FS_500HZ);        /* 刷新速率500Hz */

  172.         /* 每次上電進(jìn)行一次自校準(zhǔn) */
  173.         TM7705_CalibSelf(1);        /* 內(nèi)部自校準(zhǔn) CH1 */
  174.         bsp_DelayMS(5);
  175.         /* 配置時(shí)鐘寄存器 */
  176.         TM7705_WriteByte(REG_CLOCK | WRITE | CH_2);                        /* 先寫(xiě)通信寄存器,下一步是寫(xiě)時(shí)鐘寄存器 */

  177.         TM7705_WriteByte(CLKDIS_0 | CLK_2_4576M | FS_50HZ);        /* 刷新速率50Hz */
  178.         //TM7705_WriteByte(CLKDIS_0 | CLK_2_4576M | FS_500HZ);        /* 刷新速率500Hz */

  179.         /* 每次上電進(jìn)行一次自校準(zhǔn) */
  180.         TM7705_CalibSelf(2);        /* 內(nèi)部自校準(zhǔn) CH1 */
  181.         bsp_DelayMS(5);
  182. }

  183. /*
  184. *********************************************************************************************************
  185. *        函 數(shù) 名: TM7705_Delay
  186. *        功能說(shuō)明: CLK之間的延遲,時(shí)序延遲. 對(duì)于51,可以不延遲
  187. *        形    參: 無(wú)
  188. *        返 回 值: 無(wú)
  189. *********************************************************************************************************
  190. */
  191. static void TM7705_Delay(void)
  192. {
  193.         uint16_t i;

  194.         for (i = 0; i < 50; i++);
  195. }

  196. /*
  197. *********************************************************************************************************
  198. *        函 數(shù) 名: TM7705_ResetHard
  199. *        功能說(shuō)明: 硬件復(fù)位 TM7705芯片
  200. *        形    參: 無(wú)
  201. *        返 回 值: 無(wú)
  202. *********************************************************************************************************
  203. */
  204. static void TM7705_ResetHard(void)
  205. {
  206.         RESET_1();
  207.         bsp_DelayMS(1);
  208.         RESET_0();
  209.         bsp_DelayMS(2);
  210.         RESET_1();
  211.         bsp_DelayMS(1);
  212. }

  213. /*
  214. *********************************************************************************************************
  215. *        函 數(shù) 名: TM7705_SyncSPI
  216. *        功能說(shuō)明: 同步TM7705芯片SPI接口時(shí)序
  217. *        形    參: 無(wú)
  218. *        返 回 值: 無(wú)
  219. *********************************************************************************************************
  220. */
  221. static void TM7705_SyncSPI(void)
  222. {
  223.         /* AD7705串行接口失步后將其復(fù)位。復(fù)位后要延時(shí)500us再訪問(wèn) */
  224.         CS_0();
  225.         TM7705_Send8Bit(0xFF);
  226.         TM7705_Send8Bit(0xFF);
  227.         TM7705_Send8Bit(0xFF);
  228.         TM7705_Send8Bit(0xFF);
  229.         CS_1();
  230. }

  231. /*
  232. *********************************************************************************************************
  233. *        函 數(shù) 名: TM7705_Send8Bit
  234. *        功能說(shuō)明: 向SPI總線發(fā)送8個(gè)bit數(shù)據(jù)。 不帶CS控制。
  235. *        形    參: _data : 數(shù)據(jù)
  236. *        返 回 值: 無(wú)
  237. *********************************************************************************************************
  238. */
  239. static void TM7705_Send8Bit(uint8_t _data)
  240. {
  241.         uint8_t i;

  242.         for(i = 0; i < 8; i++)
  243.         {
  244.                 if (_data & 0x80)
  245.                 {
  246.                         DI_1();
  247.                 }
  248.                 else
  249.                 {
  250.                         DI_0();
  251.                 }
  252.                 SCK_0();
  253.                 _data <<= 1;
  254.                 TM7705_Delay();
  255.                 SCK_1();
  256.                 TM7705_Delay();
  257.         }
  258. }

  259. /*
  260. *********************************************************************************************************
  261. *        函 數(shù) 名: TM7705_Recive8Bit
  262. *        功能說(shuō)明: 從SPI總線接收8個(gè)bit數(shù)據(jù)。 不帶CS控制。
  263. *        形    參: 無(wú)
  264. *        返 回 值: 無(wú)
  265. *********************************************************************************************************
  266. */
  267. static uint8_t TM7705_Recive8Bit(void)
  268. {
  269.         uint8_t i;
  270.         uint8_t read = 0;

  271.         for (i = 0; i < 8; i++)
  272.         {
  273.                 SCK_0();
  274.                 TM7705_Delay();
  275.                 read = read<<1;
  276.                 if (DO_IS_HIGH())
  277.                 {
  278.                         read++;
  279.                 }
  280.                 SCK_1();
  281.                 TM7705_Delay();
  282.         }
  283.         return read;
  284. }

  285. /*
  286. *********************************************************************************************************
  287. *        函 數(shù) 名: TM7705_WriteByte
  288. *        功能說(shuō)明: 寫(xiě)入1個(gè)字節(jié)。帶CS控制
  289. *        形    參: _data :將要寫(xiě)入的數(shù)據(jù)
  290. *        返 回 值: 無(wú)
  291. *********************************************************************************************************
  292. */
  293. static void TM7705_WriteByte(uint8_t _data)
  294. {
  295.         CS_0();
  296.         TM7705_Send8Bit(_data);
  297.         CS_1();
  298. }

  299. /*
  300. *********************************************************************************************************
  301. *        函 數(shù) 名: TM7705_Write3Byte
  302. *        功能說(shuō)明: 寫(xiě)入3個(gè)字節(jié)。帶CS控制
  303. *        形    參: _data :將要寫(xiě)入的數(shù)據(jù)
  304. *        返 回 值: 無(wú)
  305. *********************************************************************************************************
  306. */
  307. static void TM7705_Write3Byte(uint32_t _data)
  308. {
  309.         CS_0();
  310.         TM7705_Send8Bit((_data >> 16) & 0xFF);
  311.         TM7705_Send8Bit((_data >> 8) & 0xFF);
  312.         TM7705_Send8Bit(_data);
  313.         CS_1();
  314. }

  315. /*
  316. *********************************************************************************************************
  317. *        函 數(shù) 名: TM7705_ReadByte
  318. *        功能說(shuō)明: 從AD芯片讀取一個(gè)字(16位)
  319. *        形    參: 無(wú)
  320. *        返 回 值: 讀取的字(16位)
  321. *********************************************************************************************************
  322. */
  323. static uint8_t TM7705_ReadByte(void)
  324. {
  325.         uint8_t read;

  326.         CS_0();
  327.         read = TM7705_Recive8Bit();
  328.         CS_1();

  329.         return read;
  330. }

  331. /*
  332. *********************************************************************************************************
  333. *        函 數(shù) 名: TM7705_Read2Byte
  334. *        功能說(shuō)明: 讀2字節(jié)數(shù)據(jù)
  335. *        形    參: 無(wú)
  336. *        返 回 值: 讀取的數(shù)據(jù)(16位)
  337. *********************************************************************************************************
  338. */
  339. static uint16_t TM7705_Read2Byte(void)
  340. {
  341.         uint16_t read;

  342.         CS_0();
  343.         read = TM7705_Recive8Bit();
  344.         read <<= 8;
  345.         read += TM7705_Recive8Bit();
  346.         CS_1();

  347.         return read;
  348. }

  349. /*
  350. *********************************************************************************************************
  351. *        函 數(shù) 名: TM7705_Read3Byte
  352. *        功能說(shuō)明: 讀3字節(jié)數(shù)據(jù)
  353. *        形    參: 無(wú)
  354. *        返 回 值: 讀取到的數(shù)據(jù)(24bit) 高8位固定為0.
  355. *********************************************************************************************************
  356. */
  357. static uint32_t TM7705_Read3Byte(void)
  358. {
  359.         uint32_t read;

  360.         CS_0();
  361.         read = TM7705_Recive8Bit();
  362.         read <<= 8;
  363.         read += TM7705_Recive8Bit();
  364.         read <<= 8;
  365.         read += TM7705_Recive8Bit();
  366.         CS_1();
  367.         return read;
  368. }

  369. /*
  370. *********************************************************************************************************
  371. *        函 數(shù) 名: TM7705_WaitDRDY
  372. *        功能說(shuō)明: 等待內(nèi)部操作完成。 自校準(zhǔn)時(shí)間較長(zhǎng),需要等待。
  373. *        形    參: 無(wú)
  374. *        返 回 值: 無(wú)
  375. *********************************************************************************************************
  376. */
  377. static void TM7705_WaitDRDY(void)
  378. {
  379.         uint32_t i;

  380.         for (i = 0; i < 8000; i++)
  381.         {
  382.                 if (DRDY_IS_LOW())
  383.                 {
  384.                         break;
  385.                 }
  386.         }
  387.         if (i >= 8000)
  388.         {
  389.                 printf("TM7705_WaitDRDY() 芯片應(yīng)答超時(shí) ...\r\n");                /* 調(diào)試語(yǔ)句. 用語(yǔ)排錯(cuò) */

  390.                 printf("重新同步SPI接口時(shí)序\r\n");                /* 調(diào)試語(yǔ)句. 用語(yǔ)排錯(cuò) */

  391.                 TM7705_SyncSPI();                /* 同步SPI接口時(shí)序 */

  392.                 bsp_DelayMS(5);
  393.         }
  394. }

  395. /*
  396. *********************************************************************************************************
  397. *        函 數(shù) 名: TM7705_WriteReg
  398. *        功能說(shuō)明: 寫(xiě)指定的寄存器
  399. *        形    參:  _RegID : 寄存器ID
  400. *                          _RegValue : 寄存器值。 對(duì)于8位的寄存器,取32位形參的低8bit
  401. *        返 回 值: 無(wú)
  402. *********************************************************************************************************
  403. */
  404. void TM7705_WriteReg(uint8_t _RegID, uint32_t _RegValue)
  405. {
  406.         uint8_t bits;

  407.         switch (_RegID)
  408.         {
  409.                 case REG_COMM:                /* 通信寄存器 */
  410.                 case REG_SETUP:                /* 設(shè)置寄存器 8bit */
  411.                 case REG_CLOCK:                /* 時(shí)鐘寄存器 8bit */
  412.                         bits = 8;
  413.                         break;

  414.                 case REG_ZERO_CH1:        /* CH1 偏移寄存器 24bit */
  415.                 case REG_FULL_CH1:        /* CH1 滿量程寄存器 24bit */
  416.                 case REG_ZERO_CH2:        /* CH2 偏移寄存器 24bit */
  417.                 case REG_FULL_CH2:        /* CH2 滿量程寄存器 24bit*/
  418.                         bits = 24;
  419.                         break;

  420.                 case REG_DATA:                /* 數(shù)據(jù)寄存器 16bit */
  421.                 default:
  422.                         return;
  423.         }

  424.         TM7705_WriteByte(_RegID | WRITE);        /* 寫(xiě)通信寄存器, 指定下一步是寫(xiě)操作,并指定寫(xiě)哪個(gè)寄存器 */

  425.         if (bits == 8)
  426.         {
  427.                 TM7705_WriteByte((uint8_t)_RegValue);
  428.         }
  429.         else        /* 24bit */
  430.         {
  431.                 TM7705_Write3Byte(_RegValue);
  432.         }
  433. }

  434. /*
  435. *********************************************************************************************************
  436. *        函 數(shù) 名: TM7705_ReadReg
  437. *        功能說(shuō)明: 寫(xiě)指定的寄存器
  438. *        形    參:  _RegID : 寄存器ID
  439. *                          _RegValue : 寄存器值。 對(duì)于8位的寄存器,取32位形參的低8bit
  440. *        返 回 值: 讀到的寄存器值。 對(duì)于8位的寄存器,取32位形參的低8bit
  441. *********************************************************************************************************
  442. */
  443. uint32_t TM7705_ReadReg(uint8_t _RegID)
  444. {
  445.         uint8_t bits;
  446.         uint32_t read;

  447.         switch (_RegID)
  448.         {
  449.                 case REG_COMM:                /* 通信寄存器 */
  450.                 case REG_SETUP:                /* 設(shè)置寄存器 8bit */
  451.                 case REG_CLOCK:                /* 時(shí)鐘寄存器 8bit */
  452.                         bits = 8;
  453.                         break;

  454.                 case REG_ZERO_CH1:        /* CH1 偏移寄存器 24bit */
  455.                 case REG_FULL_CH1:        /* CH1 滿量程寄存器 24bit */
  456.                 case REG_ZERO_CH2:        /* CH2 偏移寄存器 24bit */
  457.                 case REG_FULL_CH2:        /* CH2 滿量程寄存器 24bit*/
  458.                         bits = 24;
  459.                         break;

  460.                 case REG_DATA:                /* 數(shù)據(jù)寄存器 16bit */
  461.                 default:
  462.                         return 0xFFFFFFFF;
  463.         }

  464.         TM7705_WriteByte(_RegID | READ);        /* 寫(xiě)通信寄存器, 指定下一步是寫(xiě)操作,并指定寫(xiě)哪個(gè)寄存器 */

  465.         if (bits == 16)
  466.         {
  467.                 read = TM7705_Read2Byte();
  468.         }
  469.         else if (bits == 8)
  470.         {
  471.                 read = TM7705_ReadByte();
  472.         }
  473.         else        /* 24bit */
  474.         {
  475.                 read = TM7705_Read3Byte();
  476.         }
  477.         return read;
  478. }

  479. /*
  480. *********************************************************************************************************
  481. *        函 數(shù) 名: TM7705_CalibSelf
  482. *        功能說(shuō)明: 啟動(dòng)自校準(zhǔn). 內(nèi)部自動(dòng)短接AIN+ AIN-校準(zhǔn)0位,內(nèi)部短接到Vref 校準(zhǔn)滿位。此函數(shù)執(zhí)行過(guò)程較長(zhǎng),
  483. *                          實(shí)測(cè)約 180ms
  484. *        形    參:  _ch : ADC通道,1或2
  485. *        返 回 值: 無(wú)
  486. *********************************************************************************************************
  487. */
  488. void TM7705_CalibSelf(uint8_t _ch)
  489. {
  490.         if (_ch == 1)
  491.         {
  492.                 /* 自校準(zhǔn)CH1 */
  493.                 TM7705_WriteByte(REG_SETUP | WRITE | CH_1);        /* 寫(xiě)通信寄存器,下一步是寫(xiě)設(shè)置寄存器,通道1 */
  494.                 TM7705_WriteByte(MD_CAL_SELF | __CH1_GAIN_BIPOLAR_BUF | FSYNC_0);/* 啟動(dòng)自校準(zhǔn) */
  495.                 TM7705_WaitDRDY();        /* 等待內(nèi)部操作完成 --- 時(shí)間較長(zhǎng),約180ms */
  496.         }
  497.         else if (_ch == 2)
  498.         {
  499.                 /* 自校準(zhǔn)CH2 */
  500.                 TM7705_WriteByte(REG_SETUP | WRITE | CH_2);        /* 寫(xiě)通信寄存器,下一步是寫(xiě)設(shè)置寄存器,通道2 */
  501.                 TM7705_WriteByte(MD_CAL_SELF | __CH2_GAIN_BIPOLAR_BUF | FSYNC_0);        /* 啟動(dòng)自校準(zhǔn) */
  502.                 TM7705_WaitDRDY();        /* 等待內(nèi)部操作完成  --- 時(shí)間較長(zhǎng),約180ms */
  503.         }
  504. }

  505. /*
  506. *********************************************************************************************************
  507. *        函 數(shù) 名: TM7705_SytemCalibZero
  508. *        功能說(shuō)明: 啟動(dòng)系統(tǒng)校準(zhǔn)零位. 請(qǐng)將AIN+ AIN-短接后,執(zhí)行該函數(shù)。校準(zhǔn)應(yīng)該由主程序控制并保存校準(zhǔn)參數(shù)。
  509. *                         執(zhí)行完畢后。可以通過(guò) TM7705_ReadReg(REG_ZERO_CH1) 和  TM7705_ReadReg(REG_ZERO_CH2) 讀取校準(zhǔn)參數(shù)。
  510. *        形    參: _ch : ADC通道,1或2
  511. *        返 回 值: 無(wú)
  512. *********************************************************************************************************
  513. */
  514. void TM7705_SytemCalibZero(uint8_t _ch)
  515. {
  516.         if (_ch == 1)
  517.         {
  518.                 /* 校準(zhǔn)CH1 */
  519.                 TM7705_WriteByte(REG_SETUP | WRITE | CH_1);        /* 寫(xiě)通信寄存器,下一步是寫(xiě)設(shè)置寄存器,通道1 */
  520.                 TM7705_WriteByte(MD_CAL_ZERO | __CH1_GAIN_BIPOLAR_BUF | FSYNC_0);/* 啟動(dòng)自校準(zhǔn) */
  521.                 TM7705_WaitDRDY();        /* 等待內(nèi)部操作完成 */
  522.         }
  523.         else if (_ch == 2)
  524.         {
  525.                 /* 校準(zhǔn)CH2 */
  526.                 TM7705_WriteByte(REG_SETUP | WRITE | CH_2);        /* 寫(xiě)通信寄存器,下一步是寫(xiě)設(shè)置寄存器,通道1 */
  527.                 TM7705_WriteByte(MD_CAL_ZERO | __CH2_GAIN_BIPOLAR_BUF | FSYNC_0);        /* 啟動(dòng)自校準(zhǔn) */
  528.                 TM7705_WaitDRDY();        /* 等待內(nèi)部操作完成 */
  529.         }
  530. }

  531. /*
  532. *********************************************************************************************************
  533. *        函 數(shù) 名: TM7705_SytemCalibFull
  534. *        功能說(shuō)明: 啟動(dòng)系統(tǒng)校準(zhǔn)滿位. 請(qǐng)將AIN+ AIN-接最大輸入電壓源,執(zhí)行該函數(shù)。校準(zhǔn)應(yīng)該由主程序控制并保存校準(zhǔn)參數(shù)。
  535. *                         執(zhí)行完畢后?梢酝ㄟ^(guò) TM7705_ReadReg(REG_FULL_CH1) 和  TM7705_ReadReg(REG_FULL_CH2) 讀取校準(zhǔn)參數(shù)。
  536. *        形    參:  _ch : ADC通道,1或2
  537. *        返 回 值: 無(wú)
  538. *********************************************************************************************************
  539. */
  540. void TM7705_SytemCalibFull(uint8_t _ch)
  541. {
  542.         if (_ch == 1)
  543.         {
  544.                 /* 校準(zhǔn)CH1 */
  545.                 TM7705_WriteByte(REG_SETUP | WRITE | CH_1);        /* 寫(xiě)通信寄存器,下一步是寫(xiě)設(shè)置寄存器,通道1 */
  546.                 TM7705_WriteByte(MD_CAL_FULL | __CH1_GAIN_BIPOLAR_BUF | FSYNC_0);/* 啟動(dòng)自校準(zhǔn) */
  547.                 TM7705_WaitDRDY();        /* 等待內(nèi)部操作完成 */
  548.         }
  549.         else if (_ch == 2)
  550.         {
  551.                 /* 校準(zhǔn)CH2 */
  552.                 TM7705_WriteByte(REG_SETUP | WRITE | CH_2);        /* 寫(xiě)通信寄存器,下一步是寫(xiě)設(shè)置寄存器,通道1 */
  553.                 TM7705_WriteByte(MD_CAL_FULL | __CH2_GAIN_BIPOLAR_BUF | FSYNC_0);        /* 啟動(dòng)自校準(zhǔn) */
  554.                 TM7705_WaitDRDY();        /* 等待內(nèi)部操作完成 */
  555.         }
  556. }

  557. /*
  558. *********************************************************************************************************
  559. *        函 數(shù) 名: TM7705_ReadAdc1
  560. *        功能說(shuō)明: 讀通道1或2的ADC數(shù)據(jù)
  561. *        形    參: 無(wú)
  562. *        返 回 值: 無(wú)
  563. *********************************************************************************************************
  564. */
  565. uint16_t TM7705_ReadAdc(uint8_t _ch)
  566. {
  567.         uint8_t i;
  568.         uint16_t read = 0;

  569.         /* 為了避免通道切換造成讀數(shù)失效,讀2次 */
  570.         for (i = 0; i < 2; i++)
  571.         {
  572.                 TM7705_WaitDRDY();                /* 等待DRDY口線為0 */

  573.                 if (_ch == 1)
  574.                 {
  575.                         TM7705_WriteByte(0x38);
  576.                 }
  577.                 else if (_ch == 2)
  578.                 {
  579.                         TM7705_WriteByte(0x39);
  580.                 }

  581.                 read = TM7705_Read2Byte();
  582.         }
  583.         return read;
  584. }
復(fù)制代碼
完整程序連接  
AD7705(串口打印采集數(shù)據(jù)).rar (186.12 KB, 下載次數(shù): 37)
回復(fù)

使用道具 舉報(bào)

ID:225521 發(fā)表于 2018-7-17 00:22 | 顯示全部樓層
我用STC15W4K32S為啥出來(lái)都是芯片讀取超時(shí)
回復(fù)

使用道具 舉報(bào)

ID:588670 發(fā)表于 2019-8-2 16:12 | 顯示全部樓層
ykk楊克坤 發(fā)表于 2018-7-17 00:22
我用STC15W4K32S為啥出來(lái)都是芯片讀取超時(shí)

請(qǐng)問(wèn)您解決了嗎?我也遇到這個(gè)問(wèn)題啦,求助~
回復(fù)

使用道具 舉報(bào)

ID:91901 發(fā)表于 2022-1-14 14:34 | 顯示全部樓層
我也碰到這個(gè)問(wèn)題,也是使用這個(gè)程序,是否這個(gè)程序有什么地方有問(wèn)題?
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 成人在线h| 国产在线一区二 | 欧美 中文字幕 | 国产一区二 | 香蕉av免费| 中文字幕成人av | 91不卡在线| 国产成人免费视频网站视频社区 | 国产97在线 | 日韩 | 欧美激情久久久 | 婷婷综合网 | 国产乱码高清区二区三区在线 | 黄色网络在线观看 | 99精品电影 | 亚洲精品电影在线 | 成人做爰9片免费看网站 | 一区二区三区精品在线视频 | 激情五月综合 | 五月天婷婷综合 | 岛国av一区二区 | 国产成人精品一区二区三区视频 | 成人在线中文字幕 | 中文字幕亚洲精品在线观看 | 免费观看一级特黄欧美大片 | 午夜一级黄色片 | 一区二区三区四区免费视频 | 国产精品久久影院 | 久久精品亚洲一区二区三区浴池 | 夜夜骑天天干 | 97视频精品 | 亚洲高清视频一区二区 | 一区中文字幕 | 亚洲免费在线观看 | 男人的天堂久久 | 污片在线免费观看 | 午夜精品久久久久久久久久久久 | 国产成人精品视频在线观看 | 中文字幕亚洲欧美日韩在线不卡 | 999热精品视频 | 欧洲一区在线观看 | 日韩亚洲视频在线 |