2014年8月18日月曜日

@autoreleasepool { }

久しぶりのiOSネタ。

ALAssetから引っ張ってきたPNG(スクリーンショット)画像をUIImageViewに表示して、これをボタンで高速でめくっていくと「メモリ足りない」って落ちる現象に遭遇。

ゆっくりページめくりしている時は大丈夫。

【ALAssetからdefaultRepresentationを取得し、その後UIImageに変換してUIImageViewにセットする】だけの簡単な処理だけど、高速でめくるとreleaseする前に次の画像を取ってきてしまうので落ちる。落ちる前に手を止めると、メモリのグラフがガタガタと下がっていく。

一瞬、「めくる速度を制限しようか」という悪魔の声が聞こえたけど、それは最後の手段として取っておくことにした。

でも、__weak試したりnil代入しても状況は変わらない。

最終的には上記【】の処理を@autoreleasepool {}で囲って強制的に掃除したらスクリプトで超高速めくりを実行してもメモリサイズは安定したままで落ちなくなった。

いやはや。

それにしても、どうしてこういう問題は、定時で帰る5分前に発生するのでしょうか。15分ぐらいで解決できたから良いんだけど。

2014年8月10日日曜日

CL6807 LEDドライブ

SOT-23-6が私のハンダ付けの限界@老眼的な意味で

はい、秋月で売っているアレです。

チップ製造元の推奨回路そのものなので面白くも何ともないのですが、以前150円のミニブレッドボードで組んだものをユニバーサルボードで作りなおしました。Rsは1Ω、100mAの定電流回路です。

安ブレッドボードはお手軽でよく使うのですが、どーやっても計算通りの数値が出ませんでした。調べた結果、ブレッドボードの接触抵抗が最大2Ωぐらいあってふらふらと変動していました。そのぐらいの変動は低速のデジタル回路で使う分には問題ないのですが、0.2-1.0Ωの電流検出抵抗を使う回路では大問題です。

CL6807はそれきりで、しばらくもっとお手軽(LM317と同じ考え方)に電流を設定できるNJM11100による定電流回路をいじっていたのですが…安定化電源チップのNJM11100はPWMを前提としていないため低デューティー比領域での制御性が悪くて、LED読書灯として使っていると「ふーっと消えていく」あたりがガタガタしてどうにも美しくありません。

ということで、改めてCL6807でちゃんと組み直してみた次第。私にしては珍しく配線ミスもなく一発で動作しました。ブレッドボード版ではジャンパ線に触ると電圧出力がふらついて使い勝手が悪かったのですが、今度はしっかり配線したので大丈夫です。

次は制御ソフトをもうちょっと何とかしたい。一応低消費電力化やUIを改善したRTOS対応版のコーディングは終わっているのですが、読書灯として使っている配線を外して机まで持ってくるのが面倒で着手できません。

夏休み終了間際にならないと宿題に着手しない病は一生治らないのだろうか…。

2014年8月8日金曜日

MSP430 LauchPad + I2c液晶 + RTC + 3軸加速度センサ



どうもI2Cとは相性が悪いというか、今まで一発で動いたことがありません。今回も散々苦労しました。

・I2Cの信号が出ていない?▶オシロの設定間違い
・I2Cのクロック波形が鈍りすぎ▶プルアップを10kから1kへ
・念のためアドレスを左右にシフトしてみた▶ダメ
・念のため液晶変えてみた▶動いたorz

最近の部品は強いんですが、やっぱり壊れるときは壊れます。しばらく行方不明になっていて、アクリル板の下敷きになっているところを発見された液晶なので、静電破壊でしょうね…。

しかしこのμA単位で動作する低消費電力MCUでプルアップ1kΩ☓2ってのはキツい。LOWの時だけとはいえ6mAなどという大電流が流れるなんて…。ということで10kに戻してみたけど特に問題ありませんでした。それでも0.6mAはかなりの大電流ですが。

とりあえず液晶が動いたので、その後RTC(RTC-8564NB)と3軸加速度センサ(ADXL345)をつないでみました。

例によってRTCが動かず苦労しましたが、これはレジスタの数を間違えていて、一回りしてスタートビットを叩いているつもりが別のレジスタ叩いていた、という軽いボケ。

3軸加速度センサは以前Arduinoで書いたコードをそのまま貼ってすんなり動きました。

というわけで「振動を検知すると超高輝度赤色LEDが点灯するデジタル時計(またかよ)」の出来上がりです。

で、MSP430G2553IN20ですが…Energiaで書いている分には「小さな低消費電力Arduino」として使えるのでお手軽です。同じぐらいお手軽なmbed LPC1114FN28といい感じで使い分けできますね。14ピンのMSP430でEnergiaが動いてくれればLPC810M21FN8よりも使い勝手が良いのですが、見当たらないのが残念。

Energiaのフォーラムを見ていたら、32768hzの水晶を直結してRTCとして使うライブラリが公開されていたので、今度試してみようっと(「今でしょ!」禁止)。