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の処理真似しただけですが〜)
なにはともあれ先達の知恵達に感謝ですね。
-
免責・連絡先は↑のリンクを
↓SNSもやってます↓
powered by まめわざ- ARM/STM32 (116)
- OpenOCD (27)
- ARM/NxP (34)
- ARM/Cypress (5)
- ARM/Others (3)
- ARM/Raspi (1)
- AVR (13)
- FPGA (4)
- GPS/GNSS (19)
- MISC (81)
- STM8 (2)
- Wirelessなアレ (16)
- おきぱ (1)
- ブラウザベンチマーク (28)
- 日本の自然歩道 (26)
- STM32U0はぢめました
⇒ ねむい (08/07) - STM32U0はぢめました
⇒ ひかわ (07/28) - STM32H5を使ってみる3 -待ち受ける初見殺しの罠たち-
⇒ ねむい (05/17) - STM32H5を使ってみる3 -待ち受ける初見殺しの罠たち-
⇒ どじょりん (05/16) - STM32H5を使ってみる3 -待ち受ける初見殺しの罠たち-
⇒ どじょりん (05/16) - いろいろ試す61(と今年の反省会)
⇒ ねむい (01/02) - いろいろ試す61(と今年の反省会)
⇒ ひかわ (01/02) - いろいろ試す61(と今年の反省会)
⇒ ひかわ (01/01) - STM32H5を使ってみる3 -待ち受ける初見殺しの罠たち-
⇒ ねむい (12/31) - STM32H5を使ってみる3 -待ち受ける初見殺しの罠たち-
⇒ ひかわ (12/31)
- November 2024 (1)
- October 2024 (1)
- September 2024 (1)
- August 2024 (1)
- July 2024 (1)
- June 2024 (1)
- May 2024 (1)
- April 2024 (1)
- March 2024 (1)
- February 2024 (2)
- January 2024 (1)
- December 2023 (4)
- November 2023 (2)
- October 2023 (2)
- September 2023 (1)
- August 2023 (2)
- July 2023 (1)
- June 2023 (2)
- May 2023 (3)
- April 2023 (1)
- March 2023 (1)
- February 2023 (1)
- January 2023 (1)
- December 2022 (2)
- November 2022 (1)
- October 2022 (1)
- September 2022 (1)
- August 2022 (1)
- July 2022 (1)
- June 2022 (1)
- May 2022 (1)
- April 2022 (1)
- March 2022 (1)
- February 2022 (1)
- January 2022 (1)
- December 2021 (2)
- November 2021 (2)
- October 2021 (1)
- September 2021 (1)
- August 2021 (1)
- July 2021 (1)
- June 2021 (1)
- May 2021 (1)
- April 2021 (1)
- March 2021 (1)
- February 2021 (1)
- January 2021 (1)
- December 2020 (3)
- November 2020 (1)
- October 2020 (1)
- September 2020 (1)
- August 2020 (1)
- July 2020 (1)
- June 2020 (2)
- May 2020 (1)
- April 2020 (1)
- March 2020 (1)
- February 2020 (1)
- January 2020 (1)
- December 2019 (3)
- November 2019 (1)
- October 2019 (1)
- September 2019 (2)
- August 2019 (1)
- July 2019 (1)
- June 2019 (1)
- May 2019 (1)
- April 2019 (1)
- March 2019 (1)
- February 2019 (1)
- January 2019 (1)
- December 2018 (3)
- November 2018 (2)
- October 2018 (1)
- September 2018 (1)
- August 2018 (1)
- July 2018 (1)
- June 2018 (1)
- May 2018 (1)
- April 2018 (2)
- March 2018 (1)
- February 2018 (1)
- January 2018 (1)
- December 2017 (2)
- November 2017 (2)
- October 2017 (1)
- September 2017 (1)
- August 2017 (1)
- July 2017 (1)
- June 2017 (1)
- May 2017 (1)
- April 2017 (1)
- March 2017 (2)
- February 2017 (2)
- January 2017 (2)
- December 2016 (7)
- November 2016 (2)
- October 2016 (2)
- September 2016 (1)
- August 2016 (1)
- July 2016 (1)
- June 2016 (1)
- May 2016 (2)
- April 2016 (1)
- March 2016 (2)
- February 2016 (1)
- January 2016 (1)
- December 2015 (3)
- November 2015 (1)
- October 2015 (3)
- September 2015 (2)
- August 2015 (2)
- July 2015 (3)
- June 2015 (3)
- May 2015 (4)
- April 2015 (2)
- March 2015 (4)
- February 2015 (1)
- January 2015 (3)
- December 2014 (3)
- November 2014 (2)
- October 2014 (1)
- September 2014 (2)
- August 2014 (2)
- July 2014 (3)
- June 2014 (2)
- May 2014 (1)
- April 2014 (1)
- March 2014 (4)
- February 2014 (4)
- January 2014 (3)
- December 2013 (5)
- November 2013 (4)
- October 2013 (3)
- September 2013 (2)
- August 2013 (2)
- July 2013 (2)
- June 2013 (3)
- May 2013 (2)
- April 2013 (2)
- March 2013 (2)
- February 2013 (2)
- January 2013 (3)
- December 2012 (4)
- November 2012 (2)
- October 2012 (2)
- September 2012 (4)
- August 2012 (1)
- July 2012 (3)
- June 2012 (2)
- May 2012 (3)
- April 2012 (3)
- March 2012 (2)
- February 2012 (3)
- January 2012 (3)
- December 2011 (5)
- November 2011 (3)
- October 2011 (2)
- September 2011 (2)
- August 2011 (2)
- July 2011 (2)
- June 2011 (2)
- May 2011 (2)
- April 2011 (2)
- March 2011 (2)
- February 2011 (2)
- January 2011 (3)
- December 2010 (7)
- November 2010 (1)
- October 2010 (1)
- September 2010 (1)
- August 2010 (3)
- July 2010 (4)
- May 2010 (1)
- April 2010 (2)
- March 2010 (2)
- February 2010 (2)
- January 2010 (3)
- December 2009 (3)
- November 2009 (8)
- October 2009 (7)
- September 2009 (5)
- August 2009 (4)
- July 2009 (6)
- June 2009 (6)
- May 2009 (14)
- January 1970 (1)
Copyright(C) B-Blog project All rights reserved.