電子工作 PIC

2015/05/16

時計9

2年ぶりの改修だ。会社で重宝して使っている時計。USBで時刻をセットする機能を有しているが、それは使っていない。単に普通のデジタル時計として使っている。使っているクロックモジュールが当たりだったのか、すこぶる高精度だ。1ヶ月で10秒とは狂わない。10のマイナス7乗近い精度である。

色々と要望があって、段々本来の使い方と変わっているが、要望に答えて継ぎ足し継ぎ足しの改修を繰り返した。ラーメンタイマー(カウントダウンタイマー)も追加した。

今回の改修はチャイム機能の追加だ。毎日定刻に音をだす機能だ。始業開始の8時40分と終業時の17時10分にチャイムがほしい、と。以前のオフィスはチャイムがあったと思うが、今回はない。
チャイムといえば、「ウエストミンスターの鐘」であるが、どうやって作るか?PICでやろうと考えるが、結構めんどくさそう。そこで、出来合いのメロディーICがないかを探すが、簡単には見つからない。やっと見つかったのが、これTQ-LEK36。aitendoで見つかった。36曲ものメロディーが入っている。

実際に動かしてみると、選曲はキーを順に押して行かないといけない。それと、順方向にしか行かない。リセットするすべがない。起動はhighのエッジで1回のみ起動する。連続するためには、曲がOFFしてから再度highエッジを作らないといけない。以前使ったICはレベルで動くので、highにしておけば、その間は再生してくれた。
曲のリセットは電源を切ることで実現できることがわかった。IC内部のPowerONリセットに期待するのだ。

あと、ラーメンタイマーの時間に4分を追加した。カップラーメンによって3分、4分、5分待つ物があるようだ。これも、ユーザー?の要望に答えたものだ。

回路図を残しておかないとわからなくなるので、メモを書いた。
Dscf0267
ツェナーDiは4.7Vを使っているが、これでメロディーICの電源電圧は3.0Vぐらいになる。ツェナーに流す電流が少ないと電圧が低くなる。回路図の間違いではない。

Dscf0257

Dscf0258

Dscf0264

Dscf0265

Dscf0262

実は、コンパイルに苦労した。以前作った物を、再度コンパイルしてもうまくいかない。以前の時から、MikroCのバージョンを上げている。バージョンアップといっても、再インストールで環境が引き継がれない。どうも、後から追加したUSBのCDCが入っていないのが原因。

コンパイルがやっと通るようになったが、そのバイナリーを焼いても、動作がおかしい。不安定だ。ASMやHEXファイルのコンペアまでやったが、よくわからない。色々やって気づいたのがconfigの設定値だ。どうした訳か、この設定値が変わってしまっている。Projectの設定を変えてやっと元に戻った。
結構、苦労した。久しぶりに使うとこれだ。

ソースファイル、HEXファイルを含むMikroCのProjectファイル一式をあげておく。
「20150515_.zip」をダウンロード

過去の記事はここ。

| | コメント (0) | トラックバック (0)

2014/03/03

I2C制御DSPラジオ(BK1088) 12(取り敢えず、完成)

取り敢えず、完成。

I2c_radio
LCDの化粧板をプリンターで出力し、LCD窓をカッターで切り取る。スイッチやロータリーエンコーダーの文字は透明のシート(のり付き)もプリンターで印刷する。このブルーだと、透けて地のアルミが見えてくるので、色が沈んでしまう。黒とかの方が隠蔽がうまくいくようだ。

Dscf0421
デザインの象徴的なのがこのバーアンテナ。中波と短波(?)に用いる。アルミケースの影響を受けないように、アクリル板で持ち上げたが、こんなに離さなくても良いかもしれない。もちろん、市販のバーアンテナでも構わない。2球スパーラジオで自作したものと、同じ手法で作っている。外形は10mm。内径8mmでシオヤ無線で売っていたフェライトコアを入れて350uH程を得ている。もっとも、このDSPチップは共振させていないのか、インダクタンスはラフで構わないようだ。この辺りの理屈がよくわからない。短波もこのバーアンテナを使うのであろうか???。外部アンテナ接続用として、リンクコイルが巻いてある。これをRCAコネクターに出してある。(奥のコネクター)
手前のRCAコネクターはFM用のアンテナ端子だ。FMはシールドが効いて、アンテナを着けないと全く受信できない。

サイドの大きな丸穴はスピーカーの穴だ。左右にあり一応ステレオになっている。ヒメロン(これは、商品名らしい)でもあれば貼るのだが、適当な布が無いので穴が開いたままになってしまった。

Dscf0419
音量のLCD表示のプログラムを最後に追加した。ちょっとスマートではないが、一応表示されるようになった。それまでは、デバックのためレジスター05の内容を表示するようにしてあった。こうすることで、色んなことがわかって助かった。

Dscf0417
別の角度からもう一枚。

Dscf0401
シールドケースに組み込む前のカット。基板のグランドも銅テープで強化している。効果の程は??、確認していないのでよくわからない。効いているかもしれない。

Dscf0404
トロイダルコアはEMI対策用のものだ。コモンモードの対策で信号線とアース線を一緒に巻き込んでいる。
I2C、スピーカー、電源にそれぞれ1個づつ使っている。中波帯からすると、もっと巻き込んだ方が良いかもしれない。多分インダクタンスが不足していると思う。また、このコアの効果も確認していないので、効いているかは定かではない。気休めかもしれない。カブリがひどい時にこの辺りがいじれるように、予めコアを入れておいた。幸い、シールドが効いたのか、コアが効いたのか、カブリが問題ないレベルに低減されているのでこのままにしようと思う。

Dscf0406

Dscf0409

Dscf0410

Dscf0411

Dscf0413
セラミックコンデンサーがバーアンテナ間にパラに入っている(緑ぽい色)。これは、モジュールについていたチップコンデンサーが、端子を半田付けした時に取れてなくなってしまったので、外付けで対応した。表面張力?でチップコンが飲み込まれてどっかに行ってしまった。これも小さい。aitendoの資料によるとこれは15pF。

Dscf0414

Dscf0423
ケースを開けたところ。写真下のフロントパネルとの接続線は結構長くなってしまった。

Dscf0439
モジュールとバーアンテナ、RCAコネクターあたりの様子だ。RCAはむき出しだから、ノイズが入り込む余地が残っているが、今のところスペースの関係でこのままだ。

Dscf0440
CPUのPIC18F26K22が見える。結構窮屈な実装になってしまった。6pinのコネクタはPICKit3との接続用だ。

Dscf0442
写真左上にスピーカーがある。これは、携帯電話機から取り外したジャンク品だ。アクリルパイプで前室を作っている。それなりに、音量を得ることができている。LM386でも付ければさらに音量が得られるであろうが、電源の問題とDSPワンチップにこだわって内蔵のAmpのみで使っている。
ミニコンポに使われている高効率のスピカーと使うと、部屋で聴くには十分な音量が得られる。音も非常に良い。

Dscf0443
かなりアクロバチックな実装になってしまった。結果的にフロントケースとベース側を組み合わせるとクリアランスが殆ど無い。

Dscf0444
充電回路だが、絶縁テープが貼ってある。これもフロントケース側の基板とのクリアランスが充分でないために、安全を見て貼っている。

以下のサイトのソースコードを参考に成せていただいた。貴重な情報を提供いただき感謝、感謝です。

【参考にしたサイト】
http://crystal-radio.blogzine.jp/blog/2013/01/aitendodspic_be.html
http://elm-chan.org/docs/tec/te04.html
http://sky.geocities.jp/home_iwamoto/P16F145x/P16_L02a.htm

【開発環境】
Mikro C PRO v5.8.0

【回路図】
Dsp_radio20140215
ポートに余裕があるので、贅沢に使っています。以前のものとは、ポートが若干異なっています。

【プログラム】
プロジェクトファイルとHEXファイルを公開します。プログラムは得意ではないので、冗長なところ、おかしなところがあるかもしれませんが、一応動いたものをおいています。

プログラムソース・HEX一式
「20140303.zip」をダウンロード

【課題】
スピーカから「ピー」という高い音が出ています。スピーカではほぼ問題ありませんが、イヤフォンで聴くと気になります。(若い人はもっと気になるかもしれません!)
音量に関係なく出ます。ブレッドボードの時から変化がありません、どちらも出ます。今のところ、追求していないので、よくわかりません。

(2014.3.7 追記)===============================
ブログのまとめページをつくりました。
こちらから


| | コメント (2) | トラックバック (0)

2014/02/09

I2C制御DSPラジオ(BK1088) 11

ミーハーだから、世間で騒いでいると参加してみたくなる。FT5ZMとQSOした。今のところ、14Mと28MのCWのみだ。SSBもやりたいと思うが、参加するのが遅すぎる。12日までとのことなので、あまり時間がない。
こんなことを、やっているから、工作のほうが進まない。

Dscf0399
DSPラジオの本体部分だ。CPUからノイズを受けていたので、シールドケースに入れることにした。本当はノイズ源であるCPUなど制御系をシールドすべきだが、LCDなどシールドしにくいものがあったので、仕方なくラジオ側を囲った。CPUからバーアンテナにカブると効果がない。
CPUとの接続には、コモンモードフィルターが入れてある。直流的には、アース側はつながっているので、これでも効果がある場合と、そうでないこともある。

Dscf0402
シールド板は秋月で売っていた、0.3mm厚の両面基板だ。切りやすく、腰があるので、銅板より使いやすい。
ただし、表と裏面が導通がないので、そのことを理解しておかないといけない。浮いているのが良い場合もあるだろうし、逆のパターンもある。この辺りは、実際のノイズ対策で確認してみる。

Dscf0404

Dscf0406
こんな感じで、実装しようと思う。


| | コメント (0) | トラックバック (0)

2014/02/02

I2C制御DSPラジオ(BK1088) 10

あまり進捗がないが記録しておく。板金加工はほぼ終わった。一部配線に入った。
電源をどのようにしようか思案していたが、ジャンクボックを見ていたら、この間、秋月で購入したNi-MHのモジュールがあったので2次電池を入れることにした。乾電池も100均で安く手に入るので、こちらでも良いと思っていたのだが。

例によって、フローティングのいい加減?充電回路を確認する。
Dscf0394

LM317を使って、充電終止電圧を設定する。安全を見て4.00Vとした。ちょっと、控えめな電圧である。満充電には至らないかもしれないが、そこそこは充電できるはずだ。充電電流を制限する回路は、入っていない。ショットキーダイオードも電流が増えればいく分かは、Vfが上がるが完全ではない。この辺りが、いい加減充電器の所以だ。
(電池の状態にもよるが)充電電流は150mA程度~数10mAぐらい+セットの電流50mAぐらいである。

さて、今日はここまで組み上がった。アダプターから電池までの結線だ。ショートすると危ないので、電池のプラス側は最後に接続する。
Dscf0395

回路的には、こんな感じだ。実機に組み込んだICは、フルモールドタイプ(JRC製)のNJM317を使った。
Dscf0398

板金加工の最後はスピーカーの取り付けだ。携帯電話機(5年ほど前のタイプ)から取り外したものだ。前室をうまくすれば、それなりに音量が得られるが、決して褒められた音ではないが、ラジオ単体でも音が出れば、それなりに役に立つと思う。前室はアクリルパイプを切断して作った。細かい調整はしていない。
Dscf0397

| | コメント (0) | トラックバック (0)

2014/01/26

I2C制御DSPラジオ(BK1088) 9

土曜日はカミさんの実家の大工仕事。暮れに引き続き大工仕事を楽しんだ。インパクトドライバーとスライド丸のこでバシバシと仕上げていく。比較的暖かかったので助かった。物置のヒサシが傷んでいたので、バラして作りなおした。

ということで、DSPラジオの板金工作も進まない。おまけに、今日は掃除機が壊れた。ACコードが劣化して被覆一部が剥がれて、ショート。まず分解するのに手こずった。次にコード巻き込みのバネが飛び出てしまった。やばそうなので注意していたにもかかわらず、巻きバネが飛び出す始末。格闘したが、諦めてコードの巻き込み機能なしで我慢した。多分、ジグがないとうまく収まらないのだろう。

ラジオの方は何もしないのも癪なので、久しぶりにプログラムを書いてみた。簡単なプログラムだが、タクトスイッチ(ノンロックキー)による、電源スイッチを組み込むことにした。(これも手こずったのだが・・・)先週、ゲート電圧の低いPchのFETを秋月で仕入れておいた。回路は一般的なもの。PICのポートはコントロール用の出力ポートとスイッチ押下を検出する入力ポートの2つが必要となる。KEYは7番目を。出力ポートはLED_2に割り当ててあったポートを使うことにした。

2.54mmのpinを立てて、ブレッドボードに挿せるようにした。
Dscf0388

可搬できるように、紙箱に入れたが、入りきれなくなってきた。
Dscf0390

青いスイッチが電源スイッチになる。
Dscf0392


実はここに至るまでの失敗作である。(下の写真)電源をOFFしても、ゲート電圧が残ってしまい、完全にOFFできなかった。仕方がないので、NPNのトランジスターを追加してOKとなる。
ネットを検索すると、ちゃんと書いてあった。みんな同じことをやっている。
このサイトに書いてあった。
Dscf0385

さて、板金も仕上げないと・・・・

| | コメント (0) | トラックバック (0)

2014/01/19

I2C制御DSPラジオ(BK1088) 8

ケース加工の続きだ。
Dscf0360

Xテーブルを使って、ボール盤にエンドミルをつけて、簡易フライス盤だ。
Dscf0366

まずは、一辺を切削。送り速度が一定でないので、細かい切削跡が残る。精度はまあまあだ。
Dscf0370

Dscf0372

こんな感じで、切削が完了。
Dscf0373

これができあがり。意外と?シャキリとできない。各辺を切削するときに、位置を再設定する。これが、精度が出ない原因だと思う。XYテーブルにすれば、位置決めが簡単に出来て、精度が出せると思う。予め4すみに穴を開けておくのはいい。これをガイドにすれば、位置決めが簡単になる。
あとは、材料の固定方法だろうか。材を送るときに、刃に噛んで持って行かれそうになることがある。引っ張られる力に対しては、Xテーブルのガタと両面テープの押さえでは、甘いようだ。この辺りを改善すれば、さらに精度が期待できるであろう。
Dscf0375

キー基板にCPUの基板を載せてみた。最初からうまく考えれば、キー基板にCPUを載せることができたであろう。
この辺りのツメが甘い。複雑な構造になってしまった。
Dscf0378

ベース側にDSPチップを載せる予定だ。シールドも施したいと思っている。スピーカーもつけることにした。意外とスペースがない。
Dscf0379

仮組みをしてみた。LCDパネルも仮のものだ。仕上がりはこんな感じになる。
Dscf0380

ダイヤルのつまみは、こんなに大きい必要はない。なぜなら、クリック付きのロータリーエンコーダーを使うので、実際は小さなもので十分だ。デザインのつもりで大きなツマミにした。
Dscf0383_1

細かい、加工が残っている。まだ、配線までに入れない。もう少し、時間がかかりそうだ。

| | コメント (0) | トラックバック (0)

2014/01/13

I2C制御DSPラジオ(BK1088) 7

Xテーブルを使って、ケースの加工を始めたが、Xテーブルを作ってからの作業のため、中々完成しない。
イメージはこんな感じだ。未完成。

Dscf0359

Dscf0348_2

| | コメント (0) | トラックバック (0)

2013/12/15

I2C制御DSPラジオ(BK1088) 6

久しぶりの更新だ。しばらく空いてしまい、思い出しながら少しづつ進めていた。
Dscf0306

ロータリーエンコーダーを2つ使って、周波数の設定と音量の設定を行うようにした。最初、音量はADコンバータを使って、ボリューム(可変抵抗器)で制御したのだが、耳で聴こえる感覚と回転角が不自然になってしまった。Bカーブのボリュームだから、回転角に比例して電圧が変化すれば、レジスターは2dBステップ(log値)なので、自然に聴こえると思ったが、そうは行かなかった。深く追求するよりもロータリーエンコーダーに変えて自然に変化するようになった。

周波数の設定もタイミングを取らないと上手くチップに書き込めなかったり、周波数の設定や音量を変化させると、I2Cが動くタイミングでノイズが混入したり、カットアンドトライが続く。特にLCD表示を書き換えるとI2Cのデータが出るためにノイズの混入が多い。これをチップにミュートを掛けてノイズを低減させた。まだ、完全ではない。
また、main関数のループでI2Cが動いていると、RF(AMとSW)にもノイズが入る。データが変化した時のみに、処理が動くようにフラグで制御した。完全に止めるためには、CPUをスリープさせるなど、根本的な対策が必要かもしれない。
これも、私のレベルでは、ハードルが高い。この辺りのノイズ対策はブレッドボードではなく、組み込み時にチューニングが必要だ。

回路図とソースコードの公開の準備をしている。

【2013.12.21追記】=============
回路図を描いてみた。追加しておく。
Dsp_radio20131221

オーディオ出力はLoutに100uF電解コンデンサー+20Ωを介して、スピーカーに直接接続している。(Routはテストしていない)20Ωを接続している理由は、微少であるが、ピーといったノイズ?が混入しているので、これを入れることで目立たなくなるからだ。何が原因であるか、詰める必要があるが、今はこのまま使っている。
高効率のスピーカを使用しているので、普通に聴く分には十分な音量だが、もっと欲しい場合は外付けのアンプを付ければいい。この場合は、レジスターで音量を可変しなくても、アナログのボリュームを付ければ、事足りるだろう。リモコンとか使いたいなら、レジスターの音量調整を使えばいいだろう。
セットに仕上げるのは、大変だ。

【2013.12.22追記】=============
自分の備忘録として、ソース・ファイル、HEXファイルを置いておきます。
デバッグ用に0x05レジスターの内容を表示しています。LEDもデバッグ用です。
Mikro C PRO v5.8.0でビルドしています。
関係各位のソースを参考にしています。(感謝!、感謝!)

「20131215_2.zip」をダウンロード


| | コメント (0) | トラックバック (0)

2013/11/04

I2C制御DSPラジオ(BK1088) 5

LCD表示に苦しんだ。ハード的には、キーを追加して、選曲ボタン5個、AM/FM/SW切替ボタン1個の構成にした。
周波数値をIntToStr関数を使って、文字コードに変換し、I2CのLCDに送り込むのだが、ポインタの処理がまずくて(本当は、忘れただけ?)、なかなかうまく行かなかった。これで、周波数とモードをボタンで切り替えることができるようになった。

周波数設定ができたりできなかったりする件は、とりあえず、周波数設定を2度たたくことで、回避している。この辺りはもう少し詰める必要があると思うが、周波数値をレジスターにセットしてから、TUNEビットを上げてやればいいのかもしれない。全体調整の中で再確認してみよう。

もう一つ、電源ON時に周波数設定ができない件は、チップにイニシャライズ設定後、80mS待ってから、周波数設定することで、確実に設定できるようになった。

また、周波数切替時にスピーカから雑音が雑音が出る件は、周波数を設定する時に、MUTEさせておくことで回避できそうだ。PLLがロックするまでに時間がかかるようだ。とりあえず、700mSを設定した。これで、だいぶ良くなったのだが、完全ではない。コールドスタート時(完全に電源を放電させてからONする時)や、切替のタイミング?によって、若干の雑音が残っている。単にMUTE時間を伸ばすだけでは解決しないようだ。既に実用レベルだが、もう少し追求する余地があると思う。

音量調整は、可変抵抗器をAD変換し、I2Cコマンドで制御できないかと、構想している。周波数はロータリーエンコーダで可変できるようにもしたい。
AD変換の方は初めてのことで、どのように処理の中に織り込めばいいのか、よくわからない。キースキャンを止めてしまえば、AD値を読んで、LCD表示させることはできた。キースキャンが止まっては、実用性がない。
もう少し、かかりそうだ。

Dscf0268

【おまけ】
J-waveがこんなに良く聴こえるとは思わなかった。送信所がスカイツリーに移ったらしい。以前は、こんなに良く聴こえなかったと思う。東京FMは、今の状態では聴こえない。このセットでも、以前は聴こえていたと思うので、こちら側のアンテナのせいだろう。それにしても、絶対的に電界強度に差がある。東京タワーとスカイツリーの差か。

| | コメント (0) | トラックバック (0)

2013/10/27

I2C制御DSPラジオ(BK1088) 4

SWで、AM/FM/SWを選曲して、予め登録した局を切り替えることができるようになった。
ただ、切り替えるタイミング?によって切り替わらない時がある。タイミングを取ると良いのか、2度書き込むことで、値をセットして、次の立ち上がりエッジ?で読み込むのか、2度周波数をセットすると書き込めるのだが、中々思い通りに動かない。
少し頭を冷やして考えてみよう。
(AMもFMも、音は非常に良いです。)

| | コメント (0) | トラックバック (0)

より以前の記事一覧