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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

ADS1256的51單片機(jī)和stm32程序源碼

  [復(fù)制鏈接]
ID:417139 發(fā)表于 2018-10-29 11:13 | 顯示全部樓層 |閱讀模式
stm32f103c8t6d的和51的都有
0.png

0.png
一、    概述
艾爾賽ADS1256 8路24位ADC模塊搭載TI ADS1256IDB 微功耗、高精度ADC芯片以及2.5V基準(zhǔn)電壓源,SPI接口通信,數(shù)據(jù)輸出速率可達(dá)30ksps,支持單端和差分輸入。
二、    功能特點(diǎn)   
板載高精度ADS1256IDB ADC芯片;
板載ADR03 2.5V電源基準(zhǔn)芯片;
數(shù)據(jù)輸出速率可達(dá)30ksps,低非線性度為±0.0010%;
模塊可配置為8路單端輸入或4路差分輸入;
ADS1256模塊適用于測量3V以內(nèi)的模擬電壓;
    模塊工作電壓5V;
三、 硬件介紹和說明
板子尺寸:35*60mm
板子功能說明:
1、接口說明:
5V、GND:5V電源輸入;
    SCLK、DIN、DOUT、CS:SPI通信接口;
DRDY:ADS1256數(shù)據(jù)就緒輸出(低電平有效);
PDWN:ADS1256同步/關(guān)閉電源輸入(低電平有效);
AIN0-AIN7:模擬電壓輸入端,可作為8路獨(dú)立的單端輸入或4組差分輸入(被測電壓應(yīng)與模塊共地)。
由于ADS1256的電源電壓為5V,而被測電壓應(yīng)比電源電壓低2V,所以模塊只適用于測量3V以內(nèi)的模擬電壓。
模塊提供STC15W&&STM32 單片機(jī)8路串口顯示參考程序以及STC89C52單片機(jī)4路1602_LCD顯示參考程序,其中STC89C52單片機(jī)+1602LCD液晶簡單測試方法如下:
5V、GND接DC 5V電源,SCLK、DIN、DOUT、DRDY、CS分別接單片機(jī)的P1.2、P1.3、P1.4、P1.5、P1.6,AIN0、AIN1、AIN2、AIN3分別接2.5V、2.5V、2.5V、2.5V(被測電壓應(yīng)該和ADS1256共地),1602液晶上面會顯示4組電壓值,其中第1、2、4組為AIN0、AIN1、AIN3的單端輸入的電壓值,第3組為AIN2-AIN3的差值。4組電壓值分別約為2.5V、2.5V、0V、2.5V。

單片機(jī)源程序如下:

  1. #include <stdio.h>
  2. #include "stm32f10x_gpio.h"
  3. #include "ADS1256.h"


  4. //***************************
  5. //                Pin assign                  
  6. //                        STM32                        ADS1256               
  7. //                GPIOB_Pin_11                 <--- DRDY
  8. //                GPIOB_Pin_12                 ---> CS
  9. //                GPIOB_Pin_13                 ---> SCK
  10. //                GPIOB_Pin_14(MISO)  <--- DOUT
  11. //                GPIOB_Pin_15(MOSI)  ---> DIN
  12. //***************************       

  13. /*端口定義*/

  14. #define RCC_DRDY                        RCC_APB2Periph_GPIOB
  15. #define PORT_DRDY                        GPIOB
  16. #define PIN_DRDY                        GPIO_Pin_11

  17. #define PORT_CS                                GPIOB
  18. #define PIN_CS                                GPIO_Pin_12


  19. #define CS_0()                                GPIO_ResetBits(PORT_CS, PIN_CS);
  20. #define CS_1()                                GPIO_SetBits(PORT_CS, PIN_CS);
  21. #define ADS1256_DRDY                  (PORT_DRDY->IDR & PIN_DRDY)


  22. void SPI2_Init(void)
  23. {
  24. SPI_InitTypeDef  SPI_InitStructure;
  25. GPIO_InitTypeDef GPIO_InitStructure;
  26. /****Initial SPI2******************/

  27. /* Enable SPI2 and GPIOB clocks */
  28. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

  29. RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);
  30. /* Configure SPI2 pins: NSS, SCK, MISO and MOSI */
  31. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
  32. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  33. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  34. GPIO_Init(GPIOB, &GPIO_InitStructure);

  35.   /* SPI2 configuration */
  36. SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; //SPI1設(shè)置為兩線全雙工
  37. SPI_InitStructure.SPI_Mode = SPI_Mode_Master;                    //設(shè)置SPI2為主模式
  38. SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;                  //SPI發(fā)送接收8位幀結(jié)構(gòu)
  39. SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;                   //串行時鐘在不操作時,時鐘為低電平
  40. SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;                 //第一個時鐘沿開始采樣數(shù)據(jù)
  41. SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;                  //NSS信號由軟件(使用SSI位)管理
  42. SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256; //定義波特率預(yù)分頻的值:波特率預(yù)分頻值為8
  43. SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;       //數(shù)據(jù)傳輸從MSB位開始
  44. SPI_InitStructure.SPI_CRCPolynomial = 7;         //CRC值計(jì)算的多項(xiàng)式
  45. SPI_Init(SPI2, &SPI_InitStructure);
  46. /* Enable SPI2  */
  47. SPI_Cmd(SPI2, ENABLE);  
  48. }  

  49. //初始化ADS1256 GPIO
  50. void Init_ADS1256_GPIO(void)
  51. {
  52.     GPIO_InitTypeDef GPIO_InitStructure;
  53.         RCC_APB2PeriphClockCmd(RCC_DRDY, ENABLE);

  54.         GPIO_InitStructure.GPIO_Pin = PIN_DRDY;
  55.           GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  56.           GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  57.           GPIO_Init(PORT_DRDY, &GPIO_InitStructure);
  58.          //SPI2 NSS
  59.         CS_1();
  60.     GPIO_InitStructure.GPIO_Pin = PIN_CS;
  61.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  62.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  63.     GPIO_Init(PORT_CS, &GPIO_InitStructure);
  64.          
  65.         SPI2_Init();
  66. }


  67. //-----------------------------------------------------------------//
  68. //        功    能:  模擬SPI通信
  69. //        入口參數(shù): /        發(fā)送的SPI數(shù)據(jù)
  70. //        出口參數(shù): /        接收的SPI數(shù)據(jù)
  71. //        全局變量: /
  72. //        備    注:         發(fā)送接收函數(shù)
  73. //-----------------------------------------------------------------//
  74. unsigned char SPI_WriteByte(unsigned char TxData)
  75. {
  76.   unsigned char RxData=0;
  77.   while(SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_TXE)==RESET);
  78.   SPI_I2S_SendData(SPI2,TxData);
  79.   while(SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_RXNE)==RESET);
  80.   RxData=SPI_I2S_ReceiveData(SPI2);
  81.   return RxData;
  82. }

  83. //-----------------------------------------------------------------//
  84. //        功    能:ADS1256 寫數(shù)據(jù)
  85. //        入口參數(shù): /
  86. //        出口參數(shù): /
  87. //        全局變量: /
  88. //        備    注: 向ADS1256中地址為regaddr的寄存器寫入一個字節(jié)databyte
  89. //-----------------------------------------------------------------//
  90. void ADS1256WREG(unsigned char regaddr,unsigned char databyte)
  91. {
  92.    
  93.         CS_0();
  94.         while(ADS1256_DRDY);//當(dāng)ADS1256_DRDY為低時才能寫寄存器
  95.         //向寄存器寫入數(shù)據(jù)地址
  96.     SPI_WriteByte(ADS1256_CMD_WREG | (regaddr & 0x0F));
  97.     //寫入數(shù)據(jù)的個數(shù)n-1
  98.     SPI_WriteByte(0x00);
  99.     //向regaddr地址指向的寄存器寫入數(shù)據(jù)databyte
  100.     SPI_WriteByte(databyte);
  101.         CS_1();
  102. }


  103. //初始化ADS1256
  104. void ADS1256_Init(void)
  105. {
  106.         //*************自校準(zhǔn)****************
  107.            while(ADS1256_DRDY);
  108.         CS_0();
  109.         SPI_WriteByte(ADS1256_CMD_SELFCAL);
  110.         while(ADS1256_DRDY);
  111.         CS_1();
  112.         //**********************************

  113.         ADS1256WREG(ADS1256_STATUS,0x06);               // 高位在前、使用緩沖
  114. //        ADS1256WREG(ADS1256_STATUS,0x04);               // 高位在前、不使用緩沖

  115. //        ADS1256WREG(ADS1256_MUX,0x08);                  // 初始化端口A0為‘+’,AINCOM位‘-’
  116.         ADS1256WREG(ADS1256_ADCON,ADS1256_GAIN_1);                // 放大倍數(shù)1
  117.         ADS1256WREG(ADS1256_DRATE,ADS1256_DRATE_10SPS);  // 數(shù)據(jù)10sps
  118.         ADS1256WREG(ADS1256_IO,0x00);               

  119.         //*************自校準(zhǔn)****************
  120.         while(ADS1256_DRDY);
  121.         CS_0();
  122.         SPI_WriteByte(ADS1256_CMD_SELFCAL);
  123.         while(ADS1256_DRDY);
  124.         CS_1();
  125.         //**********************************
  126. }

  127. //讀取AD值
  128. signed int ADS1256ReadData(unsigned char channel)  
  129. {

  130.     unsigned int sum=0;
  131.        
  132.         while(ADS1256_DRDY);//當(dāng)ADS1256_DRDY為低時才能寫寄存器
  133.         ADS1256WREG(ADS1256_MUX,channel);                //設(shè)置通道
  134.         CS_0();
  135.         SPI_WriteByte(ADS1256_CMD_SYNC);
  136.         SPI_WriteByte(ADS1256_CMD_WAKEUP);                      
  137.         SPI_WriteByte(ADS1256_CMD_RDATA);
  138.            sum |= (SPI_WriteByte(0xff) << 16);
  139.         sum |= (SPI_WriteByte(0xff) << 8);
  140.         sum |= SPI_WriteByte(0xff);
  141.         CS_1();

  142.         if (sum>0x7FFFFF)           // if MSB=1,
  143.         {
  144.                 sum -= 0x1000000;       // do 2's complement

  145.         }
  146.     return sum;
  147. }
復(fù)制代碼

所有資料51hei提供下載:
LC-ADC-1256.rar (6.12 MB, 下載次數(shù): 536)
回復(fù)

使用道具 舉報

ID:373064 發(fā)表于 2019-4-2 14:29 | 顯示全部樓層
好材料不錯
回復(fù)

使用道具 舉報

ID:503355 發(fā)表于 2019-4-2 16:28 | 顯示全部樓層
有看門狗的程序嗎?
回復(fù)

使用道具 舉報

ID:187802 發(fā)表于 2019-4-6 15:23 | 顯示全部樓層

不錯,非常感謝
回復(fù)

使用道具 舉報

ID:419072 發(fā)表于 2019-4-10 21:22 來自手機(jī) | 顯示全部樓層
51電平是5v,ads1256電平是3.3v可以直接用么
回復(fù)

使用道具 舉報

ID:512004 發(fā)表于 2019-4-14 16:59 | 顯示全部樓層
if (sum>0x7FFFFF)sum -= 0x1000000;  請問這個什么作用
回復(fù)

使用道具 舉報

ID:512004 發(fā)表于 2019-4-14 17:01 | 顯示全部樓層
if (sum>0x7FFFFF)sum -= 0x1000000;
請問這個是什么作用
回復(fù)

使用道具 舉報

ID:136947 發(fā)表于 2019-5-5 14:54 | 顯示全部樓層
OPOPIIC 發(fā)表于 2019-4-14 17:01
if (sum>0x7FFFFF)sum -= 0x1000000;
請問這個是什么作用

ADS1256在這里被配置成了輸入范圍正負(fù)5V,DOUT輸出的24位轉(zhuǎn)換值,最高位是符號位,當(dāng)輸入為負(fù)電壓時,最高位為1,在這里
if(sum>0x7F FFFF)          //輸入電壓為負(fù)
{
    sum -= 0x10 0000;    //將其視為正電壓
}
,,,,嗯,,,
應(yīng)該是這樣子。
回復(fù)

使用道具 舉報

ID:371752 發(fā)表于 2019-6-5 12:21 | 顯示全部樓層
這個程序?yàn)槭裁次矣玫臅r候發(fā)現(xiàn)全是亂的,都不能正常使用,你們都正常嗎?我代碼也看了感覺沒什么問題啊
回復(fù)

使用道具 舉報

ID:565392 發(fā)表于 2019-6-19 14:33 | 顯示全部樓層
請問一下,我寫了一個程序,配置都是按這樣來的,為什么會在AD1256_Init()里面卡主
回復(fù)

使用道具 舉報

ID:565392 發(fā)表于 2019-6-20 10:36 | 顯示全部樓層
樓主,我后來發(fā)現(xiàn)DRDY那個腳一直是高,這是什么原因
回復(fù)

使用道具 舉報

ID:588192 發(fā)表于 2019-7-26 16:44 | 顯示全部樓層
不能用程序的能不能注明一下
回復(fù)

使用道具 舉報

ID:20672 發(fā)表于 2019-8-2 15:36 | 顯示全部樓層
謝謝分享!~~~~
回復(fù)

使用道具 舉報

ID:603339 發(fā)表于 2019-8-24 14:52 | 顯示全部樓層
51的在壓縮包里么?目前這個 頁面只看到STM32的
回復(fù)

使用道具 舉報

ID:387410 發(fā)表于 2019-9-11 07:41 來自手機(jī) | 顯示全部樓層
樓主很棒,頂一下
回復(fù)

使用道具 舉報

ID:613280 發(fā)表于 2019-9-21 10:29 | 顯示全部樓層
GPIO_InitStructure.GPIO_Pin = PIN_DRDY;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;

DRDY管腳用上拉輸入模式,該管腳不是一直被拉高嗎?程序還能跑下去?
回復(fù)

使用道具 舉報

ID:384276 發(fā)表于 2019-10-20 22:23 | 顯示全部樓層
謝謝樓主分享
回復(fù)

使用道具 舉報

ID:338822 發(fā)表于 2019-10-24 17:36 | 顯示全部樓層
最高速率能到多少 我測得單通道采集最多就2000次
回復(fù)

使用道具 舉報

ID:347158 發(fā)表于 2020-2-23 11:50 | 顯示全部樓層
謝謝分享
回復(fù)

使用道具 舉報

ID:672518 發(fā)表于 2020-5-20 13:45 | 顯示全部樓層
謝謝分享
回復(fù)

使用道具 舉報

ID:711352 發(fā)表于 2020-5-24 13:00 | 顯示全部樓層
正好用到這個芯片,謝謝樓主分享
回復(fù)

使用道具 舉報

ID:388361 發(fā)表于 2020-9-24 19:33 | 顯示全部樓層
最近用這顆i.c,負(fù)壓讀取一直有問題。目前還在解決中。
回復(fù)

使用道具 舉報

ID:920345 發(fā)表于 2021-5-12 22:47 | 顯示全部樓層
樓主的壓縮文件里有ads1256.h的內(nèi)容嗎~?
回復(fù)

使用道具 舉報

ID:921284 發(fā)表于 2021-5-14 16:29 | 顯示全部樓層
感謝分享,51程序在壓縮包里嗎
回復(fù)

使用道具 舉報

ID:1085418 發(fā)表于 2023-6-21 20:20 | 顯示全部樓層
2023年回來考古
回復(fù)

使用道具 舉報

ID:44626 發(fā)表于 2023-12-15 15:26 | 顯示全部樓層
好資料 非常感謝  謝謝支持
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久久久久久久久毛片 | 日韩欧美操| 日韩成人免费视频 | 亚洲精品九九 | 欧美 日韩 视频 | 黄色成人免费在线观看 | 国产一区久久精品 | 欧美日韩在线免费观看 | 国产福利在线视频 | 国产一区二区自拍 | 久久精品小视频 | 国产精品国产精品国产专区不蜜 | 久久av一区二区三区 | 狠狠av| 精品久久久久久亚洲精品 | av毛片在线播放 | 日韩 欧美 综合 | www.免费看片.com| av网站免费在线观看 | 国产精品精品久久久久久 | 午夜看片 | 超碰人人爱 | 国产精品亚洲成在人线 | 久久久久国产视频 | 亚洲 中文 欧美 日韩 在线观看 | 成人高清视频在线观看 | 国产精品久久久久久久久久久免费看 | 亚洲福利视频一区二区 | 欧美一级二级三级视频 | 国产精品久久久久久久久久久久久久 | 国产午夜精品一区二区三区四区 | 亚洲成人一级片 | 国产一区二区三区免费 | 久久中文网 | 一区二区三区不卡视频 | 天天干天天操天天射 | 久久这里有精品 | 四虎影院免费在线播放 | 日本超碰 | 成人午夜性成交 | 欧美久久久久久 |