激情综合丁香-激情综合六月-激情综合婷婷亚洲图片-激情综合图区-激情综合网五月

EM9287 Linux環(huán)境的AD數(shù)據(jù)采集

 2013-11-7              

        EM9287是英創(chuàng)公司新近推出的,專門針對網(wǎng)絡通訊、智能終端等應用的工控主板產(chǎn)品。EM9287可選擇預裝Linux-3.9.7操作系統(tǒng)。在Linux-3.9.7中,AD數(shù)據(jù)采集已采用新的工業(yè)IO(簡稱IIO)驅(qū)動程序框架,本文主要介紹應用程序如何讀取相關(guān)的AD數(shù)據(jù)。此外,英創(chuàng)公司的另一款主流工控主板產(chǎn)品EM9280也升級到Linux-3.9.7,具有與EM9287完全相同的AD通道,因此本文所介紹的AD數(shù)據(jù)讀取方法同樣適用于EM9280。

 

        EM9287支持2路單端模擬信號輸入AIN1和AIN2,輸入量程為 0V – 3.6V,信號管腳在CN1的17#和18#管腳。除了支持2路AD外,應用程序還可讀取主板的CPU芯片iMX28的芯片當前溫度,以了解設(shè)備的運行情況。以下是測試程序:

 

        #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', 
                'in_temp8_raw', 
                'in_temp9_raw', 
                'in_voltage10_raw', 
                'in_voltage11_raw', 
                'in_voltage12_raw', 
                'in_voltage13_raw', 
                'in_voltage14_raw', 
                'in_voltage15_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.9 * 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.9 * value; 
                return ret; 
        } 

        // return = 0: temperature value from CPU, unit: K (Kalvin) 
        // < 0: failed
 
        int read_CPU_temperature(float *ftemp) 
        { 
                int v_ch9, v_ch8, ret = 0; 
                char filename[80]; 
                FILE *fp; 
                char buf[20]; 

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

                // convert to integer 
                sscanf( buf, '%d', &v_ch9 ); 

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

                // convert to integer 
                sscanf( buf, '%d', &v_ch8 ); 

                *ftemp = ((float)(v_ch9 - v_ch8) * 1012) / 4000; 
                return ret; 
        } 

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

                printf('EM9280/EM9287 IIO AD test v2.0\n'); 

                // 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; 
                } 
                printf('AIN2 = %.2f mV\n', fvalue); 

                // read CPU temperature 
                ret = read_CPU_temperature(&fvalue); 
                if(ret < 0) 
                { 
                        return ret; 
                } 
                printf('CPU Temperature = %.1f K, (%.1f C degree)\n', fvalue, (fvalue - 273)); 

                return ret; 
        }

 

        在控制臺(console)窗口,也可通過Linux命令查看IIO驅(qū)動的原始通道:

 

 

        進一步,可用cat命令讀取各個通道AD轉(zhuǎn)換的原始數(shù)據(jù),EM9280、EM9287內(nèi)部AD分辨率為12-bit,所以原始數(shù)據(jù)范圍為:0 – 4095。開發(fā)人員可通過以下命令來快速了解設(shè)備的AD數(shù)據(jù)狀況。

        #cat in_voltage0_raw //   讀取CH0的原始數(shù)據(jù)
        #cat in_voltage1_raw //   讀取CH1的原始數(shù)據(jù) 
        #cat in_temp8_raw //   讀取CPU溫度的原始數(shù)據(jù) 
        #cat in_temp9_raw //   讀取CPU溫度的原始數(shù)據(jù)

 

        其他的原始通道涉及EM9287的觸摸屏、內(nèi)部供電電源等,已不在本文的介紹范圍。

主站蜘蛛池模板: 小明看看永久视频| 一级美女片| 亚洲综合三区| 欧美乱xxxxx强| 91在线视频网址| 国产网站在线| 成人日b视频| 一级a做爰片欧欧美毛片4| 午夜精品视频任你躁| 国产亚洲精品精品国产亚洲综合| 黄色影片在线看| 青青啪| 久久国产综合精品欧美| 亚洲精品毛片久久久久久久| 国产人成午夜免视频网站| 国产精品免费一区二区三区| 色婷婷综合网| 91av视频在线免费观看| 国产一区二区三区在线免费观看| 国产在线精品成人一区二区三区| 污污的网址| 日韩a级一片在线观看| 国产精品国产亚洲精品看不卡| 欧美日韩国产精品自在自线| 亚洲福利视频一区二区三区| 在线国产观看| 99精品网| 一一级黄色片| 一级黄色短视频| 久久国产精品久久久久久小说| 日韩成人国产精品视频| 亚洲1区| 亚洲国产一二三| 亚洲精品ai换脸一区二区三区| 伊人色综合琪琪久久社区| 青青操免费在线视频| 欧美成人亚洲高清在线观看| 国产一区二区不卡| 国产99精品在线观看| 国内精品亚洲| 欧美精品国产制服第一页|