LPC2388からFMラジオモジュールを動かす

うー
待ちきれないからお姉ちゃん先に作っちゃったよ
やっぱユニバーサルでも基板にちゃんと組むと見栄えがしますね〜。


ということで今度はスイッチサイエンスさんとこで購入したFMラジオモジュール
を試してみたいと思います(SPARKFUNのFMモジュールspk-fm-301と同じです)。

触ってみた人なら分かると思いますが、このモジュールにあるAR1010ていう
ICがかなり癖のあるデバイスでデータシート/アプリケーションノートの説明が
非常に不親切です…ていうか一番重要なレジスタマップ等の情報をデータシート上から
抹消して提供してやがっててなんというかとても中国くおりてぃーだと思いました。

今回の検証に先立ち、ゆきの研究室さんのレポート,マイコン工作実験日記さんの
使用記
を参考にさせていただきました。
とても助かりました。…というか作例ないと無理ですわコレ



冒頭に写真乗っけちゃったけど今回はLPC2388(CQ-FRK-NXPARM)上でi2c液晶と組み合わ
せてi2cデバイスとして動かしてみます。i2c液晶のときと同じくAVRで予習済みなので、
AR1010用のハイレベルアクセス層はすでに作ってあります(はしょるはしょる)。
後は"下駄"に当たるLPC2388でi2cデバイスを制御するローレベルアクセス層を
作れば即終了(のはず)です。
うー
ありゃりゃ…ETHERNET-PHYの制御でi2cポート0はふさがっちゃってるようですね…。
将来ETHERNET-PHYは確実に使うからここを使うわけには行きません…。
仕方ないので他のあいてるi2cポーt…
うー

おいおいポート1,2ってオープンドレインじゃないのかよ!
ってわけで今回もお手軽かつ汎用性が高いソフトウエアi2cマスタでいきたいと
思います!!!内蔵i2cレジスタ叩くのが面倒って理由じゃないよ!!
(どうせ内蔵で叩いても私がやるとポーリング入りまくるし…)。

ARMに限らずソースコードはできる限りトリッキーなことはしないでねむいさんの
つるつる脳みそでも分かりやすいようにモジュール化して汎用性を高めるように
心がけてます…。たとえ速度が犠牲になったとしても…。


うー
…そんなこんなでLPC2388基板上でもi2c液晶とFMラジオが動きました。私は新潟精密
のFMモジュールは知らないので比較できませんが、音質は市販のFMラジオと遜色ない
十分実用に足るレベルだと思います。
なお、受信感度を取得できるレジスタとかもAR1010にはありますが、i2cで読みに行
くたびにポツポツノイズが入るので受信感度表示は現状では行ってません。
今回のおソース&配線図はこちらに
(バグ見っけたのでメニューの置場から新しいの落としてください)
ご利用は自己責任で…





おまけ
前回のOLEDの動作もベースボード上でもう一度やってみる。
うー
みやはらみみかきさんが描かれた私の(ねむいさんの)線画を私が勝手に塗って仕上げ
させてもらったのを映してみましたが、ぶろぐを見にきたびぃぶろ君が欲情すると
困るのでものすごく小さく乗っけときます…
・・・画像押すなよ?絶対に押すなよ!?(ダチョウ倶楽部風に)


・・・
・・・ふ〜〜・・・さぁてつぎはAT91SAMでもやりましょかね・・・

ペ プ し そ

うー
・・・これなぁ…
コツメちゃんが一日野原駆け廻ってきた後の匂いと同じ味がするわ…
キワモノ系はペプシブルーが一番ましかなと思うねむいさんでした。



いかん、日記がここで終わってしまうところだった。最初の画像右下にも少し見えて
ますが、少し前にまとめて買ったいくつかの玩具のうちの一つ、Sparkfunで販売している
OLEDモジュールに手をつけてみました。


OLEDモジュールはLPC2388基板で制御するわけですがプログラムはchanさんの
作例をそのまま使用します…。まぁいつもの追実験なわけですけど、とにかく動かす。
まず動かしてから理解するが私の学習方法ですから・・・。でもこれで動かせ
られなかったらア●みたいだ私。

キャリアボード上のジャンパ設定は以下写真のように。
うー
ボード上のDCDCが3.3Vサポートなので+5Vは不要です。


うー
とりあえず映りました。いなちゃんはどのプラットフォームでも美しいな…♥
話には聞いてましたが実際に動かしてみるとOLEDすごいですね〜。
発色や明るさはもちろんのこと視野角が素晴らしいです。


うー
今回の実験のために行ったやっけつ配線…バスが高速で動いてるからヤバいかな私。
・・・と思ったけど全然大丈夫だったりしました。もちろんちゃんとユニバーサル基板に
コネクタつけて配線し直します。明日はi2c液晶とFMモジュール控えてるし!!

さりげなく映ってるえろすないないさんの絵は虹裏に投下しました・・・。
※びぃぶろぐはえろす禁止ですが多分これ位なら無害です


2電源レベルシフタICを使う

ARMやロジックデバイスの記事(つうか今までほとんどそればっかだ)を書くときは
JTAGKey(の互換回路)のことに触れる機会がとても多くあるのですが、そのたんびに
かみきさんの作例を引用させてもらうのは非常に忍びないので自分でもJTAGkey
互換の回路図起こしました。私が実際にARMやFPGAの書き込み・デバッグの際に
使用しているものです。

以前にも触れたとおり、ほぼかみき氏の物と同じですがなるべくJTAGkeyに似せる
べくEEPROMを外付けにしてVID,PIDを書き換えられるようにしてます。
(これやっとくとOpenOCD使うときいちいちcfg書き換えなくてすむし)
FTDIのドライバEEPROMの設定一式は"おきば"にありますので真似して作られる奇特
な人はそちらも参照のこと。
回路図は配線ミスがないか私のほうで念入りにチェックしてますが、それでも
見落としがあるかもしれません。ご利用の際は自己責任でお願いします。


…やばい、前置きがえらくまともになってしまった…もう疲れてきたよパトラッシュ…
でも後もうチョットだからね待ってていないさん…(パタ)
何で長々とJTAGkey互換回路の話ししたかというと、この回路中に信号レベルを変換
できる2電源レベルシフタIC(と5Vトレラントな1,2ゲートロジック)が使われているからで、
これが間に挟まってると1.65V〜5Vの信号までなら異なる信号レベルの問題も
気にすることなく書き込み・デバッグできるからなのです。
で、実際にこれはどの程度使えるものなのかということを検証していきたいと思います。









今回のお題:
上記2電源レベルシフタICを利用したI/Fを用いて、低電圧駆動時のAVRマイコンに
安全かつ確実に書き込みができるかどうかの検証。


実験装備:
1.今回の実験のために特別な回路特別に動く「USBaspx改改」を実験用AVRライタの
  ハードウエアとしてこしらえる。V-USBのバージョンアップに合わせて地味に更新中。
2.PC側の制御ソフトはavrspxのVID,PIDの記述を最新のものに
  書き換えてリコンパイルした物を使用。

3.テスト用マイコンとしてATTINY2313(rev.C)を使用。試験回路はこちら
  万が一の事態に備えて19.2MHzのクリスタルを装着&使用できる状態にしている。

4.ATTINY2313のヒューズ設定は出荷時のまま。プログラムはIOパタパタさせるだけの
  プログラムに、無駄にprintfライブラリのリンクをさせて2kバイトギリギリの容量に調整。


実験内容:
 3.の実験用回路に1.のAVRライタを接続し、ライタ側のdelay設定は「-d5」にした
状態にて各電圧ごとに「書き込み」&「ベリファイ」を10回試行し、すべて正常に行えるか
どうかを確認する。
また各試験電圧時のTCKの波形を2電源レベルシフタICの入力・出力について記録しておく。



結果:1CH:レベルシフタ入力 CH2:レベルシフタ出力(測定したのだいぶ前です)


まず3.3Vから。ぜんぜん余裕です。


次に2.5V。まったく問題なし。


目標の1.8V。ぜんぜん余裕でした。波形もきれい。
ちなみに備え付けのクリスタルの駆動(19.2MHzの高速)に切り替えても1.8Vの電源電圧
で正常に書き込み・ベリファイできてます。

まとめ:
●やっぱ専用のレベルシフタはすごいね〜。
●今は通販で容易に手に入るので物怖じせずにどんどん使っていこう。











EX:
このまま1.8Vよりも電源電圧を下げてくとどうなるのか?

注:危険ですから絶対にまねしないでください!!!!!!
  メーカーが保障してない電圧範囲でAVRマイコンの書き込み動作をすると、
  以後デバイスが使用できなくなる可能性があります!!!
特にチップリビジョンがB以前のATTINY2313はRSTDISBLを0にしたりSPIENを1に
  したりするとパラレルライタでも回復不可能になります!!!!
  リビジョンC以降はダイジョブです



結果:


1.6V。まったく余裕ですな。
しかし19.2MHzのクリスタル動作だとここでダウン。以後は内蔵RC発振で。


1.4V。異常なし。ど根性AVR。がんばれ!がんばれ!


1.2V。何!?まだいけるというのか!?


1.1V。あ、とうとうベリファイエラーでた。でも今までよくがんばった。すごいぞAVR。


1.0V。もはや同期すらできない(-d20とかでもだめ)。内部基準電圧が1.1V(typ)だから
物としてもここが限界でしょう。2電源レベルシフタICの出力波形もかなりなまってます。
しかしこの電圧でもちゃんとレベル変換の仕事はしている。



まとめ:
●がんばったら乾電池一個で動くかもしれないATTINY2313。
●レベルシフタは速度さえ気にしなければ1Vでも動く。


それでは実践行ってみましょうか

LPC2388上のFreeRTOSにUSB-CDC乗っけてみる(だけ)

いつもは最初の段落で本題どころか電気電子とは全っっったく関係ない
話をして検索で飛んできた人の見る気をゴリゴリに削いでいる私ですが
今日は違います。たまには頭っから真面目に工作ものの紹介しますよぅ!
↓デビューしてまだ一月も経ってないのに即レ●プされるi2c液晶の図


…ふ〜〜〜…最近全然会ってないけど赤ロリさん元気してるかな…







さて本題、FreeRTOSがLPC2388上でも動作したと以前の日記でふれましたが、
他の方はLANと組み合わせた作例を試されているので、私はUSBデバイスでやってみます。
丁度LPC2388のUSB-CDCを試してたところなのでこいつを組み込ませて動作するか
どうか試しました。

実装の際に懸念されるのは、割り込み周りの処理に関する部分でした。まず、
ビルドを通すために割り込みの処理の部分の記述をFreeRTOSの流儀に変え、サンプル
にあるLANのプログラムを頼りにOSレベルで必要な処理も見よう見まねで加えました。
また、基板もCP2102とLP2388のUSB-CDCが同時に使用できるように改造同時挿しも
可能なように
してあります。

結果は…ちゃんと動きました。USBの割り込みの動作も問題なかったようです。
まだ文字列吐かすだけの単純なのですけどね。

USB-CDCを組み込んだFreeRTOSのLPC2388版のソースはこちら
試される場合は自己責任で…。
zipファイルにも注意書きがありますが、このソース単体ではビルドはできません。
別途FREERTOSのアーカイブを入手する必要があります。


調子に乗ってchanさんのSDカードのアクセスプログラムでもUARTをUSB-CDCに置き換えて
試してみましたがこっちは残念ながらNG。どうやらシリアルとOLEDの出力関数を切り替え
る部分?であっちの世界に逝っちゃってるぽいですが、現段階では調査中です。

USB-CDC版でもちゃんと動きました。

LPC2388のCDC(仮想COMポート)を使う

1週間前、臨時収入が入りましたので今まで購入したいと思っていた電子部品
や評価基板をいくつか注文しちゃいました。夏物の服は「茄子」が入って
バーゲンになって値段下がってからでいいや。それまでに売れてくれるなよ…!
…そのまえに今年茄子あるかな…。






少し前にLPC2388にあるUSBホストのサンプルの追実験をしましたが、USBターゲット
を含めたサンプルコード集もNXPのサイトで提供されてます。コード集にはUSB-CDC
(仮想COMポート)の作例もあってRTCやUARTは簡単にできたので次はこいつを
ポーティングしてやろうと画策しました。

…しかし、これのUSB-CDCのは割り込みや構造体の定義がGCCとの互換性が
全くと言っていいほど無くてコードをポーティングするのが一苦労。しかもコンパイル
無理やり通してバイナリ焼き込んでも案の定動作できねぇ!!1!
XPでUSBデバイスを認識したときのあの「♪テコン」が鳴ってくれない…
結局2〜3日格闘して私のぎじゅつ力じゃこれ以上は無理と白旗上げてしまいました。
(ネットの記事漁るとちゃんと出来てる人もいるみたいです…くやしい…でも…)


なんかよい情報はないものかと海外のLPC2000のフォーラム等をいろいろあたると
GCCでソースが公開されているLPCUSBなる物があることを知り、これを叩き台にして
LPC2388向けのUSB-CDCデバイスをこしらえることに。
もともとはLPC2143用だったみたいですが、数年前にLPC2378向けにも使えるようにアップ
デートされていて、大きな変更もなくLPC2388基板で無事「♪テコン」を聞くことができました。

その後はSTM32とおんなじようにprintf使えるようにリターゲットして、以前のRTCの
サンプルのCDC版が動くとこまで確認。
懸念してたUSBの動作と他の複数の割り込みの動作の干渉も特に問題ないみたいです。

とりあえずLPC2388上で"動く"とこまで持ってけましたが、"どのようにしてUSBデバイス
として動いてるか"の理解ができないとこっから先はやってけないと感じてます。
点と線だけで繋いでいた知識のリンクを面で囲っていけるようにしたいです。
私のおべんきょはさらにつづく…。


というわけで本日のおソース。試される場合は自己責任で…。
TFT−LCD表示プログラムのUART処理部に統合しました。
ねむいさん向けにかなりいじくり倒してるので、本格的にされる方は本家の
ソース当たった方がいいと思います。

VCP(仮想COMポート)経由で標準関数使ってみる

今週の成果…塗り2枚、コラ2つ…まずまずかしら…
それとかなり目立ってきたけどRP中の寝堕ちだけはなんとかしなきゃいかんです。
スレのホストが告知せずに堕ちるってのは参加してくれた人たちにすごく失礼なこと
ですから…とにかく反省…。






話変わって本題…少し前にがた老氏がSTM32(CQ-STARM基板)にてダブル
バッファを用いたCDCのファームを公開されてましたので、私も試してみました。
氏のソースはV1.0のファームウエアライブラリを用いたものでしたが、私の
V3.0.xの環境に移植しても全く問題なく動いてます。
特に仮想COM経由の一文字入出力の関数が使いやすかったので、printf関数等
標準関数のリターゲットも容易に出来ました



と言うわけでそれを組み込んだ今回のソースはこちらに。※ほしい人はメールください。
UARTにリターゲットしてた時となるたけ似せるようにしてますが、COMポートを
開いたときの挙動が先にキーボードを打つ必要がある等少し違います。

他は、RTCの割り込み中の処理で、Vccが落ちてVbatのパワードメインだけで
動いている場合、2〜3日置いてVccを復活させると76時xx分xx秒とか
なってしまうおまぬけなバグを修正してます。
(修正と言ってもSTM32PrimerのRTCの処理真似しただけですが〜)
なにはともあれ先達の知恵達に感謝ですね。

Go to top of page