標(biāo)題: CS1238開源驅(qū)動代碼 [打印本頁]

作者: wzlxhtzy    時間: 2021-8-31 23:09
標(biāo)題: CS1238開源驅(qū)動代碼
關(guān)于CS1238開源驅(qū)動代碼

我寫這款芯片驅(qū)動程序時也是參考一些網(wǎng)站,論壇,但是沒有我自己想要的,于是乎我自己根據(jù)芯片手冊自己擼調(diào)試完成,已在項目中使用。

文件C和H通用的,自行添加進(jìn)入工程即可使用。

源程序如下:
  1. #include "CS1238.h"


  2. /******************************************************************************
  3. *函數(shù)名                :CS1238_Init
  4. *參數(shù)                        :無
  5. *返回                        :無
  6. *描述                        :初始化CS1238
  7. ********************************************************************************/
  8. void CS1238_Init(void)
  9. {
  10. #if 1
  11.         GPIO_InitTypeDef GPIO_InitStructure;
  12.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE );
  13.        
  14.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_14;
  15.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ;   //推挽輸出
  16.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  17.         GPIO_Init(GPIOD, &GPIO_InitStructure);
  18.         GPIO_ResetBits(GPIOD, GPIO_Pin_13|GPIO_Pin_14);                 //PD13,PD14 輸出高
  19. #endif
  20. }

  21. /******************************************************************************
  22. *函數(shù)名                :F_AD_Clock
  23. *參數(shù)                        :無
  24. *返回                        :無
  25. *描述                        :AD時鐘
  26. ********************************************************************************/
  27. static void F_AD_Clock(void)               
  28. {
  29.         SCLK = 1;                     //高電平不能超過100uS,否則進(jìn)入powerdown的休眠模式.
  30.         delay_us(5);  
  31.         SCLK = 0;
  32.         delay_us(5);
  33. }

  34. /******************************************************************************
  35. *函數(shù)名                :CS1238_RD_DATA
  36. *參數(shù)                        :無
  37. *返回                        :AD值
  38. *描述                        :CS1238讀AD
  39. ********************************************************************************/
  40. long CS1238_RD_DATA(void)
  41. {       
  42.         unsigned int i;
  43.         long ad_data;

  44.         CS1238_DRDY_IN();
  45.         ad_data = 0;
  46.         SCLK = 0;
  47.         delay_us(10);
  48.         if(!SDAT_IN)
  49.         {
  50.                 for(i=1; i<=24; i++)               
  51.                 {
  52.                         ad_data <<= 1;                                                  
  53.                         F_AD_Clock();                                //1-24個SCLK
  54.                         if(SDAT_IN) ad_data++;                       
  55.                 }
  56.                 F_AD_Clock();                                        //第25個SCLK.
  57.                 F_AD_Clock();                                        //第26個SCLK.
  58.                 F_AD_Clock();                                        //第27個SCLK.                       
  59.         }
  60.                                           
  61.         while(SDAT_IN)
  62.                 delay_us(10);
  63.         return (ad_data^0x800000)/100;
  64. }

  65. /******************************************************************************
  66. *函數(shù)名                :CS1238_WR_CONFIG
  67. *參數(shù)                        :config 寄存器配置值
  68. *返回                        :無
  69. *描述                        :CS1238寫寄存器配置
  70. ********************************************************************************/
  71. void CS1238_WR_CONFIG(u8 config)
  72. {
  73.         #if 1
  74.         u8 i,CMD;
  75.         CS1238_DRDY_IN();                                //配置IO口為輸入
  76.         SCLK = 0;
  77.         delay_us(10);
  78.         if(!SDAT_IN)
  79.         {
  80.                 for(i=1; i<=29; i++)        //第1~29個SCLK.
  81.                 {
  82.                         F_AD_Clock();
  83.                 }
  84.                
  85.                 CS1238_DRDY_OUT();                //配置IO口為輸出
  86.                 CMD = 0X65;                                                //寫配置
  87.                 for(i=30; i<=36; i++)        //30~36寫0X65中低7位,寫配置寄存器命令
  88.                 {               
  89.                         if(CMD & 0x80)
  90.                                 SDAT_OUT = 1;
  91.                         else
  92.                                 SDAT_OUT = 0;
  93.                         delay_us(2);
  94.                         SCLK = 1;                  //高電平不能超過100uS,否則進(jìn)入powerdown的休眠模式.
  95.                         delay_us(5);
  96.                         SCLK = 0;
  97.                         delay_us(5);
  98.                         CMD <<= 1;                                        //最高位移除,留底7位
  99.                 }
  100.                                        
  101.                 F_AD_Clock();                                        //第37個SCLK,CS1238自動切換DRDY/DOUT 的方向.
  102.                 for(i=38; i<=45; i++)        //第38~45個SCLK寫配置寄存器
  103.                 {
  104.                         if(config & 0x80)
  105.                                 SDAT_OUT = 1;
  106.                         else
  107.                                 SDAT_OUT = 0;       
  108.                         delay_us(2);
  109.                         SCLK = 1;                  //高電平不能超過100uS,否則進(jìn)入powerdown的休眠模式.
  110.                         delay_us(5);                                 
  111.                         SCLK = 0;
  112.                         delay_us(5);
  113.                         config <<= 1;
  114.                 }
  115.                 CS1238_DRDY_IN();
  116.                 F_AD_Clock();                                        //第46個SCLK.
  117.                 delay_us(10);
  118.         }
  119.         #endif
  120. }
復(fù)制代碼

所有資料51hei附件下載:
cs238驅(qū)動代碼_C_H文件.zip (1.79 KB, 下載次數(shù): 219)


作者: snopy_2010    時間: 2022-9-13 13:50
謝謝樓主,幫了大忙
作者: jovew    時間: 2022-10-16 10:44
正在想使用這個開發(fā)一個4~20mA的采集項目。
作者: zbfdyw    時間: 2022-10-16 11:21
寫得不錯,看完也有收獲。
作者: LEI365    時間: 2022-11-1 08:48
感謝樓主分享。一個芯片公司連個官方例程都沒有,也是夠差的,那手冊也寫的了了。
作者: 24K大胖子    時間: 2022-12-13 11:57
感謝,樓主我按你的代碼調(diào)試發(fā)現(xiàn)采集的數(shù)值一直不變,請問這是什么問題
作者: tangboxu    時間: 2022-12-25 15:13
LEI365 發(fā)表于 2022-11-1 08:48
感謝樓主分享。一個芯片公司連個官方例程都沒有,也是夠差的,那手冊也寫的了了。

我感覺它是和AD通用吧
作者: 德陽迅諾科技    時間: 2023-1-13 11:49
高精度采集芯片,支持下國產(chǎn)
作者: cougar444888    時間: 2023-2-1 22:27
不知道樓主采集穩(wěn)定如何呢?
作者: qidiao007    時間: 2023-4-17 17:02
感謝樓主  后備用哦!!
作者: czjdxs    時間: 2024-4-18 11:40
CS1231是一樣的用法嗎
作者: a5975211    時間: 2024-7-18 10:54
感謝大佬,我試試看
作者: wzlxhtzy    時間: 2024-9-29 16:55
czjdxs 發(fā)表于 2024-4-18 11:40
CS1231是一樣的用法嗎

參考數(shù)據(jù)手冊,按它的時序來實現(xiàn),一樣的




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1