次は、待ち時間でごまかしているEEPROMの書き込み終了をチェックするルーチンのデバッグだ。「STM32マイコン徹底入門」で「このとおり忠実に書かないと動かない」と言われていたところだが(P298)、その通りに書いても動かなかった。仕方がないので1msのループを10回やってタイムアウトでごまかしている(10msも待てば十分という計算)。上手く行くときというのは、こういうものだろう。腰を据えて1ラインづつステートメントを確認して行って、本と違うステートメントを見つけた。スタートコンディションを自前の関数で出している。この自前の関数は、ステップ数を減らすため、スタートコンディションのあと、ステイタスが変わるのを待つステートメントを加えてある。確かに本に書いてある通りではない。これを裸のスタートコンディションを出すだけのステートメントにする。おお、ちゃんと指定どおりのビットに1が立つようになった。ことでEEPROMまわりは片付いた。これで気圧計を構成するハードはすべて揃ったことになる。次は、いよいよ本来の気圧計にするためのソフトウエアの再構成と気圧グラフの描画ルーチンの開発である。気圧計プロジェクトは山場を迎える。EEPROMのライブラリソースコードをいつものとおりZIPで固めたファイルにして以下におきます。I2C_1.hがそれぞれソースコード、ヘッダーファイルです。MPL115の出力補正や、eepromの読み書きについては、ff.support.cのコマンド'u'や、';','p'のところにあります。このままではコンパイルできませんが、参考にしてください。前回記事での、I2C_1.cとは異なっていますので注意してください。タイプミスで、違うアドレスの値を1バイト持ってきていました・・。週明け位になると多分時間が取れそうなので、気圧計とブログ作っていく予定です。22時34分shuji009さん、素早い立ち上がりですね。0となり、c11(buff[8]と[9])は、0ではありませんでした。これまでのウェブ情報(私を含めて4つくらい)の、この2つの係数は全部0だったんですけどね。測定データは、偏差が1.5hPaですから、まあ、こんなものでしょうか。気圧は、放射線量と違って連続量だから気になるといえば気になりますが。sprintfは私も実数は使ったことありません。フラッシュを沢山喰うだろうと思うのと、これくらいなら、Aに10倍値を入れ、sprintf(buf,"%d.%d",A/10,A%10);として出力してしまえばそれですむので。23時25分こっちにコメントします。AVR(ATMega328P)で、実験中です。補正値・・・やはり違いますね。0となり、c11(buff[8]と[9])は、0ではありませんでした。後、sprintfで小数点の数値が表示されない(といいいますか、やりかた判らない)ので、今は、10倍しています(涙;)。10122こんな感じです。センサーをブレッドボードで組んでいるので、ふらつくのかなあ?って思っていますが・・・。因みに、上記の数値は、1秒毎なので、そんなにふらつかないと思います。14時59分すんさん、コメント有難うございます。私も、毎秒測って1分平均を測定値にするつもりです。今のところ、ADコンバータの値の偏差は、せいぜい2から3なので、これ以上安定させるつもりはありません。アナログ値ですから、こんなもんではないでしょうか。センサーそのものの分解能が1.5hPaですから、あまり神経質になる必要もないと思いますが。13時48分がた老さん、こんにちはMPL115は個体差あるのでしょうか。うちのは気圧データにバラつきが多くて1回測定ではまともに使えないので100回連続で取って平均化してます。温度係数ですがエクセルで直線フィッテングさせて求めれば、かなり精度のいい温度計になります。00時19分いや、まあ、そういうところです。プログラムにもいろいなレベルがあります。LEDを点滅させるくらいのロジックで擬似コードを振り回しても、余り理解されないでしょう。