2015年10月22日木曜日

STM32F1の旧ライブラリでI2C通信

STM32F1の旧ライブラリ(StdPeriph_Driver)でI2C通信を行うための関数を作りなおした。

宣言
int I2CTR(I2C_TypeDef* I2Cx, uint8_t Addr, uint8_t*Buff, uint8_t TxLen, uint8_t RxLen)

I2Cx
通信に使用するポート

Addr
デバイスアドレスを使用する 7bit形式ではなく8bit形式で渡す

Buff
送受信のバッファを渡す

TxLen
送信データ数を渡す

RxLen
受信データ数を渡す

この関数では送信バッファと受信バッファを兼用している。そのためレジスタアドレスを指定する引数は取らない。レジスタアドレスを指定したい場合はBuff[0]にアドレスを指定し、TxLenを1にする。ROMのようなレジスタアドレスが複数バイトになる場合はBuffに必要なバイト数を設定し、TxLenにその長さを渡す。
送信だけで、受信する必要が無い場合はRxLenを0にすればいい。RxLenが0の場合は送信が終了した段階でStopを発行し関数を終了する。
手持ちのデバイスの中には「レジスタアドレスを指定せずに読みだす」という物がないため、TxLen==0の場合の動作確認はしていない。だけどたぶん失敗すると思う。

const int timeoutは無限ループに入らないようにしている。ただ0x7FFFFFFFでは明らかに長過ぎるから、もっと短い値に変更しないと意味が無い。例を挙げると72MHzで0xFFFFを指定すると67msecほどでタイムアウトする。大雑把な目安としてだいたい1マイクロ秒くらいの分解能になる。例えば10000を指定すると10msecくらいでタイムアウトするので、5000とか10000くらいがいいと思う。
タイムアウトは1回のループ毎に変数をtimeoutで初期化し、whileで比較、デクリメントを行っているだけ。そのためマイコンの動作クロックが変わると待ち時間も変化する。

2015年10月20日火曜日

ISSを撮ってきた

VIXENのA80Mfという鏡筒にK-5をつけてISS(国際宇宙ステーション)を撮ってみました。天体望遠鏡の焦点距離でもものすごいトリミングしないと点にしか見えませんが。それにしても500kmも離れた物体を形がわかるレベルに撮影できるとは驚き。




撮影に使用したのはVIXENのA80Mfという鏡筒と経緯台と三脚のセットです。値段は4万円台前半でありながら、ガッチリした三脚と微動雲台、それに910mmの単焦点レンズが付属します(もちろん接眼レンズ等の周辺機材も)。コスパがヤバイです。カメラ用でこのクラスの三脚や雲台を探したらそれぞれにA80Mfと同じくらい掛かりそうな気がします。レンズに至っては桁が違うんじゃないかと。もっともA80Mfは単純な光学系ですから、色収差はかなりあります。でもこの値段なら気にならないですよね!

今回は直上通過直後に地球の影に入るという素晴らしいタイミングのパスに恵まれ、望遠鏡を使うのは2回目ですがかなり綺麗に撮ることができました。ISSはバカみたいにデカく、簡単に撮影することができます。みんなもガンガン撮ればいいと思うよ!

2015年10月6日火曜日

AMトランスミッタを作ってみた

STM32F103VE(STBee)でAMトランスミッタを作ってみました。
市販品はFMトランスミッタですが、FMラジオの周波数帯をマイコンで扱うのは辛い、FM変調を作るのは更に辛い、等の理由によりAMとしました。もっとも、変調はAMですが周波数帯は中波ではなく長波なので、市販のAMラジオでは聞けないと思います。今回はIC-R6を使って動作確認をしました。



画面右下にあるのが受信に使用したIC-R6で、音声出力がカメラの音声入力に入っています。画面中央部にあるプローブが刺さったボードがSTBeeで、これがマイク入力とRF出力を行っています。マイクは基盤右上の黒い丸の部分です。基盤左下から右上に向かっている赤い線が空中線代わりのジャンパワイヤです。送信出力が非常に低いため、この距離でもスケルチがぎりぎり開く程度で、撮影の時はIC-R6のアンテナとトランスミッタのアンテナを接触させています(被覆で絶縁されてますが)。

(こういうブロック図を簡単に作る方法って何かないかな)

今回は100kHz(0.100MHz)のAM波を送信するため、正位相・逆位相を出力するために2本のDACを使用しました。これはTIM3のタイミングでDMA転送し、DMAのHTとTCで割り込みを発生させ、その割り込みでマイクのバッファに入っているアナログデータを生成します。
図中ではTIM3から割り込みが発生してる風ですが、実際にはDMAから発生させています。


音質もラジオで衰退してる割には近距離であれば問題無いですし、電波で遊びたいという欲求はかなり解消できたかな、と思っています。100kHzではアンテナの利得は無いも同然で、送受信共に感度が低いので長距離通信はおろか、1mも離したらスケルチが閉じっぱなしになってしまいますが。
現行法に対応した形で簡単に無線で遊ぶのはコレが限界かな、とも思います(コレも厳密にはどうかわかりませんが)。