2014年3月16日日曜日

LPC1114FN28の小さな落とし穴:その2・「Timeは止まってます」


以前ハマったのは落とし穴というかミスですが、参照電圧端子をフリーにしたままで「AnalogInが動かない」と騒いでいた件。

で、今回の落とし穴は…Time。構成上RTCが入っていないということは知っていました。でも大抵の場合、リセット後の経過秒数がカウントされる、という仕様になっているチップが多い…よね(必死に同意を求める)。Arduinoもそうだし。

その前提でタイミングに関わる処理を書いていたのですが…どうにも動かない。まぁそりゃ動きませんよね、いつまでたってもtime = 0なのだから。

幸い、メインループの処理が非常に軽いしwaitも必要なプログラムだったので、メインループの中でcounter++を使って処理しました。いやはや。

--

その他、ADXL345という3軸の加速度をI2Cで読み取れるチップを使おうとして、なかなかうまく動かせませんでした。

いくつかボケはあったのですが、最終的にはアドレスセレクタのところにハンダ玉が落ちてGNDと短絡しており、プログラムからいくら呼びかけても無駄だった、というのが原因でした。念の為に別アドレスで呼びかけてみたらすんなり動いてしまったので、原因判明。一応、その他のボケも書いておきます。

  • CSをGNDに落としてた(GNDはSPIモード)
  • 正しい値が返っていたのに別のレジスタ見て「返ってこない」と思い込んでた

もうアリガチすぎて参考にもならないですね…。

まぁしかし、加速度計も面白いです。3軸の絶対値にFFTをかけて振動のモードを割り出して、それとは別に過去100ミリ秒の平均値からオフセットを出しておき、加速度の変化量などと組み合わせて動きを解析して…云々 アプリ屋としてはこの辺はそんなに苦労しないで作れたのですが、ともかく第一歩の「データを取り込む」というところでコケていました。

いやはや…。