進捗産めませんでした。

進捗産めませんでした。

Tags
Published
May 31, 2018
SSD1306を試しましたがやはり、動きませんでした。i2Cが動作していません。
そこでI2Cのアドレスチェックをするというアイディアを思いつきました。これが成功したら通信がうまくできている証拠になると思いました。
I2Cの基本的にダメなところは温度によって通信速度が変わったり、00プルアップ抵抗も温度によって最適解が変わるというところです。だから基本的にI2Cが嫌いなのですが、今使うしかないのでとりあえずやってます。
なぜプルアップ抵抗が必要なのかというと、通信ラインがオープンドレインだから(?)です。
多分ですが、消費電力を考慮してあえてLOWしか使わないんだと思いました。
UART、SPI、I2CはHIGH/LOWで通信のデータを表します。基本的にそこは変わりません。しかし、UART,SPIはHIGHをしっかりピンから吐き出しますが、I2CはHIGHを吐き出しません。LOWしか出しません。つまりどういうことかというと、HIGHが出て欲しい時は電圧が微妙なところとかでふわふわしてるってことです(笑)。とうぜん電圧がふわふわ浮かれたらHIGH/LOWの区別がつかななります。だからプルアップ抵抗が必要なわけです。上に釣り上げてあげるんです。そうすると、HIGH/LOWが明白になります。
しかし、通信スピードによってプルアップ抵抗の数値を変えないと、完全に上に上がりきらなかったり、逆にLOWのときに電圧が下に下がりにくいということも起こります。
めんどくさい、の言葉に限ります。オシロスコープ(波形をみるもの)やロジックアナライザ(波形を見る+送信中のデータも観れる)がほしいですね。波形みながらプルアップ抵抗をボリューム抵抗で回しながら調整といったところが理想です。それができたら即解決な訳ですが、オシロスコープがないので残念ですが。
来年はオシロスコープが必要です。これはハードソフトです。サーキット(回路)担当とソフト担当のお互いに依存する部分です。なんで一流企業は回路設計とソフト設計とハード設計を分けてるんだろ。。。不思議でしょうがないです。『できるはず!!』で回路設計すると、『あれーおかしいなI2Cが動かない、ロボットが動かない!』となるわけです。通信ってすごく難しい。やっぱり余裕で使えるUARTが簡単なのでしょうか。今現在全てのバス(通信経路)をSPIにしようとしていますが、『動くの確認していますか??!!』動かないものなんか作るな。です。便利だから使ってみたけど動かなかった。これが一番無駄です。確実なものを取っていくのがベストだと僕は思いました。毎年思います。I2Cしか考えになかった昔の僕にUART使えばって言いたいです。
翌年(昨年のこと)はUARTに全て置き換えになったらかーなり動きましたし、通信プロトコルも自作のものを作りました。タイムアウト時間を調整できたり。色々やってみました。

UARTサイコー

 

Loading Comments...