A/D 핀은 항상 최대값(1023)을 읽습니다.

A/D 핀은 항상 최대값(1023)을 읽습니다.

저는 Acme Systems의 Aria G25 보드를 사용하고 있습니다. Terra 보드 브레이크아웃이 있습니다. 나는 또한 그들의 Google 그룹에 이 질문을 했지만 그것이 더 일반적인 질문일 수 있다고 생각하여 여기에도 게시했습니다. 이 가이드에 따라 ADC를 모듈이 아닌 커널에 구축했습니다.

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

시작 시 iio를 grep하여 다음을 얻을 수 있습니다.

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를 처음 접했기 때문에 간단한 내용이 누락되었을 수 있습니다. 기타 관심 지점. 디지털 GPIO와 동일한 핀(Aria의 W20)을 읽으면 작동하는 것 같습니다. 냄비를 돌려보니 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>;
                };
            };

관련 정보