#include <stdio.h>
        #include <stdlib.h>
        #include <fcntl.h>
        #include <unistd.h>
        #include <math.h>

char iiotype[16][32] = {
                'in_voltage1_raw',
                'in_voltage2_raw',
        };

// return = 0: voltage value from AIN1, unit: mV
        // < 0: failed
        int read_AIN1(float *fvoltage)
        {
                int value, ret = 0;
                char filename[80];
                FILE *fp;
                char buf[20];

sprintf( filename, '/sys/bus/iio/devices/iio:device0/%s', iiotype[0]);
                fp = fopen(filename, 'rt' );
                if( fp==NULL )
                {
                        printf('open %s fail!\n', filename);
                        *fvoltage = 0.0;
                        ret = -1;
                        return ret;
                }
                fread( buf, 1, sizeof(buf), fp );
                fclose(fp);

// convert to integer
                sscanf( buf, '%d', &value );
                *fvoltage = 0.8 * value;
                return ret;
        }

   // return = 0: voltage value from AIN2, unit: mV
        // < 0: failed
        int read_AIN2(float *fvoltage)
        {
                int value, ret = 0;
                char filename[80];
                FILE *fp;
                char buf[20];

sprintf( filename, '/sys/bus/iio/devices/iio:device0/%s', iiotype[1]);
                fp = fopen(filename, 'rt' );
                if( fp==NULL )
                {
                        printf('open %s fail!\n', filename);
                        *fvoltage = 0.0;
                        ret = -1;
                        return ret;
                }
                fread( buf, 1, sizeof(buf), fp );
                fclose(fp);

// convert to integer
                sscanf( buf, '%d', &value );
                *fvoltage = 0.8 * value;
                return ret;
        }

int main(int argc, char** argv)
        {
                int ret = 0;
                float fvalue;

// read AIN1
                ret = read_AIN1(&fvalue);
                if(ret < 0)
                {
                        return ret;
                }
                printf('AIN1 = %.2f mV\n', fvalue);

// read AIN2
                ret = read_AIN2(&fvalue);
                if(ret < 0)
                {
                        return ret;
                }
    
        }

adc 测量子系统的更多相关文章

  1. 利用过采样技术提高ADC测量微弱信号时的分辨率

    1. 引言 随着科学技术的发展,人们对宏观和微观世界逐步了解,越来越多领域(物理学.化学.天文学.军事雷达.地震学.生物医学等)的微弱信号需要被检测,例如:弱磁.弱光.微震动.小位移.心电.脑电等[1 ...

  2. STM32应用实例十四:利用光敏二极管实现光度测量

    最近我们在开发臭氧发生器时,需要监测生成的臭氧的浓度,于是想到使用光度计来测量.因为不同浓度的臭氧对管的吸收作用是不相同的,于是检测光照强度的变化就可以得到相应的浓度数据. 1.硬件设计 此次光照度检 ...

  3. STM32之ADC(内部基准电压,参考电压)

    转 STM32内部参照电压VREFIN的使用 https://blog.csdn.net/uncle_guo/article/details/50625660 每个STM32芯片都有一个内部的参照电压 ...

  4. STM32F103之ADC学习记录

    1.问题 1)10位ADC的误差是多少? 首先要分清分辨率与精度的区别. 10cm的尺子,有100个等分刻度,则该尺子的分辨率为1mm. 但不能说这把尺子的精度是1mm. 在冬天,尺子会热胀冷缩,依然 ...

  5. linux 触摸屏驱动

    目录 linux 触摸屏驱动 输入子系统怎么写? 触摸屏事件 事件分类 事件设置 硬件配置 设计思路 完整程序 测试 ts_lib 使用 问题小结 title: linux 触摸屏驱动 tags: l ...

  6. 【HBase学习】Apache HBase项目简介

    原创声明:转载请注明作者和原始链接 http://www.cnblogs.com/zhangningbo/p/4068957.html       英文原版:http://hbase.apache.o ...

  7. STM32内置参照电压的使用(转)

    源:STM32内置参照电压的使用 每个STM32芯片都有一个内部的参照电压,相当于一个标准电压测量点,在芯片内部连接到ADC1的通道17. 根据数据手册中的数据,这个参照电压的典型值是1.20V,最小 ...

  8. 64脚和小于64脚的STM32进行AD时注意,参照电源处理方法(转)

    源:64脚和小于64脚的STM32进行AD时注意,参照电源处理方法 请注意,ADC_IN17上没有内部基准,将其说成基准电压概念不对. 所以横线以下的理解不对,如果将其做为参考,则其电压假定按1.2V ...

  9. 没有绝对安全的系统:写在AES 256破解之后

    NULL 在理论上,理论和实践是一致的.在实践中,呵呵. ——(应该是)爱因斯坦(说的) (INFO:本文中不会出现公式,请放心阅读) AES 256被破解了? 对于TLNR(Too Long, No ...

随机推荐

  1. java 获取局域网中的全部主机名和IP地址

    DOS命令 命令 意义 net view 获取局域网中的全部主机名 ipconfig -all 获取本地IP,主机名,MAC地址 arp -a 获取本局域网中的全部IP地址和物理地址 ping -a ...

  2. 一个酷绚的linux 桌面程序 GLX-DOCK (cario-dock)

    记录一个酷绚的linux  桌面程序  GLX-DOCK (cario-dock),支持多种风格的桌面主题. http://glx-dock.org/ 优势: 多个workspaces 方便自由切换 ...

  3. [转]什么是C++虚函数、虚函数的作用和使用方法

    我们知道,在同一类中是不能定义两个名字相同.参数个数和类型都相同的函数的,否则就是“重复定义”.但是在类的继承层次结构中,在不同的层次中可以出现名字相同.参数个数和类型都相同而功能不同的函数.例如在例 ...

  4. 呃,如何使 .NET 程序,在 64位 系统 中,以 32位 模式运行。

    其实最简单的方法就是在解决方案中,把平台设为 x86 就好了哈~   但是今天遇到一个第三方的软件,它调用的一个 dll 是 32位 的,可能它没有测试过在 64位 系统下运行的情况,它在编译时是按默 ...

  5. linux分区详解

    点评:如果你想了解linux分区,请务必认真阅读本文.对于初学者来说,linux分区不像windows下那么一目了解.    Linux 分区的规定      1. 设备管理 在 Linux 中,每一 ...

  6. 【Unity】4.3 地形编辑器

    分类:Unity.C#.VS2015 创建日期:2016-04-10 一.简介 Unity拥有功能完善的地形编辑器,支持以笔刷绘制的方式实时雕刻出山脉.峡谷.平原.高地等地形.Unity地形编辑器同时 ...

  7. 制做rpm包工具fpm安装

    安装ruby模块 [root@c01 ~]# yum install ruby rubygems ruby-devel -y # 查看当前使用的rubygems仓库 [root@c01 ~]# gem ...

  8. React 设计思想

    https://github.com/react-guide/react-basic React 设计思想 译者序:本文是 React 核心开发者.有 React API 终结者之称的 Sebasti ...

  9. [Windows Azure] How to Deploy a Database to Windows Azure

    How to Deploy a Database to Windows Azure There are several different ways you can move an on-premis ...

  10. psycopg使用

    1.使用示例 import psycopg2 # 建立数据库连接 conn = psycopg2.connect("dbname=test user=postgres") # 开启 ...