SPI接続でトラブル! 複数のデバイスが使えない
いつもはこんなの作りました、という記事を書いているわけですが、今回は、作れません、という記事です。できました、より、できませんでした、の方が参考になるのかも (^^;;
この複数のSPIデバイスをいっしょに使う話についてはきむしげさん(きむ茶工房ガレージハウス)の
「SPIマスターにSPIデバイスを複数個接続して見ます」
にソースを含めた詳細な記事があります。きっと私の記事よりずっと参考になると思います。
なお動くのは動くけれども(SDカードの読み書きの)動作が不安定という場合は
「PICでSPI - SDカードの書き込みエラーの話」
が参考になることがあるかもしれません。また私の使っているSDカードアダプタはそもそも単独で使ってもエラーが出ることがわかりました (^^;;
「SDカードでエラーが起きる理由 - PICでSPI」
---------
この記事を書いてから一年以上経ったのですが、けっきょく問題なのはSDカードだけでした。SDカードはかなり微妙なところがある気がします。となると二つSSPがある場合(例えばPIC18F26K22)ではSDカードとそれ以外と分ければいいのかも。ただそうするとI2Cが使えなくなりますが、一つのSSPをI2CとSPIで共用する方法は次の記事にあります。。
「ほよほよのブログ - 超高精度リアルタイムクロックDS3234Sを動かす」
---------
====
まずSPI接続でSDカードにデータの記録ができるようにしました。
「PICでSPI SDカードを読み書きする」
次にRTCが使えるようになりました。
「PICでSPI - 超高精度SPIバスRTC(リアルタイムクロック)DS3234Sの使い方」
余談ですがこれほんとうに高精度でおすすめです。
そしてこの二つがいっしょに使えるようになりました。
「PIC/I2C大気圧センサーLPS331APの測定値をSDカード(SPI)に記録する - はじめに」
これで自記温湿度計、自記気圧計ができあがりました。
一方8チャンネルのADコンバータの動作確認も終わりました。
「PIC18F26K22でSPI - 8ch/ADコンバータ MCP3208の使い方(ソース付き)」
いよいよこれらを合体させ抵抗やコンデンサー、コイルやVBEの温度特性を調べたりしようということになりました。
------
ところがこれら三つをいっしょに使うとSDカードの初期化でエラーが出るようになりました。
1. SDカードでエラーは出ますがその後時刻とADコンバータで測定した電圧データは表示できています。
2. MCP3208をソケットからはずすとSDカードに時刻付きのデータを書き込めてます。
これまた余談ですが、私はIC類は基本基板に直接ハンダ付けなんですが、いろいろな経緯があってこれだけはソケットを使っていました。不幸中の幸いでしょうか。
-------
どうやらハード的なトラブルのようです。
これからどのライン(SCLK、SDO、SDI)が問題か切り分けて行く予定ですが最悪使うデバイスに応じてラインの切り替えでしょうか。
もうトライステートバッファを載せる場所はないのでI2Cでアドレスがかち合ったときに備えて実装してあるアナログスイッチを流用することになるかもしれません。解決したらまた記事で報告します。
<=== 解決しました。「SPI接続でSDカードとMCP3208がいっしょに使えない話」
けっきょくこの話は
「自記温度計、自記気圧計 - 複数のSPIデバイスがいっしょに使えなかった話」
のいちばん最後にある方法で対応しました。その後トラブルは発生していません。
---
それぞれ別の基板に組み立ててあるのでその間はコネクタでつないでいるのですが、PIC基板=> SDカード基板が20cmくらい、SDカード基板=>RTC+ADC基板も20cmくらいですからそんなに距離があるとも思えません。
それぞれこんな感じです。
「PIC/I2C大気圧センサーLPS331APの測定値をSDカード(SPI)に記録する - 実装編」
RTCの基板の空いているソケットにMCP3208が刺してあります。
全体でこうなります
「PIC/I2C大気圧センサーLPS331APの測定値をSDカード(SPI)に記録する - 実装編」
これにI2Cデバイスを接続して実験してます。I2Cデバイスはディスプレイを入れてもう6個(ACM1602N1、MCP3425、AM2321、LPS331A、MPL115A2、LPS25H)つながって正常に動作しておりさらに増設予定です。
「I2C/SPI大気圧センサーLPS25Hの使い方 - 1 - 実装」
こちらには稼動状態の全体像(?)の写真があります。
------
趣味の電子工作
PIC
趣味の気象観測
趣味の実験
« ラブジョイ彗星2015年2月20日、21日の予測位置とM76との位置関係 | トップページ | 2015年2月10日、今日のラブジョイ彗星の位置 »
「趣味の電子工作」カテゴリの記事
- PICで作る100MHz周波数カウンタ検証用XOR(エクスクルーシブオア)逓倍器(2016.03.08)
- 150MHz(~200MHz?)周波数カウンター用プリスケーラー(1/4分周器)(2016.03.06)
- 測温抵抗体(Pt100、白金薄膜温度センサー)の抵抗値を温度に変換する(平方根を使わない)計算式(2016.03.01)
- GPS/JJY(標準電波)を基準周波数源とするためのPLLの詳細(2016.02.27)
- GPS受信モジュール1PPS対決 - GE-612T vs GM-5157A(2016.02.21)
コメント
この記事へのコメントは終了しました。
« ラブジョイ彗星2015年2月20日、21日の予測位置とM76との位置関係 | トップページ | 2015年2月10日、今日のラブジョイ彗星の位置 »
PCのマザーみたいですね^^。
整合性を取りつつすべてを接続する、本当にすごいです。
これで1年とか観測を続けてグラフ化したら面白そうですね^^。
投稿: ほよほよ | 2015年2月10日 (火) 20時58分
正直困ってます。
こういうときだけはオシロスコープがあればなあと切実に思います (^^;;
ひとまずバイナリカウンターでバスの状況を観察してみる予定です。
一年観測したら台風が来たり木枯らしが吹いたり、歴史を感じるんじゃないでしょうか (^^)
投稿: セッピーナ | 2015年2月10日 (火) 21時41分