主题 : mini2440如何 实现AD采集 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 72719
精华: 0
发帖: 21
金钱: 105 两
威望: 21 点
综合积分: 42 分
注册时间: 2012-06-27
最后登录: 2012-12-24
楼主  发表于: 2012-06-27 11:07

 mini2440如何 实现AD采集

管理提醒: 本帖被 qq2440 从 micro2440技术交流专区 移动到本区(2013-11-18)
因为mini2440的AD的AIN0是连在AIN0,和可调电阻相连的,我现在需要用它来进行AD采集。不是裸机,而是跑操作系统Linux,求解,怎么解决啊,如何修改哪个源代码用来采集电压。。。。
级别: 侠客
UID: 68677
精华: 0
发帖: 50
金钱: 255 两
威望: 51 点
综合积分: 100 分
注册时间: 2012-04-25
最后登录: 2016-04-02
1楼  发表于: 2012-08-03 10:21
1.把AIN0上电路的可调电阻去掉

2.修改驱动,用AIN1或AIN2来读取

PS:吐槽一下为啥驱动里面不做通道选择,不难吧……
static ssize_t s3c2410_adc_write(struct file *filp, const char *buffer, size_t count, loff_t *ppos)
{
        unsigned long data;

        /*
        if(count!=sizeof(data)) {  
                printk(KERN_INFO"the size of input data must be %d\n", sizeof(data));
                return 0;
        }
        // */

        copy_from_user(&data, buffer, count);
        adcdev.channel = ADC_WRITE_GETCH(data);
        adcdev.prescale = ADC_WRITE_GETPRE(data);

        //DPRINTK("set adc channel=%d, prescale=0x%x\n", adcdev.channel, adcdev.prescale);
        printk("set adc channel=%d, prescale=0x%x\n", adcdev.channel, adcdev.prescale);
        return count;
}
打开adc设备的时候记得用O_RDWR,可以通道选择,分频设置

PS2:DPRINTK宏定义有问题,开了DEBUG之后不能编译通过?
级别: 侠客
UID: 68677
精华: 0
发帖: 50
金钱: 255 两
威望: 51 点
综合积分: 100 分
注册时间: 2012-04-25
最后登录: 2016-04-02
2楼  发表于: 2012-08-03 10:22
测试代码:
        int fd = open("/dev/adc", O_RDWR);
        if (fd < 0) {
                perror("open ADC device:");
                return 1;
        }

        printf("Please select which chanel(0--2): \n");
        scanf("%d", &chan);
        printf("Please select prescale:\n");
        scanf("%d", &pres);
        setdata = chan<<16|pres;
        result = write(fd, &setdata, sizeof(setdata));
        if (!result) {
                printf("wrong when writing!\n");
        }