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

char iiotype[16][32] = {
                ''in_voltage0_raw'',
                'in_voltage1_raw',
                'in_voltage2_raw',
                'in_voltage3_raw',
                'in_voltage4_raw',
                'in_voltage5_raw',
                'in_voltage6_raw',
                'in_voltage7_raw'
    };

// return = 0: voltage value from AIN0, unit: mV
        // < 0: failed
        int read_AIN0(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[2]);
                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 AIN3, unit: mV
        // < 0: failed
        int read_AIN3(float *fvoltage)
        {
                int value, ret = 0;
                char filename[80];
                FILE *fp;
                char buf[20];

sprintf( filename, '/sys/bus/iio/devices/iio:device0/%s', iiotype[3]);
                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 AIN4, unit: mV
        // < 0: failed
        int read_AIN4(float *fvoltage)
        {
                int value, ret = 0;
                char filename[80];
                FILE *fp;
                char buf[20];

sprintf( filename, '/sys/bus/iio/devices/iio:device0/%s', iiotype[4]);
                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 AIN5, unit: mV
        // < 0: failed
        int read_AIN5(float *fvoltage)
        {
                int value, ret = 0;
                char filename[80];
                FILE *fp;
                char buf[20];

sprintf( filename, '/sys/bus/iio/devices/iio:device0/%s', iiotype[5]);
                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;

printf('A5 IIO AD test v2.0\n');

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

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

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

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

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

iio adc转换应用编写的更多相关文章

  1. S5PV210 ADC转换

    第一节 S5PV210的ADCS5PV210的ADC可支持10bit和12bit,它支持10路输入,然后将输入的模拟的信号转换为10bit或者12bit的二进制数字信号.在5MHz的时钟下,最大转换速 ...

  2. adc转换原理

    模数转换器即A/D转换器,或简称ADC,通常是指一个将模拟信号转变为数字信号的电子元件.通常的模数转换器是将一个输入电压信号转换为一个输出的数字信号.由于数字信号本身不具有实际意义,仅仅表示一个相对大 ...

  3. stm32片上ADC转换实验

    原理图所示: BAT_DET 接到PB0 引脚,VSYS 是直流3.7V的电压.再来看下103的adc转换和引脚GPIO的关系 我们直接选用ADC1 根据上表格只能使用通道8 下面给我常用的ADC1寄 ...

  4. 007_STM32程序移植之_多通道ADC转换

    1. 测试环境:STM32C8T6 2. 测试:使用DMA进行多通道ADC转换 3. 描述:用 ADC 连续采集 12 路模拟信号,并由 DMA 传输到内存.ADC 配置为扫描 并且连续转换模式,AD ...

  5. 电赛菜鸟营培训(四)——STM32F103CB之ADC转换

    一.ADC概念 实现模拟信号转换成数字信号就是这样子= = 二.代码框架 #include "stm32f10x.h" void delay(u32 kk) { while(kk- ...

  6. ADC转换的分辨率

    分辨率是指ADC能够分辨量化的最小信号的能力.分辨率用二进制位数表示.例如对一个10位的ADC,其所能分辨的最小量化电平为参考电平(满量程)的2的10次方分之一.也就是说分辨率越高,就能把满量程里的电 ...

  7. ADC 转换序列暂时难理解

    通常情况下,core文件会包含了程序运行时的内存,寄存器状态,堆栈指针,内存管理信息还有各种函数调用堆栈信息等,我们可以理解为是程序工作当前状态存储生成第一个文件,程序出错的时候理论上都会产生一个co ...

  8. python"温度转换"实例编写

    介绍 实现华氏度和摄氏度之间的转换. 代码: #TempCovert.py TempStr = input("请输入带有符号的温度值") if TempStr[-1] in [&q ...

  9. 使用babel转换es6编写的程序

    配置文件 Babel的配置文件是.babelrc,存放在项目的根目录下.使用Babel的第一步,就是配置这个文件,这是必要的一步. 该文件用来设置转码规则和插件,基本格式如下. { "pre ...

随机推荐

  1. HDUOJ------(1230)火星A+B

    火星A+B Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  2. leetcode679:24Game

    题目链接 考虑1,5,5,5这种情况,有:5*(5-1/5)=24所以除法必须自定义运算才行. class Num: def __init__(self,up,down=1): self.up=up ...

  3. JavaScript 中定义变量时有无var声明的区别

    关于JavaScript中定义变量时有无var声明的区别 var a=5; //正确 a=5; //正确 在javascript中,以上两种方法都是定义变量的正确方法.微软的Script56.CHM中 ...

  4. Android 应用开发者必看的 9 个 Tips

    去年,Android应用数量已经超过iOS成为全球最大的生态系统,不过在这多大百万的应用中,有些应用的下载量很大,赚的盆满钵满:另外一些应用就石沉大海.无人问津了. 拥有多年程序开发经验,最近在开发A ...

  5. ngx_lua学习笔记 -- capture + proxy 实现httpclient

    题注 最近我在学习nginx的lua插件,发现结合nginx的异步io和lua的流程控制能力,还是有很丰富的想象空间的:几乎所有常见的http请求的处理逻辑都能搞定,诸如查查数据库,访问一下memca ...

  6. 将Log4J的日志内容发送到agent的source

    项目中使用log4j打印的内容同时传输到flume 1.flume端 flume的agent配置内容如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 a1.sour ...

  7. 手动删除Kafka Topic

    一.删除Kafka topic 运行./bin/kafka-topics  --delete --zookeeper [zookeeper server]  --topic [topic name]: ...

  8. iptalbes -F

    iptalbes -F -F, --flush [chain] Flush the selected chain (all the chains in the table if none is giv ...

  9. Android性能优化之被忽视的Memory Leaks

    起因 写博客就像讲故事.得有起因,经过,结果,人物.地点和时间.今天就容我给大家讲一个故事. 人物呢.肯定是我了. 故事则发生在近期的这两天,地点在coder君上班的公司.那天无意中我发现了一个奇怪的 ...

  10. 深度学习图像标注工具VGG Image Annotator (VIA)使用教程

    VGG Image Annotator (VIA)是一款开源的图像标注工具,由Visual Geometry Group开发. 可以在线和离线使用,可标注矩形.圆.椭圆.多边形.点和线.标注完成后,可 ...