2015年9月25日金曜日

RaspberryPiでラズベリー栽培 I2CSensorHubレジスタマップ変更

昨日アップロードしたばっかりなのに、もう修正とは・・・orz
 というわけでVer0.3です。

  • 修正箇所は デバイスレジのレジスタマップ修正 
  • スレーブアドレス修正 
  • 13番ピンをBusyインジケータに

の3か所。
あと、GitHubにID作ってみたので、こちらからクローンできます。

●デバイスレジのレジスタマップ修正
Ver0.1では、256Byteまるまる確保していましたが、実際に使っているのは16Byte分でしたので、減らしました。ただしアドレス変換が上位4bitを不定にするだけの簡単処理なので、RaspPi側からはループしたような見え方をします。 (ぶっちゃけ、この修正はやらなくてよかったと思ってる)

●スレーブアドレス修正
0x50から0x72へアドレスを修正。0x50でも問題なかったのですが、BME280とか8x2液晶とか、EEPROMのアドレス、SMBusV3.0の仕様書等を参照した結果、0x50は使わないほうがよさそうなので、BME280と並べて0x7Xのあたりに配置変え。(まぁArduinoなのでアドレスは好きに変更できるんですけどね。)


●13番Pinをインジケータに
ArduinoUNOには13番PinにチップLEDがついているので、初心者でも簡単にLチカが楽しめますが、Setupに何も書かないと点灯しっぱなしです。(デフォルトでONになってる)
せっかくなので、AD変換中に点灯するようにしてみました。(正確には、スタートフラグを確認したらON,AD変換と全てのレジスタ処理を終えたらOFF)
これでAD変換にどのくらい時間がかかるのか視覚的に分かるので、STARTフラグが落ちるのをPi側でポーリングしなくても、なんとなくカンで変換終了時間に読みにいけるようになります。
ただし一瞬なので、なんとなく点灯してるなー程度にしか確認できません。

●現時点で確認されている不具合 温度計LM35の一発目の測定がうまくいってないみたいです。なので最低でも2回以上はSTARTしてやらないと測定できません。 ●今後の修正
Vrefの切り替え後にダミーのADCを一発かましてますが、これが果たして意味あるのか自信がないので、このあたりを検証してみたいと思います。もし必要ないのなら、多少変換速度が上がるので。

フィルタ挿入とか変換値補正関数とか。 RaspPi側でやってもいいのですが、Arduino側のメモリも余りまくってるので、もうちょっと機能を盛り込みたいです。よく使うLM35とかLM61とか、このへんの設定をRaspPi側で気にしなくても使えるようになると便利ですし。RaspPi側から変換コードを送信して自由に書き換えられるようになればベスト。(やりすぎ)

全体のパラメータを1か所で確認できるように
現時点で、それぞれのポートの変換スタートは任意のタイミングで実行できますが、どのポートが変換中なのかはそれぞれのポートのSTARTレジを確認するしかありません。1か所で確認できるとアクセス回数を減らせそうです。まぁ相手が温度計とかなので、通常は1min周期とかでアクセスするので、I2Cバスが重くなることはないと思うのですが。

デバイスIDとか、うまく動作してる場合は全く使わないのですが、初めて導入する際にはレジスタマップに何かしら固定の文字があったほうが安心して使えます。なので、何かしら文字を埋め込もうかと考えてます。ちなみに現時点では、電源投入時は全レジスタが0なので不安になります。


0 件のコメント:

コメントを投稿