ラベル MSP430G2 の投稿を表示しています。 すべての投稿を表示
ラベル MSP430G2 の投稿を表示しています。 すべての投稿を表示

2023年10月18日水曜日

LauchpadとMSP430G2553の接続

やってみたら簡単でした。 

 LauchpadとGND, Vcc, TEST, !RST(47kでプルアップ)をつなぐだけ。



以下の図はTI社"MSP430 Hardware Tools User's Guide (Rev. AH)"からの引用です。


16bit 16MHzでそれほどパワーはないのですが、1Mhzあたり220uAという超低消費電力なので結構MSP430G2553はよく使うのですが、今までDIP20ピンを引っこ抜いてLaunchpadで書き込みしてました。JTAGめんどくせーなと思ってやってなかったんですが、調べてみたら4本繋げばいいとわかり、やったらできた、というオチです。

JTAGはおおげさなので……今後倉橋屋製品でMSP430使うときは上記4本の他にTx, Rxを出したコネクタ一発で書き込み & Serial Monitorできるようにしようと思います ^ ^

2016年1月27日水曜日

お風呂時計(第三回・小改良)

■少しだけ改造■

はい、続きです。


電池が弱くなると実際より明るく判断してしまう傾向があるようで、風呂場の照明を切っていても脱衣場を点灯すると時計のスイッチも入ってしまいます。

また、ちょっと向きを変えたりした時に手で影ができると計時が止まってしまい、入浴時間ゼロに戻ってしまいます。

ということで、時計が点灯中は、暗くなったかどうかの基準値をより小さくします。つまり、一度点灯したと判断したらかなり暗くしないと止まらないよ、という改造。今までは明暗の判断を1つの数値(45)で行っていたのですが、今回、明るくなったという判断には60、暗くなったという判断は50にしてみました。これで使用中にちょっと影になっても止まらなくなりました。

もう1つ、一度止まっても、30秒間以内に明るくすれば計時をリセットしないようにしました。これでちょっと影になっても、入浴時間がゼロに戻ることがなくなりました。

というわけで、フル充電した電池での開始時間は1/27 22:10です。

追記:終了は3/4 06:00でした。37日と8時間。「暗くなった」という判断値が大きすぎたようで、入浴後に脱衣所からふと風呂場を見ると点灯している、ということがしばしばありました。うーん、しかし、こうやってパラメータをいじって正解にたどり着いたとしても、それは「うちの風呂場で、今のLED電球使っていて」という限定条件ですからね。ここはやっぱり適応制御か何かしないといけない気が。それはそれとして、良いアルゴリズムを思いつくまで、とりあえず70 / 60で使おう←直さない予感 開始:3/4 21:00。

追記の追記:70 / 60だと横にてぬぐいを置いただけで消えてしまい、それはそれで面白いのですが、実用性にかけるので70 / 45にしました。再充電して3/5 08:25再開。

それにしても、こうやってバージョンごとにソースを張っているのはあまりにも頭が悪いので、github使います。

追記^3:あ、記録してなかった。もうちょっとLEDを暗くしたいのですががっちり配線してしまったユニバーサル基板に抵抗入れるのは面倒くさい。ので、デューティー比を変えてみたのですが1:500でもまだ十分明るいです。瞬間何mA流れてるんだろ。5月27日 5時再開。

追記@4:7月6日ぐらいから物凄く暗くなりましたが、7月9日の朝、まだ生きてます。でも、表示読めないしエネループ破損が怖いので止めます。7月9日 06:00。43日で思ったほど伸びなかったのですが、夏になって朝シャワーだけでなく夕方浴槽に浸かるようになったので1日あたりの点灯時間はほぼ倍になっているはず。さすがにデューティー比1:500は暗すぎたので、次は1:200ぐらいにしてみます。7月9日 17:00スタート。明るいw

追記@5:8月21日ぐらいから暗くなり、8月24日ほとんど表示は見えませんが、ここでおしまいにします。1:200だとチラツキが目立つので1:100にしました。デューティー比あんまり電池寿命と関係ないんじゃないか?という気がしてきました(笑)。ということで8月24日5時スタート。

追記@6:いきなり10月2日に消えました。明るいと電池の余力ないですね。でも、明るさと電池寿命はほとんど関係ないですね。精密な微小消費電流計測のできる機材が欲しい。ともあれ、1:100でほぼ支障ないので、そのまま継続。10月4日、電池セット。

2016年1月10日日曜日

Energiaでお風呂時計(第二回)


■追記(2016/01/27)■

ついに電池切れました。前回充電したのは12/22だったので、35日ほど動いたことになります。プログラムを改善したのはこの1/10のことだったので、かなり改造が効いている様子です。ついでに、明暗の制御を少し改良しました。

■続き■

前回の「Energiaでお風呂時計」、動くことは動くんですが・・・「無印の化粧品ボックス+ジップロック+ブレッドボード」という見た目があまりにも悲惨なので「100均の瓶+ユニバーサルボード」ですっきり仕上げてみました。

最初、透明な蓋の弁当箱を探したんですが、吉祥寺の100均では見つからず。とりあえず「防水」「透明」「適当なサイズ」というところで食品保存用と思われるプラスチック+金属蓋の容器にしました。

蓋が金属だと影が出来てしまって動作が安定しないのではないか?という懸念はありましたが、いまいち透明度の低いジップロックのロスが想像以上に大きかったようで、「明暗判別」の値を2倍近くにしないと消灯してくれない状態でした。

ユニバーサル基板は、部品沼から出てきた20年物のSUNHAYATO製、150円の値札が貼ってありました。さすがにフラックスが劣化しているのか、ハンダの乗りが悪い悪い。

ボードのレイアウトは下からLED、センサー、CPUです。LEDが割と重いので、安定させるために&蓋の影にならず見やすい位置、センサーは蓋の影にならない場所に上下逆さまに、残ったところがCPU。

明暗センサーはブレイクアウトボードにヘッダピンをがっつりとハンダ付けしてしまったのでIC用の背の低いソケットには使えず、かといってヘッダソケットを使うとLEDよりも出っ張ってしまうのでアウト。ということでユニバーサルボードに直接ハンダ付けしました。100円を越える部品を直接ハンダ付けするのは心臓がドキドキしますw

セグメントの配線には電流制限用の抵抗100Ω☓7個入れました。1kΩでも1.5mAぐらい流れるのでスタティックなら十分明るいのですが、ダイナミック点灯だとさすがに暗くてダメ。試行錯誤の結果と手持ち抵抗により100Ωになりました。

■で、起動しない■

で、組み上がったところでGND/VCCがショートしていないか確認してから電池つないでも起動してくれません。

電源電圧もI2Cのプルアップも正常。何せI2C以外はみんなDigital Outputという単純な回路なので、疑うところは「CPUがちゃんと動いていない」ということぐらい。ごく簡単なLチカプログラムを動かしてみても信号が出てきません。

となるとリセットが原因です。

ブレッドボード上では何も配線しなくても動いていたのですが・・・2553で前にもあったなー。というわけで、47kΩでプルアップしたところ、動作するようになりました。推奨回路ではコンデンサでGNDとつなぐようにも書いてあるのですが(電源を入れた時にしばらくGND近くを保って、リセットさせるため)、まぁ動いているから省略w

■起動したけど■



…なんだこの表示はorz

よくみると、

  • 中央が点灯すべきところで下が点灯している
  • 下が点灯すべきところでドット点灯している

ということで、3本の配線が間違ってました。せっかくワイヤの長さを揃えてきれいに配線したのに台無しですorz


なお、ユニバーサル基板と電池ボックス(単4☓3本)の固定には輪ゴムを利用しました。

■プログラム■

前のバージョンとほとんど変わっていません。変えたのは、前記の通り明暗を判定する値を大きくしたことと、明暗によってLEDの明るさを決める関数の演算式、それに秒表示の時のゼロサプラスをやめたこと、の3点です。

■ユニバーサル基板■

昔はブレッドボードがなかったので、抵抗の値を試行錯誤で決めるのも面倒でした。

今回、アホな配線ミスはありましたが、ブレッドボードで決まった通りに配線するだけなので、昔と比べれば大分ラクになりました。

でも、私は基本的にソフト屋なので、何の痛みも伴わないundoに慣れきっています。ユニバーサル基板で配線しながら考えていたのは「基板設計する方がラクだな」ということでした。配線ミスの修正を含めて、ユニバーサル基板の作成にかかったのは3時間ほどでした。このぐらいの基板設計なら2時間ぐらいで終わりますし、届いた基板へのハンダ付けも1時間かかりません。

昔は自分で1日かけてエッチングするか、数万円だして業者に頼むしかなかったんですが、今はカード決済で送料込み2400円ですからねぇ・・・。

基板を起こせば2枚目以降はあっという間に作れますし。まぁ、大抵の場合は需要ないのでそのまま未使用基板が増えていくだけなんですけどもw

2016年1月1日金曜日

Energiaでお風呂時計(第一回)

完成後、CPUもブレッドボード上へ移動

まぁ、またデジタル時計なんですけど。

使ったCPUはMSP430G2553ですが、開発環境はArduino互換なので、RTCを用意すれば簡単に移植することができます。ただ、nanoを使ったとしても消費電流を押さえるのはシンドいと思います。

■仕様■

  • 表示は4桁7セグメント赤色LED
  • お風呂なので電源は電池
  • 電池は1ヶ月ぐらいもたせたい
  • 時刻と入浴時間を交互に表示

■実装■

省電力で4桁の7セグを動かせる・・・ということで、CPUにはMSP430G2553を選びます。RTCは使わず、G2553に32768hzのXtalを追加して1秒ごとに割り込みを発生させて時計代わりにします。

さすがにLEDを常時点灯していては電池がもたないので、入浴時のみ表示するようにします。入浴中であることを検出するには、
  • 倒立スイッチ、風呂に入ったら時計を立てると点灯→一番簡単
  • PIRセンサーで人の動きを検出→簡単だけどお風呂のお湯で誤動作するかも?
  • 照度センサで明かりを付けたら動作開始
  • ドップラーレーダーで(ry
などいろいろ考えたのですが、ここはAPDS9930という照度・近接センサーを使います。ebayで「gesture sensor」って書いてあったのでAPDS9960みたいなことができるのかと思って買ったら単なる照度・近接センサーだった、というオチ。9960より劇的に安かったんですが、典型的な安物買いの銭失いでした。でも、寝かせて置くのももったいないので、使います。それに携帯電話用のデバイスなので、CDSなどで明るさを検知するよりも電力を消費しません(アナログの達人ならできるのかもしれないけど、動作時の消費電流250μA/待機時90μA,Sleep時2.2μAなんて回路を作るのは私にゃ無理)。

配線にはブレッドボードを使い、7セグLEDと電池ボックスは秋月です。

大きな声ではいえませんが、電流制限抵抗などは一切入れてません。Vf=1.8vの赤色LEDを使う場合には3.3v - 1.8v = 1.5v、5mAも流せば十分なので1.5 / 0.005 = 300Ωぐらいの抵抗をG2553とLEDのセグメント側の間に入れておくのが正しい使い方です。正しくない使い方をしているので「1」を表示している時と「8」を表示している時で明るさが異なってしまう(各桁を接続している端子に7セグメント分の電流が集中するので「8」のときは容量が足りなくなってしまう)のですが、まぁ自分用なので壊れなければOK。そのうちボード起こしたら抵抗入れるから、それまでがんばれG2553。

G2553への書き込みにはTIのLauchPadを使います。

ソフトはArduino互換のEnergia IDEを使って書きます。くれぐれもバージョン0101E0017と0101E0016は使わないようにお気をつけてください。

以下配線表。各セグメント7本と桁4本、電源、I2Cだけです。時計合わせはそのうち考えます。hourとminuteの間にコロンが点灯する表示器が欲しい(こないだaitendoで買ったら全品不良で点灯しなかった)。


MSP430G2553相手ピン備考
P1_47セグLED 11Seg A
P1_57Seg B
P2_04Seg C
P2_52Seg D
P2_21Seg E
P2_310Seg F
P2_45Seg G
P0_012Dig 1
P0_19Dig 2
P1_28Dig 3
P1_36Dig 4
P1_7APDS9930SDA
P1_6SCL
P2_6XTAL
P2_7XTAL


この他、電池の赤をブレッドボードの赤、黒をブレッドボードの青、G2553のVccとAPDS9930のVCCをブレッドボードの赤、G2553のGndとAPDS9930のGNDをブレッドボードの青、にそれぞれ接続します。


最初のバージョンは19日間動作しました(浴室使用時間は1日平均30分ぐらい)。LED駆動のデューティー比をかなり絞り込んだ現行バージョンは現在12日目ですが、さて。


■ハマり■

他のところに書いたネタもありますが:
  • 別のところ(Energia最新版でI2Cが動かない)に書いたけど最新のEnergiaを使ったらI2Cが動かなくなってしまった。2つ前のビルドをダウンロードしたら何事もなかったかのように動いた。うがあ。
  • 作業中にミスで電源逆接とG2553逆差しで2個トバしてしまった。
  • シリアルポートをGPIOでも使うとSerial.printなどを使った瞬間にリセットがかかる。まぁ当たり前なんですが……ライブラリの中のSerial.printで発症したために「ライブラリを呼ぶとフリーズする」という症状になり、ライブラリの問題か?と誤認してしまったために発見が遅れました。いやはや。
  • 明暗のスレッショルド設定にちょっと苦労しました。最終的にはセンサーからの値をLEDに表示させるプログラムを書いていろんんな向きで値を測定して閾値を決めました。やっぱ現場に行かんとダメやで。
  • 風呂場の明かりをつけているのに時計が消灯してしまうことがあって当初は上記閾値の問題かと思ったのですが、どうやらセンサーがLED電球の高速点滅の「滅」を拾ってしまうようで照明の明るさ/閾値設定とは関係なく発生します。なので、平均値を取るようにしました。ただ、センサーの値は1秒に1回サンプリングしており点灯時の明るさで500-700、消灯時の閾値が60という設定なので、LED電球を消灯してもすぐには時計が消えません。
  • ダイナミック点灯の合間にI2Cでセンサーを取りに行くと一瞬時計表示がチラついてしまいます。なので、時刻と入力時間を切り替えるときに読みに行くように変更しました。RTOS欲しい。
  • 照度に合わせてLEDの明るさを変えていますが、違いがわかりません。手で影を作ると少し暗くなるのでソレと判断できるのですが、あまり暗くすると消灯モードになっちゃいますし。

■ソース■

基本的には以前書いたデジタル時計の使い回しです。ArduinoでLEDのダイナミック点灯させるとだいたいこんな処理になっちゃいます。あと、APDS9930のライブラリはArduino用を使いました(APDS9930 Ambient Light and Proximity sensor)。

なんということもないダイナミック点灯プログラムなのですが、CPUのクロックを点灯中には8Mhz、消灯時には1Mhzに切り替えています。切り替えることでI2Cなどに影響がでないか心配だったのですが、問題ありません。1MhzだとG2553の消費電流は230μAで9930は220μA(スリープはさせていないが通信はごく低頻度なので消費電流はもっと低いはず)なので、まったくLEDを点灯させなければ2000時間程度は動くはずですが、点灯しない時計は意味がないので困ったものです。


2015年1月27日火曜日

MSP430/Energia+RTC+秋月巨大LED=デジタル時計

暗いとアラが目立たない

■またデジタル時計だ■

お前は他にやることがないのか、と言われるのは承知で作ります。

前回はダイナミック点灯させたところで力尽きたので、今回はちゃんと時計として動くようにします。TIの低消費電力MCU MSP430G2シリーズの2553、開発環境は同LauchPad + Energiaを使います。2553/LauchPadは日本だとちょっと手に入れにくいですが、RS onlineなどでLaunch Padとして$9.99で売ってます。せっかくなので、チップ単体のMSP430G2553も何個かまとめて買っておくと良いと思います(1個300円ぐらい)。LPC1114FN28と比べるとメモリなどごく限られるのですが、うそみたいに電池が長持ちしますし、かなりフットプリントが小さいので。

表示器は秋月の「超大型4桁7セグLED表示キット」です。低消費電力チップと組み合わせるのもどうかと思いますが。本来、秋月の時計キット用なのですが、巨大なLEDが今どきこの値段(1500円)で手に入るのは珍しいと思います。まぁaitendoで1280円で売ってたけどね…。注意しなければいけないのは、使っているLEDは16セグメントなのですが、秋月のキットでは7セグメントとして使ってます。aitendoのは16セグメント全部使っているけどね…でも16セグメント使いたくてもピンが足りないのよだからこれでいいのよ文句ないのよ(何その未練)

あとはRTCですが、今回は2553内蔵の発振回路 / カウンターを使います。キットには32768hzの水晶発振子が同梱されてます。小さくてLaunchPad基板へのハンダ付け大変ですけども。

温度計も2553内蔵の温度センサを使います。analogReadで華氏☓10の数値が直接返ってくるので便利です。まぁチップが多少なりともあたたまるので正確ではないけども(電源を入れた直後は他の室温計と一致していた)。

■先に落とし穴を書いておく■

内蔵温度センサも同じA/Dコンバータ使ってます。なので、Reference電圧を正しく設定しないと値がズレます。これで30分つぶしましたよ…。

■ハード編:巨大LED■

追記:
キットに付いてくるコロン用のLEDはクリアタイプで、方向によって明るさがかなり異なります(というか正面が眩しい)。「LED光拡散キャップ(5mm) 赤 (50個入)」を被せるか、広角タイプのLEDを用いると良くなると思います。

ほぼキットの説明書通り組み立てるだけなのですが、キットに付属しているコネクタはL型で表示器と平行に下側に伸びるように取り付けます。私は下面をフラットにしたかったので、手持ちの20ピンヘッダを取り付けました。あと、ハンダ付けの注意ですが…

  1. 金メッキ基板にはフラックスを(昔やった
  2. くれぐれもLEDの向きを間違えない(昔やった
  3. くれぐれも水平垂直平行を(昔やった
  4. ハンダ付けは必要十分に(昔(ry
基板と部品はまず最初に必ず仮組みをします。はんだ付けをしないで並べてみて、ぶつからないかちゃんとピンが全部ホールに入るかどうか、などを確認します。

1)のフラックスというのはピンや基板などをハンダで濡れ(?)やすくする処理剤です。小瓶で数百円、まぁ10年ぐらい使えます。キャップをあけると小さな刷毛がついてますので、それでハンダ付けする部分(ランドと言います)に少量塗ってやります。

2)はピンが多い部品を外すのはかなり困難です。確認確認また確認しましょう。

3)はピンを通す穴は案外大きいです。なので、雑に取り付けると微妙に部品が傾いてしまいます。傾く方向は左右だけでなく、基板と部品が平行になっているかも注意しなくてはいけません。なので、最初に1本をハンダ付けしたら、平行になっているかどうかをしっかり確認し、ずれていたらもう一度コテをあてて修正します。これで平行になっていることを確認したら、対角線上にあるピンをハンダ付けして再度確認します。これでOKならば、一応、隣のLEDも支障なくピンに入ることを確認してから、最初のLEDの残りのピンをハンダ付けします。

4)はリズムを身体で覚えるしかないっす。ただ、温度調整機能のついたハンダゴテを使っている分には最近の部品は滅多に壊れないです。それよりも、溶かしこむ時間が短すぎて接触不良になるケースの方が遥かに多いと思います。コテをあててピンを温める、コテというよりピンにハンダを当てて溶かす、ピンに自然にハンダが流れ込んだところでハンダとコテを同時に離す…ここまでまぁ3〜5秒くらい、10秒くらいかかってしまってもOKです。

今回の配線はソースに書いてありますが、こんな感じで。

信号名LEDボードのピン2553のピン番号同ピン名
Anode1桁目43P1_1
Anode2桁目22P1_0
Anode3桁目15P1_3
Anode4桁目56P1_4
Seg A177P1_5
Seg B188P2_0
Seg C129P2_1
Seg D1410P2_2
Seg E1311P2_3
Seg F1612P2_4
Seg G1513P2_5
dp<未使用>
コロン(+)204P1_2
コロン(-)18(GND)
水晶-19XIN
水晶-18XOUT

水晶は、Launch Padにこんなのが付属しています。


袋およびパッケージから取り出すとこんなに小さい。


2553のXIN-XOUTは右側のピンヘッダにもつながっているのですが、水晶発振子はピンから離れると動作が不安定になるので、なるべく近くに取り付ける必要があります。下の写真では中央の2553の右ちょっと上の方にある縦に2つ穴の空いたところがソレです。



貧乏症のワタシはこういう開発キットのようなものに手をいれるのはイヤなのですが、ハンダ付けします。ただ、こんなに小さいものなので、まずテープで止めて位置をルーペで見ながら位置を微調整してからハンダ付け。

これはハンダ付け前

ああしんど。

その他LaunchPadとLEDボード間は、メス−オスのジャンプワイヤで一本ずつ配線していきます。

■ソフト編■

MSP430/Energia用のRTCライブラリを使います。ライブラリ、ありがとうございます。なお、同ライブラリのライセンスはGPLです。
リンク先フランス語ですが、英語に切り替えられます。リンクからダウンロードすると、他にも面白そうなライブラリが並ぶのですが、今回はsRTCだけを使います。sRTCフォルダをEnergiaのディレクトリ下にあるLibraryに入れます。

使い方は簡単で、ヘッダをインクルードし、setup()で.begin()を呼び出し、秒単位の割り込みルーチンで秒をインクリメントします。あとは時分秒を取ってくるだけ。2秒間時計〜1秒間温度表示、を繰り返します。



あとはもういつものダイナミック点灯方式のよくあるデジタル時計ルーチンです。

以下ソースを公開しますが、ライセンスは一応GPLで。難しいことはしていませんが、ご質問いただければ喜んでお答えします。この後は、これに赤外線リモコン受光器か時刻合わせスイッチを取り付けてから、久々にプリント基板にしてみようと思います。


■使ってみて■

いやー、デカい。存在感ありすぎます。3.3vでのダイナミック駆動なのをいいことに電流制限抵抗もドライバも入れてないので少し表示が暗いのですが、ちょっと昭和の薫りがしていい感じw 昼間でも見えますし夜電灯を消すと睡眠の邪魔にならない程度の明るさで動いてくれています。何より、乱視+近視でも目を凝らさず見えるのが良いです。

ピンがあと2本空いているので照度センサと時刻合わせスイッチ(または赤外線受光器)は取り付けられるか…。プリント基板が遠のくなぁ。

■更新■

  • 2015-01-31
    コロンの出力をPWMに変更。ほどよい明るさになったけど点滅が見えてウザい

2015年1月6日火曜日

Energia + MSP430G2でのハマりポイント

そうさ、またデジタル時計さ。MSP430G2553+RTC+秋月巨大LED
小数点のポートはデバッグ用に使用中

■UART関連■

同じG2でも、UARTのTxとRxが逆になっているものがあるので気をつけましょう。2553でもRevision 1.4以前とRevision 1.5は異なります。これはLauchPad基板のジャンパで切り替えるようになっています。

Guide to the MSP430 LaunchPad (MSP-EXP430G2)

シリアルモニタでLaunchPadからSerial.write / printで出力されてくる値を見るにはTxを使うのですが、ジャンパが違っていると書き込みできません。Energiaからの書き込みは正常にできるので、てっきり正しくつながっているものと思い込んでいたら、違いましたorz

■sprintfがクラッシュ■

複雑な書式指定をするとメモリ領域がメチャメチャになってクラッシュします。小さなプログラムだと通っちゃうことが多いのですが、10KBを越えるようなプログラムで、例えば、
sprintf(buf, "%02d%02d%03d%d", h, m, t1, t2);
とやると、以下のような症状が出たりします。

  • bufに値が入らない
  • 数秒ごとに繰り返しsetupが呼び出される
  • シリアルポートが文字列の途中でぶっちぎれる
  • 一度電源引っこ抜かないとEnergiaから書き込めなくなる


解決策としては、バッファとして使うメモリにvolatile指定を行い、sprintfの書式、特に数値変換については極力単純にして、あとは(上の行と同等のことをするには):
volatile char buf[16],temp1[16], temp2[16];
sprintf((char *)temp1, "%d", 10000 + h*100 + m);
sprintf((char *)temp2, "%d", 10000 + t1*10+t2);
sprintf((char *)buf, "%s%s", (char *)temp1+1, (char *)temp2+1);
で1つにまとめます。temp1,temp2を+1しているのは最初の'1'をスキップさせる古いc言語のテクニックです(懐かしい…)。

■MSP430G2553について■

これ温度センサー内蔵なんですね。analogRead(TEMPSENSOR)使うと華氏*10で返ってくるので、楽です。ワンチップで温度計作れます。我が家の他の温度計とも誤差1度以内なので、まぁ合っているんだろうなぁ、みたいなw

で、巨大LEDですが…3.3v駆動+PWMで制御しているのをいいことに、電流制限抵抗なしでつないでます。良い子は真似してはいけません。

さて、あとはRTCとの接続か…。

一応Xtalを外付けしてオープンソースのライブラリをつかえばリアルタイムクロックとしても動くのですが、年月日まで管理してくれないのでその辺を自前で実装するのが面倒くさい。かといって、RTCについても以前RTC-8564NBをArduinoにつないだときのソースを探すのが面倒くさい。

昨日今日とsprintfで全能力を使い果たしてしまったので、まぁそのうち元気が出たら作ります。

私を何より元気にするのは現金なんすけどねw

■追記■
これをデジタル時計として動くようにしました。ソース公開してます。予定ではRTCチップを外付けする予定でしたが、水晶発信しだけ外付けして使いました。

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として使うライブラリが公開されていたので、今度試してみようっと(「今でしょ!」禁止)。

2014年7月12日土曜日

MSP430 Launchpad + MacOS X


さて、というわけでLauchPad届きました。月曜の朝Mouser.comに注文してテキサスを発送、木曜日の昼に東京都下に届くんだから地球も小さくなったもんやで。一緒にFRDM46も届いたので、こっちも楽しみ。



LauchPadにはいくつか環境があります。純正環境はMacでは動きませんが、サードパーティなら大丈夫。Xcodeから動かすツールなどもありますが、とりあえず手っ取り早く動かしたいので、それも後回し。レジスタなどを調べるのもめんどくさいし、とにかく週末まで待たされたのだからすぐ動かしたいのが人情じゃないっすかw

まずは勝手知ったるSkitchで書くことのできるEnergiaを試してみます。ところでEnergiaって何て読むんでしょう。つい「エネルギア」って読んじゃったりするんですが@シンフォギア的な意味で 

参考にするのはこのページ(https://github.com/energia/Energia/wiki/Getting-Started)です。ここでは先にドライバ落とせって書いてあるけど、アプリ本体にドライバ入っているので次に進んで大丈夫です。

Energia本体のダウンロード。「download」から「energia-0101E0012-macosx.dmg」を落とします。ダウンロードしたら解凍します→フォルダが開きます。


Energia.appアイコンをApplicationsアイコンへドラッグ&ドロップします。そしてドライバをインストールしましょう。MSP430LPCDC 1.0.3b.pkgをダブルクリック、「開発元が未確認なのでインストールできません」が出てきたら、そこは自己責任でpkgを右クリック→開く→「未確認だけど開く」で。インストール後再起動を求められますので、他に問題ないことを確認してからクリック。

なお、Java for OS Xも必要ですので、普段インストールしていない方はこちらでどぞ(MacでのJavaのインストール方法)…EnergiaのサイトにJDKのバージョン書いてないけど、Java 7なら大丈夫、かな…。

その間に開封します。しまった、開封直後の写真を撮り忘れたw


再起動が終わったら、Energiaも起動します。懐かしいArduino IDEを赤くしたようなアプリが起動します。Macと付属のUSBケーブルで接続。さっそく赤と緑のLEDが交互に点滅します。ちょっとウザいので、LED近くのSwitch2を押すと黙ります。


さて、Getting Startedに戻ります。USBのシリアルポートを選び、ボードとチップの種類を選びます。シリアルは「Macの場合は/dev/cu.uart-XXXXを選べ。/dev/tty.uart-XXXX」はダメって書いてあるんだけど、cuが出てこねぇorz ターミナルで見ると/dev/cu.uart-C1FF4A7AB7450931ってのが出てくるんですが…とりあえずこれを選んでおきます。

ボードは当然LaunchPadですが、チップは一応LaunchPad上のMSP430を確認してください。老眼にはしんどいですが、2553がついていたので、Toolsメニューから「LauchPad w/msp430g2553」を選びます。

まずは動作テスト(上のシリアルポートのこともありますので)、手っ取り早くテンプレートを動かしてみます。 ファイル>スケッチ例>1.Basics で、Skitch Windowが開いたらUpload Buttonをクリック。赤のLEDがのーんびりと点滅を始めれば、とりあえず問題なし、ということになります。

さて、環境は整った(環境を整えるのは30分もかからないんだけど、ブログ書いたり再移動するついでにメンテしてたら2時間かかってしまった…)。次は恒例のデジタル時計を…と思ったら、ジャンパ線の在庫が足りないっぽい…。