2016-11-10 1 views
0

내가이 ADC의 MPC3008을 통해 IR 센서 (샤프 GP2Y0A21YK0F)에서 데이터를 얻을 PyQtgraph 라이브러리를 사용하여 실시간에 표시 라즈베리 파이 3 B를 사용하여 프로젝트에서 일하고 있습니다.ADC에서 데이터를 가져올 때 파이썬에서 샘플 속도를 측정하는 방법은 무엇입니까?

그러나, 내가 거의 샘플을 얻고 것 같다 그래프는 내가 예상대로 "부드러운"아니다.

나는 데이터를 얻기 위해 그리고 Adafruit 파이썬 MCP3008 도서관과 기능 mcp.read_adc(0)를 사용하고 있습니다.

파이썬에서 샘플 속도를 측정 할 수있는 방법이 있습니까?

당신에게

휴고 올리베이라 감사

+0

는'내가이 거의 samples'이로있다가 당신이 무엇을 의미합니까 무엇입니까 것 같다? ADC 채널을 읽을 때 샘플을 얻습니다. 얼마나 자주 ADC를 읽고 계십니까? 몇 가지 코드를 보여줄 수 있습니까? –

+0

예 : 100 (또는 1000?) 샘플을 사용하고 소요 시간을 측정하는 데 시간을 사용합니다. – barny

+0

Pi로 MCP3008에서 200ksps를 얻는 방법에 대해 다른 질문을 던졌다고 생각합니다. 당신이 그 근처에 있다고 생각하지 마십시오. Pi/Linux는 실시간 플랫폼이 아닙니다. – barny

답변

0

더 나은 당신이 데이터에 액세스 할 수 있습니다 얼마나 빨리에 대한 핸들을 얻기 위해 (multiprocessing and GUI updating - Qprocess or multiprocessing? 참조) 이상적으로 멀티 프로세싱을 통해, 일부 다음 수준 버퍼링을 설정하는 것이 좋습니다 것입니다. 현재 QTimer를 사용하여 폴링을하는데, 이것은 50msec마다 3 번의 raw read를 얻고 있기 때문에 타이머를 통해 인위적으로 스스로를 제한하고 있습니다. 필자는 MCP3008을 사용하지 않았지만 일부 코드를 간략하게 살펴보면 몇 가지 샘플 테스트를 설정하여 더 나은 문서화를 위해 추가 조사를해야 할 것처럼 보입니다. 문제는 mcp.read_adc (0) 메서드의 동작이며 블로킹 또는 비 블로킹입니다 ... 비 블로킹 인 경우 새 데이터가없는 경우 오래된 데이터를 반환합니다 ... 등등. 이상적입니다. 그것이 타이밍 감각에서 막히는 경우에, 당신은 당신이 새로운 샘플을 얻을 수있는 방법을 결정하기 위해 그것과 시간 델타에 대한 루프를 설정할 수 있습니다. 비 블로킹 인 경우 새로운 샘플이없는 경우 null을 반환하고 반환하는 경우 실제 샘플 만 리턴합니다. 당신은 그것으로 놀고 그것이 어떻게 행동하는지보아야 할 것입니다. 여하튼, 보조 스레드가 mcp.read_adc (0)을 폴링하도록 설정하면 update() 타이머를 사용하여 최신 버퍼를 수집하고 플로팅 할 수 있습니다. 또한 RaspPI에서 멀티 스레딩/멀티 프로세싱의 영향을 알지 못하지만 (QTimer 폴링보다 더 나은 것이 있어야합니다.

+0

감사 : :( 다음은 내 코드입니다 당신은 당신의 대답에 대해 대단히 감사합니다! –

관련 문제