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

QQ登錄

只需一步,快速開始

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

CS1238開源驅(qū)動(dòng)代碼

  [復(fù)制鏈接]
ID:487396 發(fā)表于 2021-8-31 23:09 | 顯示全部樓層 |閱讀模式
關(guān)于CS1238開源驅(qū)動(dòng)代碼

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

文件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時(shí)鐘
  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個(gè)SCLK
  54.                         if(SDAT_IN) ad_data++;                       
  55.                 }
  56.                 F_AD_Clock();                                        //第25個(gè)SCLK.
  57.                 F_AD_Clock();                                        //第26個(gè)SCLK.
  58.                 F_AD_Clock();                                        //第27個(gè)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個(gè)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個(gè)SCLK,CS1238自動(dòng)切換DRDY/DOUT 的方向.
  102.                 for(i=38; i<=45; i++)        //第38~45個(gè)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個(gè)SCLK.
  117.                 delay_us(10);
  118.         }
  119.         #endif
  120. }
復(fù)制代碼
51hei.png
所有資料51hei附件下載:
cs238驅(qū)動(dòng)代碼_C_H文件.zip (1.79 KB, 下載次數(shù): 219)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:856722 發(fā)表于 2022-9-13 13:50 | 顯示全部樓層
謝謝樓主,幫了大忙
回復(fù)

使用道具 舉報(bào)

ID:97678 發(fā)表于 2022-10-16 10:44 | 顯示全部樓層
正在想使用這個(gè)開發(fā)一個(gè)4~20mA的采集項(xiàng)目。
回復(fù)

使用道具 舉報(bào)

ID:402026 發(fā)表于 2022-10-16 11:21 | 顯示全部樓層
寫得不錯(cuò),看完也有收獲。
回復(fù)

使用道具 舉報(bào)

ID:684573 發(fā)表于 2022-11-1 08:48 | 顯示全部樓層
感謝樓主分享。一個(gè)芯片公司連個(gè)官方例程都沒有,也是夠差的,那手冊(cè)也寫的了了。
回復(fù)

使用道具 舉報(bào)

ID:427763 發(fā)表于 2022-12-13 11:57 來自觸屏版 | 顯示全部樓層
感謝,樓主我按你的代碼調(diào)試發(fā)現(xiàn)采集的數(shù)值一直不變,請(qǐng)問這是什么問題
回復(fù)

使用道具 舉報(bào)

ID:725732 發(fā)表于 2022-12-25 15:13 | 顯示全部樓層
LEI365 發(fā)表于 2022-11-1 08:48
感謝樓主分享。一個(gè)芯片公司連個(gè)官方例程都沒有,也是夠差的,那手冊(cè)也寫的了了。

我感覺它是和AD通用吧
回復(fù)

使用道具 舉報(bào)

ID:136523 發(fā)表于 2023-1-13 11:49 | 顯示全部樓層
高精度采集芯片,支持下國產(chǎn)
回復(fù)

使用道具 舉報(bào)

ID:1061961 發(fā)表于 2023-2-1 22:27 | 顯示全部樓層
不知道樓主采集穩(wěn)定如何呢?
回復(fù)

使用道具 舉報(bào)

ID:258676 發(fā)表于 2023-4-17 17:02 | 顯示全部樓層
感謝樓主  后備用哦!!
回復(fù)

使用道具 舉報(bào)

ID:321470 發(fā)表于 2024-4-18 11:40 | 顯示全部樓層
CS1231是一樣的用法嗎
回復(fù)

使用道具 舉報(bào)

ID:307779 發(fā)表于 2024-7-18 10:54 | 顯示全部樓層
感謝大佬,我試試看
回復(fù)

使用道具 舉報(bào)

ID:487396 發(fā)表于 2024-9-29 16:55 | 顯示全部樓層
czjdxs 發(fā)表于 2024-4-18 11:40
CS1231是一樣的用法嗎

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

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表