×
半导体制造 > 材料技术 > 详情

树莓派开发ADC芯片CS1237(C语言和python库开发)

发布时间:2020-05-16 发布时间:
|

  一、准备工作

  1.安装树莓派官方系统

  2.安装wiringpi库

  1) sudo geit clone git://git.drogon.net/wiringPi

  2) sudo apt-get install git-core

  3) cd wieingPi

  4) sudo 。/build

  安装结束之后

  运行命令 gpio readall

  

  如果出现这个树莓派引脚图,说明安装成功。进行下一步

  3.新建一个CS1237.c和CS1237.h文件

  CS1237.h

  #ifndef __CS1237__h__

  #define __CS1237__h__

  #include 《stdio.h》

  #include 《wiringPi.h》

  #define SCK 1

  #define DOUT 4

  #define SCK_LOW digitalWrite(SCK,0)

  #define SCK_HIGN digitalWrite(SCK,1)

  //树莓派wiring引脚对应关系如下

  //AD转换数值与实际重量的增益// #include 《Python.h》static double CS1237P = 0.0078742;

  //初始化void CS1237Init()

  {

  wiringPiSetup();

  pinMode(SCK,OUTPUT);

  pinMode(DOUT,INPUT);

  pullUpDnControl(DOUT,PUD_UP);

  SCK_LOW;

  }//是否转换完毕int CS1237isReady()

  {

  if(digitalRead(DOUT)==0)

  {

  return 1;

  }

  return 0;

  }//配置函数void CS1237Config()

  {

  //no op

  }//一次上升沿void CS1237ClockUp()

  {

  SCK_LOW;

  delayMicroseconds(10);

  SCK_HIGN;

  delayMicroseconds(10);

  }//读数据int CS1237Read()

  {

  int tmp=0;

  int now=0;

  int i;

  int num=100;

  while(!CS1237isReady())

  {

  ;

  }

  for(i=0;i《23;i++)

  {

  SCK_LOW;

  delayMicroseconds(10);

  SCK_HIGN;

  delayMicroseconds(10);

  now = digitalRead(DOUT);

  //printf(“%d,”,now );

  tmp *=2;

  tmp = tmp+now;

  SCK_LOW;

  }

  SCK_LOW;

  CS1237ClockUp();

  CS1237ClockUp();

  CS1237ClockUp();

  SCK_LOW;

  return tmp;

  }

  //得到平均立波得到实际数值//num:采样次数int getValue(int num)

  {

  int i=0;

  int tmp=0;

  long weight = 0;

  for(i=0;i《num;i++)

  {

  tmp = CS1237Read();

  weight =weight + tmp;

  }

  return weight/num;

  }int getHelp(int num)

  {

  return num*3;

  }#endif

  CS1237.c

  #include “CS1237.h”int main()

  {

  int tmp,Orign;

  printf(“hello rasp %s\n”,“dsc” );

  //初始化CS1237

  CS1237Init();

  //得到初试点(0点校正)

  Orign = getValue(200);

  printf(“Orign value is %d\n”, Orign);

  while(1)

  {

  tmp = getValue(100);

  printf(“now is %lf\n”, (tmp-Orign)*CS1237P);

  }

  }

  代码写好之后在同目录下编译:

  gcc CS1237.c -o test -lwiringPi

  运行

  。/test

  

  

  

  二、将程序封装为python可调用的库

  python 调用C的方式:

  新建一个CS1237.如下

  #include 《stdio.h》

  #include 《wiringPi.h》

  #define SCK 1

  #define DOUT 4

  #define SCK_LOW digitalWrite(SCK,0)

  #define SCK_HIGN digitalWrite(SCK,1)

  //树莓派wiring引脚对应关系如下

  //AD转换数值与实际重量的增益#include 《Python.h》static double CS1237P = 0.0078742;

  //初始化void CS1237Init()

  {

  wiringPiSetup();

  pinMode(SCK,OUTPUT);

  pinMode(DOUT,INPUT);

  pullUpDnControl(DOUT,PUD_UP);

  SCK_LOW;

  }//是否转换完毕int CS1237isReady()

  {

  if(digitalRead(DOUT)==0)

  {

  return 1;

  }

  return 0;

  }//配置函数void CS1237Config()

  {

  //no op

  }//一次上升沿void CS1237ClockUp()

  {

  SCK_LOW;

  delayMicroseconds(10);

  SCK_HIGN;

  delayMicroseconds(10);

  }//读数据int CS1237Read()

  {

  int tmp=0;

  int now=0;

  int i;

  int num=100;

  while(!CS1237isReady())

  {

  }

  for(i=0;i《23;i++)

  {

  SCK_LOW;

  delayMicroseconds(10);

  SCK_HIGN;

  delayMicroseconds(10);

  now = digitalRead(DOUT);

  //printf(“%d,”,now );

  tmp *=2;

  tmp = tmp+now;

  SCK_LOW;

  }

  SCK_LOW;

  CS1237ClockUp();

  CS1237ClockUp();

  CS1237ClockUp();

  SCK_LOW;

  return tmp;

  }

  //得到平均立波得到实际数值//num:采样次数

  int getValue(int num)

  {

  int i=0;

  int tmp=0;

  long weight = 0;

  for(i=0;i《num;i++)

  {

  tmp = CS1237Read();

  weight =weight + tmp;

  }

  return weight/num;

  }

  int getHelp(int num);

  {

  return num*3;

  }

  PyObject * wrap_getValue(PyObject *self,PyObject *args)

  {

  int num;

  int weight;

  if(!PyArg_ParseTuple(args,“i:getValue”,&num))

  return NULL;

  weight = getValue(num);

  return Py_BuildValue(“i”,weight);

  }

  PyObject * wrap_getHelp(PyObject *self,PyObject *args)

  {

  int num;

  int weight;

  if(!PyArg_ParseTuple(args,“i:getValue”,&num))

  return NULL;

  weight = getHelp(num);

  return Py_BuildValue(“i”,weight);

  }

  PyObject * wrap_CS1237Init(PyObject *self,PyObject *args)

  {

  int num;

  int weight;

  CS1237Init();

  return NULL;

  }static PyMethodDef CS1237Methods[]=

  {

  {“getValue”,wrap_getValue,METH_VARARGS,“get weignt adc valie”},

  {“getHelp”,wrap_getHelp,METH_VARARGS,“get help adc valie”},

  {“CS1237Init”,wrap_CS1237Init,METH_VARARGS,“get help adc valie”},

  {NULL,NULL}

  };

  void initCS1237()

  {

  PyObject *m;

  CS1237Init();

  m = Py_InitModule(“CS1237”,CS1237Methods);

  }

  然后交叉编译:

  命令代码(路径按照自己的)

  gcc -fPIC CS1237.c -o CS1237.so -shared -I/usr/include/python2.7 -I/usr/lib/python2.7/config

  然后在此目录下新建一个test.py验证一下:

  5) # test.py

  6) # coding=utf-8

  7) import CS1237

  8) tmp = CS1302.getValue(20)

  9) print temp

  执行python test.py 运行结果出来了:

  33077


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
PCB中via与pad有什么区别