3

Windows 7 コンピューターで Psychopy v1.82.01 (コーダー ビュー) を使用して fMRI 実験を実行しています。パラレル ポートから readData() を使用したいと思います (ボタンの押下を記録し、スキャナーからトリガーを受信して​​同期するため)。ただし、readData() または readPin() を使用すると、すべてのピンがロー ('0') のままのようです。

健全性チェックのために、プレゼンテーションのポートからデータを読み取ろうとしました (デバイスが動作しているか、アドレスが正しいかなどを確認するため)。これにより、ボタンの押下が認識されます。奇妙なことに、PsychoPy シェル (readData() と readPin() を使用) を使用していて、プレゼンテーションが開いていて、「ポート テスト」ウィンドウが開いている場合、機能します! また、Presentation からポートにデータを送信すると、PsychoPy でこれを読み取ることができます (したがって、コードが問題ないと確信しています)。setData() 関数は正常に動作します。データの読み取りに問題があるだけです。

私が使用しているコードは次のとおりです。

from psychopy import parallel
button = parallel.ParallelPort(0x2010)

while True:
    if button.readPin(5) !=0:
        break

print 'value received'

パラレル ポートや、パラレル関数の「舞台裏」の動作についてはあまり自信がありませんが、ポートの読み取りにある種のアクセスの問題があり、プレゼンテーションがポートにアクセスしているときにオーバーライドされるようです。しかし、PsychoPy から使用している機能は、単独では管理できませんか? これは実現可能ですか?

これをどこから修正し始めるかについてのアイデアは大歓迎です!!

4

1 に答える 1

1

ついに稼働しました!他の誰かが同様の問題を抱えている場合に備えて、_inpout32.py ファイル (/parallel/_inpout32.py) の関数 ' init ' に、制御レジスタのビット 5 をゼロに切り替えるコマンドがあります。このコマンドをコピーし、setData()関数にも含めてから、readData( )でこれを変更して、ビット 5 がハイになるようにしました (入力引数はベース アドレス + 2 と 32 です)。

self.port.Out32(self.base + 2, 32)

予期しない問題がさらに発生する可能性がありますが、今のところこれでうまくいくようです。

于 2015-12-17T12:17:42.650 に答える