A/D 引脚始终读取最大值 (1023)

A/D 引脚始终读取最大值 (1023)

我正在使用 Acme Systems 的 Aria G25 板。我有他们的 Terra 板分线。我也在他们的谷歌群组上问过这个问题,但认为这可能是一个更普遍的问题,所以也在这里发布。我已根据本指南将 ADC 构建到内核中(而不是作为模块):

http://www.at91.com/linux4sam/bin/view/Linux4SAM/IioAdcDriver

在启动时,我可以 grep for iio 并得到:

root@acmeboard:~# dmesg | grep iio                                              
iio iio:device0: Resolution used: 10 bits                                       
iio iio:device0: ADC Touch screen is disabled.

启动后我有适当的 sysfs 结构:

root@acmeboard:~# ls -l /sys/bus/iio/devices/iio\:device0/                      
total 0                                                                         
drwxr-xr-x 2 root root    0 Jan  1 01:06 buffer                                 
-r--r--r-- 1 root root 4096 Jan  1 01:06 dev                                    
-rw-r--r-- 1 root root 4096 Jan  1 01:01 in_voltage0_raw                        
-rw-r--r-- 1 root root 4096 Jan  1 01:01 in_voltage1_raw                        
-rw-r--r-- 1 root root 4096 Jan  1 01:01 in_voltage2_raw                        
-rw-r--r-- 1 root root 4096 Jan  1 01:01 in_voltage3_raw                        
-rw-r--r-- 1 root root 4096 Jan  1 01:06 in_voltage_scale                       
-r--r--r-- 1 root root 4096 Jan  1 01:06 name                                   
drwxr-xr-x 2 root root    0 Jan  1 01:06 power                                  
drwxr-xr-x 2 root root    0 Jan  1 01:06 scan_elements                          
lrwxrwxrwx 1 root root    0 Jan  1 01:06 subsystem -> ../../../../../bus/iio    
drwxr-xr-x 2 root root    0 Jan  1 01:06 trigger                                
-rw-r--r-- 1 root root 4096 Jan  1 01:06 uevent  

然而,当尝试读取 ADC 值时,我总是得到 1023(我在其中一个分线板上连接了一个电位计,因此我希望不会读取最大值):

root@acmeboard:~# cat /sys/bus/iio/devices/iio\:device0/in_voltage0_raw         
1023 

我对 linux 和 sysfs 比较陌生,所以我可能会错过一些简单的东西。其他兴趣点。如果我将相同的引脚(Aria 上的 W20)读取为数字 GPIO,它似乎可以工作。旋转锅子,我最终读到 0,然后读到相反的 1。我是否需要禁用该引脚的 GPIO 功能?

最后,这是 DTS 文件中的相关行(我唯一更改的内容):

adc0: adc@f804c000 {
                status = "okay";
                atmel,adc-channels-used = <0xf>;
                atmel,adc-num-channels = <4>;
                compatible = "atmel,at91sam9x5-adc";
                atmel,adc-startup-time = <40>;
                atmel,adc-status-register = <0x1c>;
                atmel,adc-trigger-register = <0x08>;
                atmel,adc-use-external;
                atmel,adc-vref = <3250>;
                atmel,adc-res = <8 10>;
                atmel,adc-res-names = "lowres", "highres";
                atmel,adc-use-res = "highres";
                trigger@0 {
                        trigger-name = "continuous";
                        trigger-value = <0x6>;
                };
            };

相关内容