2012-05-16 4 views
3

저는 Beaglebone을 처음 접하고이 이상한 문제가 나타 날 때까지 꽤 좋은 클릭으로 움직였습니다. 나는 주말 내내 여기에 게시하기 전에 그것을 알아 내려고 노력했다.BeagleBone에서 analog-in을 읽는 중, "segmentation fault"오류를 피하십시오.

저는 Angstrom 3.2.5 이상의 비글 본에서 여러 센서를 사용하여 아날로그 입력을 읽으려고합니다. 하드웨어 문제 일 수 있다고 생각합니다. 사용

Python scriptAlexander Hiam's PyBBIO 내가 (값이 더 적은 부수적 빛 응답) 성공 포토 레지스터를 테스트 할 수 있었다 : 다른 아날로그 입력 (AINx을

# Import PyBBIO library: 
from bbio import * 

# Create a setup function: 
def setup(): pass # Nothing to do here 

# Create a main function: 
def loop(): 

    print "-----" 

    print "AIN0 [P9.39] - " + str(analogRead(A0)) 
    print "AIN1 [P9.40] - " + str(analogRead(A1)) 
    print "AIN2 [P9.37] - " + str(analogRead(A2)) 
    print "AIN3 [P9.38] - " + str(analogRead(A3)) 
    print "AIN4 [P9.35] - " + str(analogRead(A4)) 
    print "AIN5 [P9.36] - " + str(analogRead(A5)) 
    print "AIN6 [P9.33] - " + str(analogRead(A6)) 
    print "AIN7 [P9.39] - " + str(analogRead(A7)) 

    delay(500) 

# Start the loop: 
run(setup, loop) 

을하지만 (2 7)) 위의 스크립트로 읽으면 항상 AIN1에 연결된 포토 레지스터와 같은 값을 보여줍니다.

그리고 아마도 관련있는 고양이를 사용하여 AINx (1-7)을 읽을 수 없습니다. 오류

cat /sys/bus/platform/devices/tsc/ain1 
Segmentation fault 

아이디어가 있으십니까? 나는 정말로 붙어있다. 미리 감사드립니다.

PS : 더 많은 정보를 원하시면 ...

내 회로는 10K 저항과 포토 레지스터로 구성되어 있습니다. 내 핀 연결은 :

  • 헤더 P9 핀 (32) (VDD_ADC (1.8V))이 저항
  • 헤더 P9 핀의 반대쪽 광전지의 일단
  • 헤더 P9 핀 (34) (GNDA_ADC)에 enter image description here

    39 풀다운 저항 여기서

의 일단과 함께 광전지의 반대편 (AIN0)은 회로 내 일치하는 이미지 AINx의 모든의 결과 (1-7)의 다음 몇 가지 ...

# cat /sys/bus/platform/devices/tsc/ain0 
cat: /sys/bus/platform/devices/tsc/ain0: No such file or directory 
# cat /sys/bus/platform/devices/tsc/ain1 
Segmentation fault 
# cat /sys/bus/platform/devices/tsc/ain2 
Segmentation fault 
# cat /sys/bus/platform/devices/tsc/ain3 
Segmentation fault 
# cat /sys/bus/platform/devices/tsc/ain4 
Segmentation fault 
# cat /sys/bus/platform/devices/tsc/ain5 
Segmentation fault 
# cat /sys/bus/platform/devices/tsc/ain6 
Segmentation fault 
# cat /sys/bus/platform/devices/tsc/ain7 
Segmentation fault 
# cat /sys/bus/platform/devices/tsc/ain8 
Segmentation fault 
# cat /sys/bus/platform/devices/tsc/ain9 
cat: /sys/bus/platform/devices/tsc/ain9: No such file or directory 

UPDATE 1

나는 BeagleBone의 모든 ADC 포트를 표시하도록 analog_test_simple.py 파일을 편집했다. 이것은 센서가 플러그인 된 쉘의 결과입니다. 나는 값의 변화를 얻을 내가 다시 센서를 연결, 그러나 다시, 그들은 모두 같은 경우

----- 
AIN0 [P9.39] - 3948 
AIN1 [P9.40] - 4016 
AIN2 [P9.37] - 4002 
AIN3 [P9.38] - 3934 
AIN4 [P9.35] - 4001 
AIN5 [P9.36] - 3935 
AIN6 [P9.33] - 3968 
AIN7 [P9.39] - 4005 
----- 
AIN0 [P9.39] - 3946 
AIN1 [P9.40] - 4005 
AIN2 [P9.37] - 3945 
AIN3 [P9.38] - 3957 
AIN4 [P9.35] - 4018 
AIN5 [P9.36] - 3945 
AIN6 [P9.33] - 3967 
AIN7 [P9.39] - 3955 
... 

는 그리고 :

----- 
AIN0 [P9.39] - 2836 
AIN1 [P9.40] - 2836 
AIN2 [P9.37] - 2837 
AIN3 [P9.38] - 2831 
AIN4 [P9.35] - 2840 
AIN5 [P9.36] - 2837 
AIN6 [P9.33] - 2837 
AIN7 [P9.39] - 2837 
----- 
AIN0 [P9.39] - 2834 
AIN1 [P9.40] - 2834 
AIN2 [P9.37] - 2829 
AIN3 [P9.38] - 2825 
AIN4 [P9.35] - 2826 
AIN5 [P9.36] - 2817 
AIN6 [P9.33] - 2815 
AIN7 [P9.39] - 2815 
... 
+0

[electronics.SE] (http://electronics.stackexchange.com/)에서 더 좋은 답변을 얻을 수 있습니다. –

+1

ADC 초기화/설정에 필요한 기능이 있습니까? 사용할 채널 수와 범위를 알려주십시오. 당신은 또한 새로운 입력에 swithc에 ADC 시간을주고 읽기 사이에 짧은 (0.1 초?) 수면을 시도 할 수 –

답변

5

OK, 대답은, 두 개의 문제가 있다는 것입니다 둘 다 PyBBIO 라이브러리를 사용하여 발생합니다.

문제 1 ... 읽기 : 일 정치 않은/잘못된 센서는 내 질문에 대한 코멘트에

제안 값 add a delay to my original PyBBIO-based script에 저를 자극했다.에 관계없이, 당신은 센서 막힘-것을 볼 수 있습니다

# python PyBBIO/examples/analog_test_simple.py 
----- 
AIN0 [P9.39] - 2888 
AIN1 [P9.40] - 2894 
AIN2 [P9.37] - 2899 
AIN3 [P9.38] - 2907 
AIN4 [P9.33] - 2914 
AIN5 [P9.36] - 2912 
AIN6 [P9.35] - 2914 
----- 
AIN0 [P9.39] - 2912 
AIN1 [P9.40] - 2905 
AIN2 [P9.37] - 2901 
AIN3 [P9.38] - 2891 
AIN4 [P9.33] - 2896 
AIN5 [P9.36] - 2890 
AIN6 [P9.35] - 2896 
... 

여전히 모든 값에 영향을 여기

# python PyBBIO/examples/analog_test_simple.py 
----- 
AIN0 [P9.39] - 3955 
AIN1 [P9.40] - 4015 
AIN2 [P9.37] - 4012 
AIN3 [P9.38] - 3950 
AIN4 [P9.33] - 3998 
AIN5 [P9.36] - 4007 
AIN6 [P9.35] - 3984 
----- 
AIN0 [P9.39] - 4007 
AIN1 [P9.40] - 3953 
AIN2 [P9.37] - 4005 
AIN3 [P9.38] - 3941 
AIN4 [P9.33] - 3956 
AIN5 [P9.36] - 3934 
AIN6 [P9.35] - 3946 
... 

그리고 내가 플러그인 후 센서 결과는 다음과 같습니다 여기 센서없이 지연의.

조금 생각한 후에 PyBBIO를 사용하지 않고 스크립트로 결과를 반복하기로 결정했습니다. 나는 a new Python file to test and print the reading from each analog-in pin on the BeagleBone using the Python os module이라고 썼다. 파일은 os.system('cat ...')을 사용하여 값을 인쇄하며 각 값 사이에 짧은 지연이 있습니다. 여기서 코드이다 : 여기

import os,time 
i = 1 

while(True): 
    os.system("cat /sys/bus/platform/devices/tsc/ain" + str(i)) 
    print " - AIN" + str(i-1) 
    if i==7: 
     i=1 
     time.sleep(.5) 
     print "------" 
    else: 
     i+=1  
    time.sleep(.1) 

어떤 구성 요소가없는 결과가 막은로 BeagleBone :

:

# python analog-test-all-pins.py 
------ 
3943 - AIN0 
3819 - AIN1 
3955 - AIN2 
2018 - AIN3 
2093 - AIN4 
3583 - AIN5 
3658 - AIN6 
------ 
3947 - AIN0 
3746 - AIN1 
3959 - AIN2 
2034 - AIN3 
2123 - AIN4 
3547 - AIN5 
3644 - AIN6 
... 

그리고 여기서이 포토 레지스터 회로와 결과 상기 막은로 AIN0있다

# python analog-test-all-pins.py 
------ 
2915 - AIN0 
3347 - AIN1 
3556 - AIN2 
1478 - AIN3 
1602 - AIN4 
2393 - AIN5 
2402 - AIN6 
------ 
2913 - AIN0 
3337 - AIN1 
3560 - AIN2 
1487 - AIN3 
1606 - AIN4 
2350 - AIN5 
2489 - AIN6 

다음은 포토 레지스터 회로의 데이터 리드를 AIN2에 꽂은 결과입니다.

# python analog-test-all-pins.py 
------ 
3939 - AIN0 
3792 - AIN1 
2881 - AIN2 
1986 - AIN3 
2089 - AIN4 
3462 - AIN5 
3543 - AIN6 
------ 
3923 - AIN0 
3791 - AIN1 
2866 - AIN2 
1960 - AIN3 
2055 - AIN4 
3528 - AIN5 
3615 - AIN6 
... 

는 AIN3 : 나는 포토 레지스터 데이터를 다시 AIN0로 이어질 AIN3으로 TMP36 temperature sensor 플러그를 연결하면

# python analog-test-all-pins.py 
------ 
3951 - AIN0 
3764 - AIN1 
3933 - AIN2 
2899 - AIN3 
2134 - AIN4 
3606 - AIN5 
3737 - AIN6 
------ 
3960 - AIN0 
3823 - AIN1 
3957 - AIN2 
2910 - AIN3 
2118 - AIN4 
3635 - AIN5 
3645 - AIN6 
... 

photoresistor and TMP36 sensor

그리고 여기 결과입니다.

# python analog-test-all-pins.py 
------ 
2866 - AIN0 
3340 - AIN1 
3540 - AIN2 
885 - AIN3 
1591 - AIN4 
2348 - AIN5 
2389 - AIN6 
------ 
2872 - AIN0 
3339 - AIN1 
3551 - AIN2 
884 - AIN3 
1560 - AIN4 
2383 - AIN5 
2434 - AIN6 
... 

그리고 단지 센서가 다른 핀에 영향을주지 않고 읽어되고 있는지 확인하기 위해 여기 AIN5

# python analog-test-all-pins.py 
------ 
2897 - AIN0 
3338 - AIN1 
3557 - AIN2 
1464 - AIN3 
1578 - AIN4 
888 - AIN5 
2459 - AIN6 
------ 
2901 - AIN0 
3344 - AIN1 
3561 - AIN2 
1460 - AIN3 
1579 - AIN4 
889 - AIN5 
2395 - AIN6 
... 

에 TMP36이는 PyBBIO 라이브러리와 문제가 있다고 결론 날 리드입니다 그것이 바로 원인입니다. 분할 오류 오류

나는 Segmentation fault 오류와 함께 가지고 있었던 문제 PyBBIO 라이브러리에 뭔가 때문이다 : 나는

문제이 어떻게 ... 아무 생각하지만 그것은 또한 두 번째 문제의 원인이된다. 예를 들어, 나는 비글를 다시 시작하면 실행

# cat /sys/bus/platform/devices/tsc/ain1 
3953 
# cat /sys/bus/platform/devices/tsc/ain2 
3818 

나는 os 모듈을 사용하여 파이썬 스크립트에서 위의 출력을 일치하는 값을 얻는다.

그러나 나는 (이 중 위입니다 예) AIN 핀에 액세스 한 다음 나는 오류 얻을 다시 cat를 실행하는 모든 PyBBIO 스크립트를 실행하는 경우 : 내가 보드를 (언 플러그와 플러그를 다시 시작하면

# cat /sys/bus/platform/devices/tsc/ain1 
Segmentation fault 
# cat /sys/bus/platform/devices/tsc/ain2 
Segmentation fault 

을) 전원에 다시 cat를 사용할 수 있습니다

# cat /sys/bus/platform/devices/tsc/ain1 
2890 
# cat /sys/bus/platform/devices/tsc/ain2 
3366 

내가 대신 Matt Richardson's mrBBIO library를 사용하여 시도, this file로 :

0 내용 :

# python mrbbio/analog-test-all-pins.py 
----- 
2005 - ain4 
3636 - ain6 
3812 - ain2 
2114 - ain5 
3872 - ain3 
3950 - ain1 
----- 
2002 - ain4 
3530 - ain6 
3787 - ain2 
2059 - ain5 
3895 - ain3 
3952 - ain1 
... 
Cleaning up. Unexporting the following pins: 

그리고 나는 그것이 cat와 결과를 얻을 수있는 나의 능력을 엉망하지 않습니다 발견 - 그것은 끝에 핀을 수출 가능성이 있기 때문이다.

# cat /sys/bus/platform/devices/tsc/ain1 
3960 
# cat /sys/bus/platform/devices/tsc/ain2 
3830 
+0

당신이 참조 또는 버전의 Python의 자식 개정, 그래서 다른 사람이 볼 수 있도록 멋지 겠어 - 그 이후로 무엇이 바뀌 었는지. 또한, 당신이 말했듯이, PyBBIO의 문제가 정확히 무엇인지 이해하지 못합니다. _ ""... PyBBIO 라이브러리에 문제가 있습니다. " 기본적으로 저는 PyBBIO가 저에게 유익한지를 알아 내려고 노력하고 있습니다 만, 당신은 지금 당장 나에게 의미가없는 모든 정수를 제시했습니다. – errordeveloper

+0

위대한 게시물, 따라서 나는 여전히 당신을 upvote :) – errordeveloper

0

AIN0과 AGND 사이의 풀다운 저항은 1K 옴을 초과해서는 안됩니다. ADC 입력 전류는 매우 제한적이다 (2uA). 전압 분배기 회로가 ADC 입력 회로에 영향을 미치지 않도록하려면 전압 분배기 저항을 통해 충분한 전류를 공급해야하므로이 값을 낮춰야합니다. 최대 1K 옴을 권장합니다.