« PSoC - PSoCマイコン・スタートアップ | トップページ | HP200LX - 自作シリアルコネクタでMIDI出力 »

STM32 - Primer2 レギュレータ修理

L6928D破損x2によりしばし眠っていたPrimer2ですが、LT1963Aへの換装でなんとか(これでいいのかは別として)リペア出来ました!

Lt1963a33

「PS3とLinux、電子工作も」(Todotaniさん)の「STM32 Primer2 レギュレーター死亡(その後)」や「ねむいさんのブログ」(ネムイさん)の「色々直す…」を参照させて頂きました。

本当に貴重な情報をありがとうございましたm(_ _)m

LT1963A-3.3 をマルツで予備を含めて2個購入。確かにお高いです・・・

Todotaniさんの記事では LT1129 を1個で本体とバックライトをまかなっているそうなので、1.5Aもあるし自分も1個で両方をまかなうことにしました。

まずL6928Dを取り外さなければならないのですが、吸い取り線を使いながらなんとか力づくで剥がしました。この時、本体側の一部のパターンまで剥がしました。ここはもう使わないので・・・

 

Lt1963a_repare

出来上がり。

お二方のように基板に実装出来る自信が無かったのでsweat02、ユニバーサルをカットしてそこにLT1963Aを実装し、各端子へ配線する手法を取りました。

途中、何度かコテや吸い取り線が接触してバチバチしたけど、もうおかまいなし。ほんとはバッテリー外してやりたいのだけど、くっついているので元からでないと取れないよ。

LDOのINにはC56の入り口から配線し、OUTからは本体用とバックライト用の2本を出して、C54とC20へ接続します。誤ってC54ではなくL3に接続してしまったのですが、たぶん大丈夫でしょう・・・ですよね??

 

いよいよ電源投入。。。。

Stm32primer2_rp1

おお、成功!!

最初は画面が真っ白になってしまっていたのですが、起動時の音声は流れているので、やはりバックライトの配線まずっていたかなあ、と思っていたりしたわけですが、2~3度入れ直すと正常に表示されました。

テスターで測ると、バッテリーからは 3.735V、LDOの出力は 3.306V、問題なさそうです。

 

それで、接続テストも兼ねて前回画面が撮れなかったこともあるHelloWorldでテストしようと思ったけど、先にTodotaniさんの記事で「バッテリーの電圧監視にMCUのADCを使っているのですが、リファレンス電圧が2.8Vから3.3Vに上がってしまうため測定値が狂ってしまいます。」とありますので、一応 VDD_VOLTAGE_MV の値を書き直してOSをコンパイルし直しておきました。

んん?元のバイナリとコンパイルしたバイナリのサイズが400k近くも差がある。何故でしょう?この時、リリース用でコンパイルして270kほど。元は620kほどある。

デバッグ用とリリース用の違い?と思って、デバッグ用でコンパイルし直したら、ちょっとサイズは違うもののほぼ同じくらいとなりました。

OS側もデバッグビルドされていたんですね。というわけで、こちらを使用します。

 

さてさてHelloWorldですが、前回のものと同様のものを利用します。

同じだとつまらないので、アプリ名を「Hello!」に設定し、文字列を

DRAW_DisplayString( 0,  0, msg, sizeof(msg)); // X, Y, string, length
DRAW_DisplayString( 8, 11, msg, sizeof(msg)); // X, Y, string, length
DRAW_DisplayString(16, 22, msg, sizeof(msg)); // X, Y, string, length
DRAW_DisplayString(24, 33, msg, sizeof(msg)); // X, Y, string, length

のようにしました。芸はないですが。

Stm32primer2_hw1

コンパイルして転送。

ちゃんと名前が反映されてます。

 

Stm32primer2_hw2

実行画面。どうやらY座標は下(スティック側)からカウントしているようです。

これで無事に動作確認取れました。

 

--

 

これだけでは何なので、ついでにMP3 Playerをほんのちょっと弄ってみましょう。

ソースはPrimerコミュニティに登録されている MP3 Player 1.01 です。

このプレイヤーはMicroSDに保存されているWAVフォーマットとMP3フォーマットのファイルを再生出来ますが、ヘッドフォン経由でしか聴けません。

そこで本体スピーカでも聴けるようにして、ヘッドフォンと切り替えられるボタンも追加してみます。

 

ダウンロードしたファイルを適当な場所に展開。その中にある SRC_3.10_ST_Lib というフォルダに入ります。

MP3_Player.rprj というプロジェクト・ファイルがあるので、ダブルクリックするかRide7から開きます。

まず、

Primer2_Circle.elf
FAT.elf

というバイナリがプロジェクトに登録されているので、それらを一旦削除して今回作成したものと入れ替えます。FAT.elfはそのままでも良いかもしれませんが、念のためRideフォルダ下にある(\lib\ARM\CircleOS)FAT.elfにしておいた方が良いかも。

そして、先に MP3_Player_Lib をビルドしておいて下さい。依存関係とかないのかしら?どうもまとめてビルド出来ないみたいなので、一度やっておく必要があるようです。

 

次にコードですが、以下の3つのファイルを編集します。

Application.c
Display_control.c
Display_control.h

 

Application.c

適当なグローバルの領域で、

bool fSpeaker = true; // Speaker ON/OFF

を追加。
Application_Handler() 内の switch (Get_Touch()) 下で、

    case Speaker: // Speaker ON/OFF
        fSpeaker = !fSpeaker;
        if (fSpeaker)
            AUDIO_SPEAKER_OnOff(ON);
        else
            AUDIO_SPEAKER_OnOff(OFF);
        break;

を追加。

Display_control.c

先頭の方にあるボタン用のヘッダーファイルを定義しているエリアの最後で、

static const u16 ButtonSpeaker [] = {
    #include "bmp\Player Speaker.h"
};

を追加。これについては後述。
ButInfo[] の最後に、

{(u16 *)&ButtonSpeaker, pic_col_3, pic_row_2},

を追加。これも後述。

Display_control.h

etouch_pressedの最後に Speaker を追加(enum)。

以上が追加点です。

 

AUDIO_SPEAKER_OnOff() という組み込み関数がカナメなのです。これにONかOFFを引数で指定してやれば内蔵スピーカを切り替えられます。

ただ、ヘッドフォンをオフにすることは出来ない?ようなので、スピーカをオンにすると両方から音声が出力されます。

 

ButtonSpeaker[] 内のIncludeについては、Cヘッダー用に変換されたボタン用のビットマップ・データを指定します。

bmpフォルダに image2primer.exe というビットマップをCヘッダー形式に変換するプログラムが同梱されているので、これにボタン用のイメージを読み込み、変換して出来たヘッダーファイルを指定することになります。

今回作ったボタン・イメージを置いておきます。

 Player_speaker (右クリックで保存して下さい)

作ったといっても、CircleOSに梱包されている LS.bmp に背景をレイヤで作って合わせただけなんですけどねcoldsweats01

 

ButInfo[]については、前述の定義名に次いで、表示する座標を指定しています。

Display_control.h で定義されてますので、好みの位置で指定してやって下さい。

 

これで終了。ビルドして転送します。

 

Stm32primer2_mp3b

こんな感じになりました。

左下のスピーカの絵のボタンが新しく追加した切り替え用ボタンで、押すたびにスピーカのオン/オフをトグルします。

スピーカ時だと最上段の右3つのアイコンがスピーカに、そしてヘッドフォン時だと3つのアイコンがヘッドフォンのアイコンに自動で切り替わるので分かりやすいです。

さすがに音質は落ちるしモノラルですが、すぐに試聴出来るのは良いことです。

それから、時々再生中におかしくなることがありますが、elfファイルを入れ替えたからなのか改造のせいなのかバグなのかは不明です。

 

オーディオ関係のドキュメント見ていて、I2Sというプロトコルを始めて知りました・・・今では割と標準的なんだ。日本語で詳しく柔らかく解説しているところないでしょうかね??

で、今のところ電源入れっぱなしでUSBを何度も差し替えたりしているけど、全く問題無さそうです。唯一、OS起動時にたま~に表示が真っ白になることがあるくらいで、これは入れ直せば大丈夫だし無問題かと。

というわけで、無事生還できて良かったです。改めてネムイさん・Todotaniさんお二方のおかげです。ありがとうござましたm(_ _)m

取り敢えずしばらくこれで様子を見てみようと思います。

|

« PSoC - PSoCマイコン・スタートアップ | トップページ | HP200LX - 自作シリアルコネクタでMIDI出力 »

電子工作」カテゴリの記事

コメント

はじめまして、todotaniです。

V1.2でもあえなくお亡くなりになったのですね、、
私の方はV1.2を追加購入しまして、(念のために)USBケーブルの挿抜を電源Offで行えば、電源周りのトラブルはなくなると思っていたのですがショックな結果です。拡張コネクタの1, 2番ピンとか位置が近いので触るときは要注意ですね。

電源の問題はありますが、STM32 MCUとPrimer2はいじり甲斐があるヤツだと思いますので、元が取れるまで(私は2台分だ)いじり倒しましょう!

投稿: todotani | 2010-02-06 20:46

はじめまして、todotaniさん(^-^)
何度かブログにお邪魔しようかと思っていたのですが、低レベルな質問するのも恐れ多くてなかなか出来ずにいました(^^;
ご本人さんから直々にいらして頂きありがとうございます!

>V1.2でもあえなくお亡くなりになったのですね、、

はい、ささいなことだったのですが、そのささいでダメになってしまうなんて・・・今後のリビジョンでもこのレギュレータ使っている以上は神経使わざるを得ないでしょうね。
個人的には多少価格が上がっても安定して使えるようになれば良いと思ってます。

今CircleOSをベースに波形生成してAUDIO再生に挑戦したり、MIDI接続させようとUART通信について勉強しているところです。
STM32自体について知らないと使いこなすのは難しそうですね(^^;
なんとか初心者レベルでも遊べるようにしていきたいと思いますので、今後とも宜しくお願い致しますm(_ _)m
僭越ながらリンク張らせて頂きます!

投稿: SatE-O | 2010-02-07 00:36

リンクありがとうございました。私のほうも、リンクを張りました。

>個人的には多少価格が上がっても安定して使えるようになれば良いと思ってます。

そうですね。Primer2はMCU以外もST Microの部品一色で染めることにこだわっているような気がします。他社も含めて部品選定すればよりよい製品になるのにと思いました。

投稿: todotani | 2010-02-07 08:53

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/204580/47336402

この記事へのトラックバック一覧です: STM32 - Primer2 レギュレータ修理:

« PSoC - PSoCマイコン・スタートアップ | トップページ | HP200LX - 自作シリアルコネクタでMIDI出力 »