raspberry Pi2を最近いじっているのですが、GPIOピンからクロックをチップに供給したいことがありました。
そのためには、例えばGPIOピン5を通常の入出力ではなく、ALT0 (alternative function 0)に設定する必要があります。
他にもクロック出力を設定できるピンがありますが、詳しくはraspiに搭載されているARMプロセッサであるBCM2835のデータシートを参照してみてください(102pくらい)。↓
https://www.raspberrypi.org/wp-content/uploads/2012/02/BCM2835-ARM-Peripherals.pdf
結局色々調べたのですが、Pythonだけで完結できず、こちらのページ↓を参考にしてcプログラムでクロックを出力することに成功。(感謝!)
しかし、データ取得・解析にはPythonを使っていたので、できれば動いているコードはPythonだけで統一したいなあと思い、必要なライブラリを実装しました。
そのために、RPIOライブラリのカスタマイズを行います。
ただし、私が使っているのはraspberry Pi2なのですが、現在RPIOはraspberry Piに対応していない模様。raspberry Pi2でも使えるようカスタマイズされた
を改造し、ALT0への対応を行います。
■成果物
できました。フォーク元にプルリクエストを投げましたが、どうなることやら無事速攻でマージされました、感謝。
■インストール、つかいかた
raspberry Piターミナル上で
git clone https://github.com/fukatani/RPIO.git
git clone https://github.com/tylerwowen/RPIO.git
cd RPIO
python setup.py install
とうち、ここで完了と思いきや、なぜか私の環境では
dist-packagesに未解凍のファイルが置かれます(左下)。シュール。
なんででしょうね。前世の行いでしょうかね。知ってる人、教えてくださいね。
しょうがないので、手作業で解凍してやりインストール完了です。
import RPIO
RPIO.setup(5, RPIO.ALT0)
とすると、5ピンからGPCLK1(大体20MHz)がでます。嬉しいです。
ちなみにGPCLKは波形がグチャグチャでそれなりに高周波ノイズが激しいので、クロックの波形を直で突っ込むとSPIなどの波形がゆがむことがあります。最悪、通信が失敗し、かえって来たデータが信用できなくなるかもしれません。
そういう場合はクロックの後ろに抵抗(100ohmくらい?)つけてみましょう。
高周波成分が除去されて、通信が成功するようになるはずです。
なんか今ハードウェアエンジニアっぽいこといってしまった、、、
■追伸
うーん、RPIOの一部テストが通りません。フォーク元も。Pi2はピン配変わったからかしら。
raspberry Pi用のTravis CIがあったらいろいろはかどるのになー。
やる気があるひと修正してみましょう(人まかせ)。