树莓派开发ADC芯片CS1237(C语言和python库开发)
来源:互联网 发布:多空通道指标源码 编辑:程序博客网 时间:2024/06/14 23:20
源码地址https://github.com/dyingstraw/CS1237
一、准备工作
1.安装树莓派官方系统
安装树莓派官方系统
2.安装wiringpi库
sudo apt-get install git-coresudo geit clone git://git.drogon.net/wiringPicd wieingPisudo ./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验证一下:
# test.py# coding=utf-8import CS1237tmp = CS1302.getValue(20)print temp
执行python test.py
运行结果出来了:
33077
关于python引用C语言的若干种方式,请参考[Python调用C/C++的种种方法]1
阅读全文
0 0
- 树莓派开发ADC芯片CS1237(C语言和python库开发)
- Java,Python和C依然是主流开发语言
- Python游戏服务器开发日记(七) 关于协程(greenlet)和C语言的思考
- C语言程序>>ADC
- S3C6410开发之ADC(一)
- S3C6410开发之ADC(二)
- S3C6410开发之ADC(三)
- ADC 驱动实例开发
- ADC 驱动实例开发
- C语言开发工具(开发环境)
- 开发工具和Python语言介绍
- C 语言开发(Demo)
- c语言编辑器和集成开发环境
- C语言和汇编语言开发单片机
- 开发和运行C语言的步骤
- iOS开发 兼容OC和C语言
- vim 配置开发python和c
- Python语言开发工具
- 人工智能和机器学习会影响您所选择的会计软件
- 笔记
- 利用jquery-ui插件,做输入邮箱时邮箱自动补全功能
- MarkDown使用笔记
- java设计模式02
- 树莓派开发ADC芯片CS1237(C语言和python库开发)
- Tips:Visual Studio错误error C4996: This function or variable may be unsafe.
- LeetCode 5 Longest Palindromic Substring
- JVM调优总结
- BN(Batch Normalization)要点
- Spring AOP
- 非数字型
- 你所在的公司是如何实施DevOps的?
- Spring MVC的RequestContextHolder使用及误区