Os pinos A / D sempre lêem max (1023)

1

Estou usando a placa Aria G25 da Acme Systems. Eu tenho a fuga da placa Terra. Eu também fiz esta pergunta em seus grupos do Google, mas pensei que poderia ser uma questão mais geral, por isso postou aqui também. Eu construí o ADC no kernel (não como módulo) com base neste guia:

link

Na inicialização, consigo fazer o grep para o iio e obter:

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

Após a inicialização, tenho a estrutura sysfs apropriada:

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  

No entanto, ao tentar ler o valor do ADC, sempre recebo 1023 (tenho um potenciômetro conectado em uma das placas de breakout, então esperaria não ler o max):

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

Eu sou relativamente novo no Linux e no sysfs, então eu poderia estar perdendo algo simples. Outro ponto de interesse Se eu ler o mesmo pino (W20 na Aria) como um GPIO digital, parece funcionar. Girando o pote acabei lendo 0 e depois 1 indo para o outro lado. Eu preciso desativar a funcionalidade do GPIO para este pino?

Finalmente, aqui estão as linhas relevantes no arquivo DTS (única coisa que eu mudei):

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>;
                };
            };
    
por DeusAduro 02.10.2015 / 08:40

0 respostas