2013年6月26日水曜日

グラフィックLCD

グラフィックLCDを使ってみました

今回使った液晶は秋月で売っている128x64のタイプです
http://akizukidenshi.com/catalog/g/gP-03413/
TG12864E-01XWBV というやつです

この液晶は電源やバックライトを含めて20本の配線でドライブできます
キャラ液晶と違い常に8bitで通信し
Ena信号だけでなくCS(Chip Select)端子が2本存在します


128x64ピクセルなので、8x8pxの美咲フォント等を使用した場合16文字x8行書くことができます
もちろんグラフィック液晶なので自由な液晶や図形を書くことができます

上の画像のサンプルでは直線を2本 正方形と真円を1個ずつ それから文字列を書いています

この液晶は1ピクセルの大きさが横1対縦1.2程度なので正方形を書いても実際には正方形にはなりません

今回はSTBeeMiniに接続し、美咲フォントと自作のUTF8toShift_JISテーブルを使用しています
とりあえず動作確認が目的なので変換テーブルは第1水準漢字しか実装していませんが、それでも全体で92kにもなり、STBeeMiniのROMギリギリです(DFUの転送には1回30秒もかかってしまいます)

参考までに今回作った基板の実体配線図を添付しておきます
図右上に10kΩのボリュームが有り、コントラストを調整しています
VDD(5V)とVEE(-10V)の間に接続しています
もしもこの図を参考に作ろうという人がいるなら、ボリュームのVDDとVEEを逆にすると幸せになれるはずです

RSをPB0に接続したほうが簡単に作れますが 今回は諸事情でPB2から配線しました

この液晶は常に8+4+2を専有しているくせに、アクセス速度はやたら遅いので
あまり実用的な使い方はできなさそうです

2013年6月25日火曜日

気圧から高度を計算

2箇所の気圧と1箇所の気温から高度を計算する式
C#ですが簡単な手直しでほかのコードでも使えます

/// <summary>
/// 気圧と気温から高度を計算
/// </summary>
/// <param name="p">計測地点での気圧[hPa]</param>
/// <param name="p0">海面での気圧[hPa]</param>
/// <param name="t0">p0を計測した地点での気温[℃]</param>
/// <returns>高度[m]</returns>
double hPa2m(double p, double p0, double t0) { return ((Math.Pow(1013.25 / p0, 1 / 5.256) * ((Math.Pow(p0 / p, 1 / 5.256) - 1) * (t0 + 273.15) / 0.0065))); }

基本的に使い方は特殊な部分は無く、double3個の引数とdoubleの戻り値です

なおこの計算方法では高度10km程度までしか計算出来ません

一応この計算方法で大きく外れた値が出ていないのは確認済みですが各自の責任で使用してください

2013年6月22日土曜日

Blackberry Trackball

ブラックベリーのトラックボール ブレークアウトボードを買ってみました

ちょっと興味があって確保しただけで何かに使う予定はないですが
とりあえずmbedで動作確認をしたので報告

かなり暗い画像ですが、これ以上明るくするとトラックボールのバックライトの色合いがわからなくなってしまいます

このトラックボールはホールセンサを使用して回転を検出するタイプで
チャタリング処理が必要ありません(クリックボタンはタクトスイッチなのでチャタリング処理必須)
しかも回転方向毎で計4出力があるので
変化したピンの方向にインクリメントするだけなのでかなり楽です
今回はTickerを使いましたが、ピン変化割り込み等の方が楽だと思います
変化割り込みの場合は検出は立上がりと立下りの両エッジを検出するほうが無難です

そしてこのトラックボールにはLEDが内蔵されており、
単純な3色フルカラーではなく、Whiteを含んだ計4色となります
上の画像の状態はRGBWそれぞれ100%です
かなり赤っぽい感じになります
クールホワイトを表示したい場合はRGBWでFF,FF,00,FFくらいがちょうどいいくらいです
白だけを点灯させた場合は微妙に黄色っぽい白となります(電球色ではないです)
内蔵LEDはカソードコモンになっているので点灯させる電圧には注意が必要です
一応180Ωの抵抗がそれぞれのLEDに接続されているのでマイコンに直結できますが
3.3V駆動ではかなり暗いです
完全な暗闇で自分の居場所を誇示するには十分ですが
動作状態を示す用途に使用する場合は明るい環境での視認性が悪くなると思います
わざわざ5Vを引っ張ってトランジスタ等でドライブというのも面倒なので
このトラックボールのバックライトを使う場合は5V動作のマイコンを使うといいかもしれません
Arduinoとか そっちの方を


内部処理的には面倒なことはしていないのでソースコードは載せませんが
トラックボールの検出とLEDのPWMをひとつのタイマ割り込みでやろうとすると面倒になります
トラックボール自体の割り込みは数十mSec程度で十分ですが、LEDはPWM分解能に合わせて十分に速い速度で制御する必要があるからです

それとSparkfunの例によって取り付け穴は横方向にハーフピッチずれています
なのでコネクタとネジ穴の両持ちをする場合はハーフピッチのユニ基盤か、自分で基板を作る必要があります
ブレークアウトボードのブレークアウトボードとかいうワケわからないことになりそう。。

コネクタは電源含め11本出ているので、コネクタをつけるのは現実的ではないかもしれません
ピンヘッダを使うか、さもなくばフラットケーブルを直接ハンダ付けというのがいいでしょう
ケースを使わずに直接基板に固定する場合はソケット等を使わずにピンヘッダの両端にハンダ付けするというのもひとつの方法です
ただしネジ側を固定しないとクリックはできません

今回は2個買いましたが、双方の基盤でクリックの感触が異なります
カチッと押した感じがするものと、押したかどうかわからないものです
クリックは微妙に検出しづらい時があるので、あまり多用しないほうがいいかもしれません

値の変化等に使う場合はまっすぐ上に動作させてる気でも実際には横方向にも入力されていたりするので スイッチ入力の代わりにカーソルを移動したり値を変化させたりという用途には向かないですが
GUI上でマウスポインタを移動するような、ある程度遊び幅のある用途に使うことが望ましいでしょう

2013年6月20日木曜日

.NetMicroFramework

諸事情でNetduinoを買いました。正確に書くとNetduino Plus 2となります。
STM32F405RGを使用し、Microsoftの.NetMicroFrameworkが入っているため、Visual C#で開発することができます。
端的に説明すると、Arduinoのような使いやすさで、mbedのような高性能を、Windowsと同じようにコーディングできる。という感じでしょうか。
NetduinoはArduino形状なのでmbedほど使いやすいわけではないですが、EthernetやmicroSDソケットが搭載されていたり、比較的使いやすい形となっています。
VisualC#が標準の開発環境となるため、mbed等のように見づらく操作しづらく使いにくいIDEではなく、非常に高性能な予測入力が使用でき、インデントなども自動で行われ、カスタマイズも容易です。
もちろんソースコード内に日本語を記述でき、printDebugでも日本語や漢字を使用することができます。VisualC#でソースコードレベルでデバッグが可能なのでバグの発見や駆除も容易でしょう。

タイマ割り込みを使用したLチカ
Lチカ程度なら簡単に記述でき、タイマ割り込みを使用するのも宣言を含めて1行でできます。C#なので多重定義も使用でき、簡単に使用したい場合やより高度な設定をしたい場合でも同じ方法で初期化できます。

欠点を挙げるとすれば、Arduinoやmbedほど日本で普及しているわけではなく、情報量がさほど多くないことや、コードを書き込む際の安定性の問題があります(mbedのようにファイルをコピペする形式ではなく、VisualC#から転送する 昔使っていた時に頻繁にエラーが出ていた 最近どうなったかは知らない)。


Timerを使用することによりタイマ割り込みを使うことができますが、.NetMFWのタイマ割り込みはハードウェア処理ではなく、ソフトウェア処理のため、CPUリソースの許す限りいくつでも可能という利点があります。これはコードの動作を短い時間に区切って割り当て、常に時間を監視して、ちょうどいいタイミングが来たら関数を呼び出す、という動作をしているためです。そのため時間の正確性については微妙なところがあります。ただミリ秒やマイクロ秒といったものすごく短時間の精度が要求される場合は普通のマイコンに直接コードを書き込んだほうが安心できるでしょう。

Netduinoの入手ルートは現時点ではスイッチサイエンスが簡単です。
少し遊ぶ程度ならNetduino2でもいいですが、SDカードへのアクセスやEthernetを使おうと思うならNetduinoPlus2が最良の選択だと思われます。
他にも.NetMFWが動くボードはありますが、僕は使ったことがないので評価出来ません。

2013年6月19日水曜日

圧力センサ

気圧センサの次に書くエントリとしてなんとも微妙な感じですが
今回は圧力センサの話です

・気圧センサと圧力センサの違い
基本的に気圧センサというのは読んで字の如く気体の圧力を測定するものですが
狭義では大気圧を測定するためのセンサという認識です(あくまでも僕の考え方)
大気圧というのは数十kPaから130kPa程度の範囲です
対して圧力センサというのはあらゆる圧力を測定できるセンサという認識です
もちろん気圧センサも圧力センサの一部です
基本的に今まで圧力は気圧だけを測定していましたが
次は地球の内部に向かっていく方向も測定したくなり
圧力センサを買う流れとなりました

例えば水は10m毎に1気圧増加するので、現在の水圧を測定すれば現在の深度もわかるというわけです

そこで今回は0MPaから1MPaまで測定できるセンサをRSで買いました
1MPaというのは高圧ガスの問題で校正が面倒というのと
深度100mがおよそ1MPaになるので さすがにそれだけ測れれば十分だろうという考えです

今回買った圧力センサは電流出力で
計測部にかかる圧力に比例して電流が増加していきます
なお計測部の動作電流としてオフセット4mAが設定されています
直接電流を読んでもいいですが、基本的にマイコンのADCは電圧検出のため
一旦抵抗器を介して電圧に変換しています
抵抗器はメーカーPDFの使用可能範囲から、簡単に計算できる100Ωを選択し、センサと一緒にRSで買いました(0.05%品で2800円でした ぼくが普段使っている抵抗の2800倍 もしくは14000倍です コレだからn倍って表現は好きじゃないんだよ。。)

なお、センサの特性上電源電圧が8-30V必要で
抵抗を100Ωとした場合の電圧範囲は10-26Vです
一般的なマイコンの電源範囲ではないので、専用の電源が必要になります
PINフォトの放射線検出から30Vを受け取って7812を介すとか
さもなくば5Vから昇圧DCDCで15Vを作るとかしなければいけません


今回はセンサの動作確認が目的だったのでAC100Vからスイッチング電源で15Vを作成し、値はテスターで読みました

近所の知り合い宅のコンプレッサーを借りて試験しました
0MPa-1MPaだとコンプレッサーの圧力範囲なので楽

センサは開口部がG1/4になっているので市販のG1/4ハイプラグカプラメネジを使えば簡単にコンプレッサーと接続出来ます

0.5MPa単位で測定しプロットしたグラフがこちら
※1) 0.5MPaは測定していないため0V
※2) 動作電流4mAのオフセットとして4Vがあります

良い感じに0から8MPaまで直線になっています
もう少し詳しく計測すればマイコンでADCした結果から圧力を計算することも可能でしょう

とりあえず第一目標「高圧を測れて液体にも耐えられるセンサを探す」はクリアしました


なおこのセンサは専用のケーブルなどと組み合わせた場合に最高の性能を発揮出来ます
上の写真のような使い方はしないほうがいいです

2013年6月11日火曜日

気圧センサ

気圧センサといえば、比較的入手性がよくて簡単に扱えるものとしてMPL115A1およびA2があります。
これはSPI(A1)、もしくはI2C(A2)でアクセスできる気圧センサで、秋月を始めストリナやスイッチサイエンスでも販売されていて非常に入手しやすいと言えます。(個人的にはストリナのモジュールが一番扱いやすいと思います 欠点を上げればMPL115A2しか無いところ)

しかしMPL115の欠点として、測定範囲が500hPaから1150hPaと狭いこと
また、精度が10hPaと低いことが挙げられます

範囲としてはおよそ-1054mから6374mの範囲です
誤差は1013.25hPaから10hPa低くなる(1003.25hPa)と83.72mも変わります
いくら高速で読み出せるとはいえさすがにこの誤差は無視出来ません

高度もモデルロケット程度であれば範囲内ですが(というか誤差の範囲に入る可能性が高いですが)
ある程度高高度に上がる場合はこれでも足りないという可能性が出てきます
(ガッツリ航空法などの制限に入るのでこの高度まで飛ばすことはまれでしょうが ちなみに標高6400m以上の山は70箇所近くもあります)


そこで最近使い始めたのがSTMicroのLPS331APという気圧センサです
蛇足ですがSTMicroのMEMSセンサは累計20億個以上を出荷しているそうです

LPS331APの特徴として
1) 測定範囲が260hPaから1260hPaと広い
2) 精度が0.2hPaと高い
3) 24bitで直接気圧を取り出せるため計算が楽(ビットシフトだけで計算できる)
などが挙げられます
ほかの特徴として、ひとつのセンサでSPIとI2Cを選択できる/センサ内でサンプルの平均化ができる などがあります

欠点として最高で25Hzのため、MPL115よりもデータを得られる頻度が低いという点です
(25Hzを遅いと感じるか早いと感じるかは使う人や用途によるでしょう 僕は遅く感じます)

また、入手性は最高というわけではなく
現時点ではストリナかスイッチサイエンスから入手出来ます
スイッチサイエンスの方はどういう使い方を想定しているのか、ピンが片方に出ているため実装が面倒そうです。コネクタを使って配線を引き出すなら使いやすいかもしれませんが

測定できる範囲は高度で-1800mから12091mまで
精度は標準で0.83m MAXで1.66m程度です

更新レートはワンショットから1/7/12.5/25Hzを設定できます

割り込みなどもあり、一箇所に置いて天気予報に使うなども可能です


IFとしては一般的なI2C/SPIで接続可能ですが
センサ自体は微妙に謎な挙動を示し、書き込み可能なレジスタはほぼ全て、操作しないレジスタでも初期値を書き込まないと正常に動作しないようです
データシートを隅々まで読んだわけではないので、見落としがあるのかもしれませんが
書き込み可能なレジスタは飛び飛びで存在するので初期化がやや面倒です


気圧値を読み出すにはPRESS_OUT_XLからuint32_tとして3バイト読み出し(最上位バイトは0)
12bit右シフトすればhPaになります
ただこれでは1hPa単位となってしまうため精度が必要な場合はこの計算は使えません
リソースに余裕があるCPUであれば浮動小数点で扱ってもいいですが
32bit整数でも一旦100倍してから4096で割る等すればPa単位となりかなり高精度になります

温度を読み出すにはTEMP_OUT_Lからint16_tとして2バイトを読み出し
(読み出された値/480)+42.5
でdegCとなります
温度はやや複雑ですが、十分に整数だけで計算できるのと
少し高級なマイコンであれば掛け算や割り算もハードウェアでできるので大変ではないはずです


最後に、MPL115を擁護しておくと
このセンサは300hPa程度まで引いても壊れたりしませんでした
LPS331APはどこまで耐えれるか試していません(一応高圧には耐えられるようですが)
ただしMPL115もある程度の圧力まで下がると意味のない値になりますし
センサが破壊されていないとは限りません

2013年6月9日日曜日

ロケット搭載品を作る

今までの数少ない経験から ロケットに自分の作った電子回路を載せる時の注意点とか書く予定です

電源について

基本的に数百メートル程度のモデルロケットなら乾電池等で問題ないはずです
Ni-CdやLi-Po等も使えるはず
扱いやすさで言えば006Pとかも使えます

しかし高高度まで飛ぶ信頼性の求められる用途や特殊な環境での打ち上げの場合は乾電池やNi系/Li系二次電池は避けたほうがいいようです
この場合リチウム電池(1次電池)を選択するべきです
2CR5などのリチウム電池は-40℃から+70℃の範囲で使用することができます
特殊な場所を除いて、寒冷地などでも使用出来ます

リチウム一次電池と他の電池の違いは電解液にあります
一般的に販売されている電池は電解液に水を使っています
そのため内部が0℃以下になると電解液としての能力を失います
しかしリチウム電池の場合は融点が-40℃の溶媒を使用しているためこの温度まで使えます

リチウム電池の容量などはPanasonicの法人向けページに記載されています
http://industrial.panasonic.com/www-ctlg/ctlgj/qAAA4000_JP.html

2CR5は電池から電極が出ているためハンダ付けが容易です
ただし長さが45mmあるので小型化が必要な用途には使えません
CR-P2は2CR5より直径が少しちいさく、高さが9mmほど短くなります
ただし少し幅が広くなっています
CR-P2は電池に直接ハンダ付けする必要が有るため
容量の大きなハンダゴテで手早くする必要があります
基本的に2CR5を使用し、どうしても狭い場所に入れる必要が有る場合はCR-P2を使うなどの使い分けがいいでしょう

また電池を使用する場合 基本的に電池ボックスは使うべきではありません
一般的な電池ボックスは簡単な衝撃で電池が外れてしまいます

操作系

基本的にロケットなど高G環境にさらされる場合スイッチを使用するべきではありません
そもそも一旦飛んでしまえば手の届かない場所に行くのに
人間が操作するための部品は必要ありません
スイッチを載せる場合は少なくとも誤動作した場合にでも問題ないソフトウェアを構築してください

ただしリセットスイッチ テメーはダメだ

リセットスイッチは確実に分離しておいてください
また電源スイッチも避けるべきです
電源スイッチはリセットスイッチと同様のリスクがあります
むしろ中途半端に電圧が低下する分リセットスイッチよりも質が悪いです
絶対に電源スイッチが必要なら耐振動性のあるスイッチを使用してください

テレメトリ

飛距離数百m程度のモデルロケットであればXBeeで十分です
XBeeモジュールは一応300hPa程度まで引いても動くのを確認しました
(1個しか試していないですが)

それ以上の数km以上になると簡単に扱えるモジュールはありません
アマチュア無線等資格が必要になります

平面に移動するだけなら3G回線等が使えますが
ロケットは垂直に移動してしまうため使えません

電装系

基本的に基盤対電線の接続でピンヘッダを使うべきではありません
ピンヘッダ/ピンソケットの組み合わせは基盤対基盤に使う程度に留めておくべきです
(十分にピン数の多い/16p以上であれば対電線にも使えますが その場合はフラットケーブルを使用し圧着ピンソケットを使ってください)
基盤対電線でピン数が2本や4本程度の場合は簡単に抜けないようなコネクタを使います
JST-EHやJST-XAがいいでしょう
前者は小さなコネクタですし 後者は大きくなりますがロック機構がついています

宇宙用になると金メッキでネジ止めできるコネクタ等になりますが
弾道飛行程度であれば必要ないと思います

防水

海上で回収するようなロケットではデータを保護するために防水ケースに入れる必要があります
しかし防水は並大抵のことではなく
大丈夫だと思っても浸水していたりします
ケースはタカチ等の防水に特化したケースを使用し、加工は最小限にとどめてください
家庭用のタッパー程度では簡単にフタが外れるので避けるべきです

基盤

可能であれば基盤は外注したほうが信頼性が高く
自由度もはるかに高くなりますが
実装までやってもらうと物凄い値段になります
(1枚数万円になることも 使い捨てで使える値段ではない。。。)
ユニバーサル基板で作る場合はなるべくスズメッキ線で配線し
ジャンパワイヤは最小限に留めてください
ジャンパワイヤは曲げる力に対して多少有利だと思われますが
どの配線がどこに行くのかが掴みづらくなります
ジャンパワイヤを使う場合は種類によって色を変える等の配慮が必要です
2.54mmピッチで配線されるスズメッキ線は実装密度の点では不利ですが
簡単に目視で配線が確認できるという利点があります

部品を実装する際に
背の高い部品はなるべく寝せて基板に固定するようにしてください

キャパシタ

電解コンデンサ等は中に液体が入っているため、真空中に長時間晒されると容量抜けを起こす場合があります
電解コンデンサは基本的に使用せず、セラミックコンデンサなどを使ってください
最近のセラミックコンデンサは100uFとかも普通に売ってるので
小さめの電解コンデンサ程度の容量はあります


2013年6月8日土曜日

手っ取り早く鉛蓄電池を充電する方法

最近、遠出する際の電子機器の電源として鉛蓄電池を導入しました
前はeneloopを使ってたんだけど 鉛蓄電池のほうが楽そうなので

で、問題になったのが6V用の充電器
市販のキットとかもあるんだけど 面倒で

鉛蓄電池は(も)定電流充電で一定電圧で終了させる
という方法なので
ちょっと高性能な安定化電源で充電出来ます

最低限必要な機能がCCおよびCV
CCはControl Current
CVはControl Voltage
要は電流制限機能と電圧設定機能が必要です

僕はAD-8724Dを持っているので これを使っています

6Vの鉛蓄電池を充電する場合は
CV:1セルあたり2.25Vから2.3V もしくは2.4Vから2.5V
CC:最大0.45C
くらいが良いようです
CVに関しては 電圧が低いほど寿命が長く 電圧が高いほど容量が大きくなるようです(予想)
ただし充電電圧が高すぎると電池を痛めたり、最悪の場合は発火などもありえるので、必ず電池のスペックを超えないようにしてください
CCは1Cが電池の容量で、たとえば6Aの電池であれば0.45Cで2.7Aです
(充電電流は電池のデータシートに書いてあります もしくは電池のパッケージに書いてあります)
時間に余裕があるならCCは0.1C程度がいいかもしれません
(数Ah程度の電池であれば数百mAで充電)

接続する手順としては
1)電源装置の電圧表示で大体の電圧を設定する
2)テスターを接続し電圧を微調整する
3)電源装置のCCが最低になっていることを確認し電池に接続する(極性に注意)
4)電源装置の電流表示を見ながら調整
5)時間を測りつつ様子を見る
という感じです

手順2でテスターを使っているのは 電源装置によっては表示誤差が無視できないためです
精密な電圧表示が出来れば問題ないですが、モノによっては意外と誤差が大きいため
相手は数十Wのエネルギーの塊なので、少しでも不安要素があるなら解消しておくべきです
電流は若干安全を見た範囲で設定しておけば大丈夫です
基本的に充電終了は電圧を見て確認するので
電流値は電池を傷めない程度に設定しておけば良いはずです


鉛蓄電池を使用する場合の注意として
通常の(通気口の空いた)電池は充電/放電時に水素ガスが発生します
あまり負荷をかけない範囲での使用では問題ないですが
十分に通気性のある環境で使用してください

また、カーバッテリーは電極の付着物が車の振動で剥がれることを想定しているものがあります
このタイプを安置した状態で使用すると急激に容量が低下してしまいます
移動せずに使う場合はちゃんとそれ用の電池を使ってください
(USP用等が使えるはず)

鉛蓄電池の終止電圧は1セルあたり1.85V程度です
3セルであれば5.55V程度
スペックシートでは1.8Vで計算しているため、若干容量は減りますが
余裕を見て というか 寿命とかの関係で
若干高めです

鉛電池に限らないですが
電池の寿命は累計の放電電流でおよそ決まります
また、深い放電を繰り返した場合も寿命が短くなります
なるべく浅く、少ない電流で運用することが長寿命化の秘訣のようです


ここまで色々書きましたが、僕はあまり鉛蓄電池の運用経験が無いので
ネットから拾ってきた情報とかです

安全に運用するためには温度管理や電流管理、電圧管理が必要です
充電中の電池からは目を離さないようにしてください

STM32F1でフラッシュサイズを獲得

STM32F10xでは特定のレジスタにデバイスの情報が書き込まれています
これは予め工場で書き込まれ、ユーザーが変更することはできません

Flashサイズは0x1FFFF7E0にuint16_tで保存されます


値はキロバイト単位で保存されています

RAMサイズも同じように読めるはずですが、ぼくの環境ではなぜか動いていません

2013年6月6日木曜日

Perlでハッシュ定数

今更ながらにPerlというモノを使い始めました
(去年の夏くらいに「Perlとか楽だよー便利だよー」って言われてたのにね)
Macだと標準で使えるってのもありますが

今日1日使ってみてCSVのデータ変換とかはできたので
次はもうちょっと高度なことをやってみたい
ということで、ハッシュの定数をやってみました

Perlの基礎とか知らずに使ってるので
間違った情報や説明があるかもしれません

通常ハッシュは
my %hash = ( "name" = "taro", age = 15 );
のように初期化しますが

定数の場合は
use constant hash => { "name" => "taro", age => 15 };
のようになります

ハッシュから値を取り出すには
print "${hash()}{\"name\"}\n";
となります
"name"のダブルクオーテーションの前にバックスラッシュが入っているのは
printのダブルクオーテーションが切られないようにするためです
通常のように取り出すことができないのは
constantは関数のように扱われるため
()で正しく関数として認識させたものを
{}でハッシュとして認識させます
C#で言うキャストみたいなことかな?

constantのハッシュでも入れ子構造にできるので
色々と使えそうです

#なんか定数の入れ子構造ってあまり意味ないってどこかで読んだような…?

ビルドなしで実行できるとかは結構便利です
ファイルの変換とか毎回R/Wファイルを指定するの面倒なんでここらへんが何とかなれば…
#直接コードの中にパス書いちゃってるわけですが。。

2013年6月2日日曜日

STM32F103VET6を使う

前にRSでついでに買ったSTM32F103VET6ですが
やっと変換基板に載せたので
「こんなこと始めました」ということで 報告

STM32F103VET6について
RSの販売ページ

性能としては
ARM Cortex-M3
72MHz
ROM512k/RAM64k
100pinのQFP
という感じ
ピンピッチは0.5mmなので秋月の変換基板に載せることができます

ハンダ付けの方法についてはネットにいくらでも情報が転がっているので特には書きませんが
30Wのコテと鈴60%のハンダ それとハンダ吸い取り線でできます
0.5mmピッチはかなり前にFT232を実装して以来ですが、意外と 簡単に できます


水晶とか色々面倒なのでとりあえず内部クロックで動かしてみようかと思っているのですが
システムの初期化がよくわからなくて進んでないというのが現状です

予定としてはSTM32F4でぃすかばーがSWD接続のライタとして使えることが確認できたので
内部クロックを使ったLチカコードを試してみたいなーと思ったりしてます


PIC16F84Aとかは機能が少ない分初期化が楽だし
16F88だって内部クロックの初期化とかも比較的カンタンにできるんですが
さすがに32bitマイコンともなるとそう簡単には動いてくれなさそうな

2013年6月1日土曜日

STM32F4DISCOVERYでST-Link

STM32F4DISCOVERYをST-Linkとして使う方法です
とりあえずFlashの読み込みだけです

使用したのはSTM32F4でぃすかばーです
コレ → http://akizukidenshi.com/catalog/g/gM-05313/

ほかにSTM32F3等でもできます

ターゲットとして STBee を使用しました
STBeeのCN2(JTAGコネクタ)も必要に応じて実装しておいてください


まずは必要なソフトウェアの準備
ST-Link V2のページから必要なモノを落としてきます

003がドライバ 004がユーティリティです
僕は003を入れてから004を入れましたが、
ユーティリティにドライバも含まれているようです
分けて配布されてるのでとりあえず両方入れましたが

ドライバとユーティリティが入ったらPC側の準備はできました

次はボード側です

以下F4でぃすかばー前提で説明します

まずF4側のジャンパピン2個を外します
USB-miniB側にあるジャンパピンで
片側に白の塗りつぶしの枠でDISCOVER
反対側に白枠でST-LINK
と書いてあるヤツです

コレをジャンパすることによりオンボードST-LinkはSTM32F4と接続されます
なのでこれを外すとST-Link単体として使えます
(STM32F4は給電されっぱなしです

次にSTBeeとでぃすかばーを接続します

でぃすかばーのCN2(6pin)がSWDに使うコネクタです
CN2の白丸側が1pinで
使用するのは2/3/4の3本です

ST-Link側の2pin(SWCLK)をSTBeeの9pin(TCK)
ST-Link側の4pin(SWDIO)をSTBeeの7pin(TMS)
ST-Link側の3pin(GND)をSTBeeの適当なpinに接続(今回は8pin)
GNDはSTBeeのGNDに接続されればいいので、JTAGコネクタの偶数ピンに接続します
ただし2ピンはVDDなので接続してはいけません

この状態でST-Linkと接続されたので
STBeeの電源を投入し、ST-LinkもPCに接続します

ST-Link Utilityを起動し、Connect to the target. (フロッピーアイコンの右のコンセント)をクリックします
正常に接続されれば少しのタイムラグの後にFlashの中身が表示されます
接続できない場合はST-Linkとターゲットの電源を抜いてから接続を確認してください

アドレスは0x08000000固定で 読み込むサイズは可変のようです
DFUを見たければ0x08000000から0x3000Byteです

これでST-Linkを使った読み出しができるようになりました
DFUが破壊されたSTBeeの復旧とかもできそうです