| ホーム | 私の電子工作作品集 |
[ 初公開日:2020年11月14日 ] |
RDA5807M IC チップの FMラジオモジュールを使用した、前作 "187. FMステレオラジオ" を製作、公開してから1か月ほどが経ちますが、もう1台、アンプモジュールを省いて小型化を図り、
ポケットにも入る携帯用として2号機の製作をしてみました。 アンプがないので大きなスピーカーを駆動することはできませんが、ヘッドフォン(イヤホン)で聞くには十分です。 前作では、8 ピンの PIC を使用したために I/O ポート数が足らなくて、十分な機能を持たすことができませんでした。 そこで今回は、14 ピンの PIC16F684 に変更をして、電源には単3乾電池2本という構成にしました。 そして、スリープ機能の追加、ステレオ放送時の LED 点灯、受信強度の LCD 表示、SEEK 機能での選局など、前作にはなかった新しい機能を盛り込んでみました。
テーブルデータのアドレス計算プログラムのバグを修正 ( 2021/1/6 更新 ) ( 2021/1/12 再更新 ) 前作 "187. FMステレオラジオ" で述べたことと同じ理由により、FM ラジオ放送局をプリセットデータで選局するための、「FM ラジオ放送局 データテーブル」の、アドレス計算プログラムにバグがありました。 テーブルのデータ数が 13 までのプリセットデータについては問題はないのですが、その数を超えたプリセットデータ分については正常な選択ができませんでした。 私が住んでいる地区では、FM ラジオ放送局が 13 を超えることはないので、このようなことは起こりませんが、東京周辺地区にお住まいの方は放送局数が多いので、プリセットの設定数が 13 を超えたときには、この症状が現れます。 詳細は、前作 "187. FMステレオラジオ" の プログラム の項の後半部分を参照してください。 なお、本機 "FMステレオラジオ II" の修正プログラムは、本ページのプログラムの項の 現在の最新バージョン: Ver. 1.07b に収録がしてありますので、ご利用ください。 (再更新はコメントを追加しただけで影響はありません。) 【 お知らせ 】 ( 2022/1/27 ) 次の回路図下の 注3. で述べている「当初計画していた機能を持たせる」ためと、使用した電源スイッチの不満を解消するために、"194. FMステレオラジオ III" を新たに製作し、ページの公開をしました。 PIC には、本機で使用した PIC16F684 と同様に 14 ピンですが、私にとっては初めての使用となる PIC16F1 ファミリーの、PIC16F1705 を採用したものとなっています。 ご興味がありましたら、ぜひご覧になってください。 |
*注1. PIC の RA1、RA2、RA5 は内部プルアップ機能を ON にして使用。 RA3 は入力専用で、出力ポートには使えない。 また、内部プルアップ機能もないため、外付け抵抗 10KΩでプルアップ。 | |
*注2. LED(高輝度 赤)は ステレオ放送のときに点灯させるもので、この LED は正面から見ることが多いため眩しいので、輝度を抑えたいために電流制限抵抗は通常より大きな 8.2KΩを使用。 | |
(参考: 3V の電源に接続したときの実測値: 7.5 KΩのとき ≒ 223μA、8.2KΩのとき ≒ 204μA、9.1KΩのとき ≒ 182μA、10KΩのとき ≒ 167μA) | |
*注3. 図中で ( 注 ) とあるのは、終盤になってから予定を変更したためで、当初計画していた機能を持たせることが、PIC16F684 ではできないことが分かったため、未使用で宙ぶらりんになっている。 |
当初、VOLUME UP に RA4 を使用して、RA3 は未使用にしていたのですが、RA3 はデジタル入力専用にしか使用ができないため、RA3 と RA4 を入れ替え、アナログ入力にもデジタル入出力にも使用ができる、
RA4 を将来の拡張用に取っておくように変更をしました。 ただし、RA3 を入力ポートとして使用するときには、上図のように外付け抵抗でプルアップをする必要があります。 FMラジオモジュールについて このモジュールを使用するにあたって、予め知っておいていただきたいと思い、前作で述べたことをここに再掲をしておきます。 このモジュールを使用した実際の製作例をネットで検索をしてみると、いろいろとヒットをしますが、それらの製作例には ROUT / LOUT の出力端子が、上回路図とは逆 * に取り扱っている例が多く見受けられますが、 それらは間違いだと思います。 RDA5807M チップのデータシートを見てみると、9 ピン = ROUT、10 ピン = LOUT となっており、実際のラジオモジュールを観察してみると、上図のようにチップの 9 ピン = ROUT はモジュールの 8 番端子、 チップの 10 ピン = LOUT はモジュールの 7 番端子に繋がっています。 テスターで導通を確認しました。 * 逆: あるネットショップ(私が購入したショップ)の商品説明で、写真画像に信号名が書かれているものがあって、それが逆に示されているためと思われる。 |
| 回路図 (FM_StereoRadioII.CE3) | ページトップ |
|
| ページトップ |
[ NHK FM ] [ NHK FM ] [ NHK FM ] [ Vol:xx ] [ Lev:xx ] [ 82.5MHz ] SELECT 1 SELECT 0 ( 選局方法 ) 0 0 名古屋周辺地区用 ┐ 0 1 東京周辺地区用 │プリセット情報で選局 1 0 大阪周辺地区用 ┘ 1 1 100kHzステップ毎の SEEK機能で自動選局 [ FM AICHI ] [ FM AICHI ] [ FM AICHI ] [ Vol:xx ] [ Lev:xxx ] [ 80.7MHz ] タイマーカウントの開始 ・・・ FMラジオモジュールの設定、 ラジオ局名、音量設定値の表示 カウントの2秒後 ・・・ FMラジオモジュールから情報の読み出し 受信強度の表示 4秒後 ・・・ 周波数の表示 6秒後 ・・・ セーブ情報をバックアップ 1分後 ・・・ スリープ状態に移行 [ * Seek * ] [ NHK FM ] [ NHK FM ] [ Vol:xx ] [ Lev:xx ] [ 82.5MHz ] [ ???????? ] [ ???????? ] [ Lev:xx ] [ xx.xMHz ] ( Ver. 1.06 で以下を追加 ) [ 76.0MHz ] [ Lev:xx ] |
| ページトップ |
このプログラムの項は、書いている内に極端に長くなってしまったので、
● 前作 "FMステレオラジオ" と 本機 "FMステレオラジオ II" との相違点 まず、1つ目の相違点は、前作 "187. FMステレオラジオ" では、同ページの "プログラム" の項で述べたように、名古屋、東京、大阪の各地区用にプリセットした、 「放送局データテーブル」を切り替える(選択をする)ためには、ソースプログラムのアセンブルをし直さないと、希望地区用のデータテーブルには変更ができませんでした。 これに対して本機 "FMステレオラジオ II" では、2個の DIP スイッチ(SELECT 1, 0)の設定を変更するだけで、 簡単に希望する地区用に切り替えることができるようにしました。 (ただし、電源スイッチを ON にする以前に、設定変更をする必要がある。) したがって、再アセンブルのような面倒な作業は、一切必要がありません。 次表は、DIPスイッチの値とプリセット地区名の対応を、一覧に表したものです。
これに対して、「SEEK機能で自動選局」 の場合には、帯域 76 〜 108 MHz (world wide) の中を 100kHz ステップ毎にシークをしながら自動選局をするため、プリセット情報には関係なく放送局が存在すれば、 必ず選局をすることができます。 これが2つ目の相違点です。 3つ目の相違点は、RDA5807M FM Tuner の読み出し用のレジスタの内容を見て、その情報を積極的に利用をしています。 具体的には、放送局を選局したときのその受信強度を数値として LCD に表示をさせたり、 その放送がステレオ放送のときには LED を点灯させて、モノラル放送のときの消灯と区別ができるようにしたり、また、「SEEK機能で自動選局」 の場合には、選局をした放送局の、レジスタ値の周波数を基にして、 放送局名と周波数を LCD に表示をさせたりしています。 その他の相違点として、アンプモジュールを省いて小型化を図り、電源には単3乾電池2本という構成としたため、積極的に省電力化を図っています。 各タクトスイッチの操作が1分以上なかった場合には、 PIC をスリープ状態にするとともに、LCD の電源も OFF にし、LED も消灯させています。 そして、この PIC がスリープ状態のときには、各タクトスイッチに RA ポート変化割り込みの機能を持たせて、 スリープからウェイクアップをさせるようにしています。 最後に、これはラジオの機能には直接関係はないのですが、ブログ "矢野零趣味のページ/Grove I2C FM Receiver を使う" で見つけた 「FMスペクトラム」 図を、私もぜひ作成をしてみたいと思い、そのための 「RSSI データ収集機能」 を、本機のプログラムに盛り込んでみました。 そして、その機能を使用して、実際に我が家での RSSI データ収集(一応、76 〜 108 MHz の帯域すべて)を行い、その実測値を Excel でグラフに変換したものが、次のスペクトラム図です。 我が家がある名古屋地区では、このような周波数分布になりました。 初め、スペクトラム図の結果を見てプリセット局を増やそう、と思っていたのですが、次図のようにピークは既存局の6本しかなく、 遠局としての新たなピークは存在しませんでした。 (2か所の↓のところで、ほんの微かに音が聞こえる程度でした。) | プログラムのトップに戻る | ● RDA5807M FM Tuner のレジスタと使用法 本機 "FMステレオラジオ II" では、改めて言うまでもなく IC チップ RDA5807M を使用していますが、この IC チップを使いこなすためには、RDA5807M 内部にあるレジスタ群の個別の機能、および、それらの扱い方を、 十分に理解をすることが重要でそれが理想的ですが、それは極めて難しいことでもあります。 現在、"RDA Microelectronics, Inc." 社の英文データシート "RDA5807M FM Tuner V1.0 / Rev.1.0-May.2011" * (注) が、私が知る限り唯一の参考(解説)書のようですが、私の今の拙い英語力と専門知識では、 残念ながら十分には理解をすることができません。
なお、以降で使用している各サブルーチン ( i2c_start, i2c_stop, byte_send, byte_reciv, ack, nack ) は、現在の最新バージョン で表記の "I2C LCD 制御サブルーチン (I2C_S_LCD.sub)" 内に収容がされているので、そちらを参照してください。 : : movlw h'03' ; call rda_reg_write ;RDA_Reg = h'03' へ書き込み : : ;-------------------------------------------------------------------------- ; (RDA5807M FM Tuner)の 指定 RDA_Reg へ書き込み ;-------------------------------------------------------------------------- ; rda_reg_h: 書き込みデータの high バイト ; rda_reg_l: 書き込みデータの low バイト ; 入力 W_reg: RDA_Reg 番号 rda_reg_write movwf work1 ;RDA_Reg 番号を退避 movlw rda_reg_h ;書き込みデータの格納アドレス movwf FSR ;間接アドレスに設定 call i2c_start ;スタートコンディション movlw h'22' ;RDA スレーブアドレス call byte_send ;1 バイト送信 movf work1,W ;RDA_Reg 番号 call byte_send ;1 バイト送信 movf INDF,W ;書き込みデータの high バイト call byte_send ;1 バイト送信 incf FSR,F ;間接アドレスの更新 movf INDF,W ;書き込みデータの low バイト call byte_send ;1 バイト送信 call i2c_stop ;ストップコンディション return また、この場合にも個別読み出しですから、スレーブアドレスは h'22' です が、再スタートコンディションの後に h'22' + 1 を送信して、書き込みから読み出しに切り替え ています。 そして、読み出しに切り替えた後は、1バイト目(上位バイト)を受信すると ACK を、2バイト目(下位バイト)を受信すると NACK を、それぞれ RDA5807M に返し、ストップコンディションで終わっています。 : : movlw reg_0a_h ;読み出データの格納アドレス movwf FSR ;間接アドレスに設定 movlw h'0a' ; call rda_reg_read ;RDA_Reg = 0ah から読み出し incf FSR,F movlw h'0b' ; call rda_reg_read ;RDA_Reg = 0bh から読み出し : : ;-------------------------------------------------------------------------- ; (RDA5807M FM Tuner)の 指定 RDA_Reg から読み出し ;-------------------------------------------------------------------------- ; reg_0a_h: 読み出しデータ high バイトの格納先 ; reg_0a_l: 読み出しデータ low バイトの格納先 ; reg_0b_h: 読み出しデータ high バイトの格納先 ; reg_0b_l: 読み出しデータ low バイトの格納先 ; 入力 W_reg: RDA_Reg 番号 rda_reg_read movwf work1 ;RDA_Reg 番号を退避 call i2c_start ;スタートコンディション movlw h'22' ;RDA スレーブアドレス call byte_send ;1 バイト送信 movf work1,W ;RDA_Reg 番号 call byte_send ;1 バイト送信 call i2c_start ;再スタートコンディション movlw h'22' + 1 ;RDA スレーブアドレス call byte_send ;1 バイト送信 call byte_reciv ;データ 1 バイト受信 call ack ;ACK movwf INDF incf FSR,F ;間接アドレスの更新 call byte_reciv ;データ 1 バイト受信 call nack ;NACK movwf INDF call i2c_stop ;ストップコンディション return 連続でレジスタに書き込むときにはレジスタ番号の指定はしませんが、上述したように 自動的に指定された先頭レジスタ = 02H から書き込まれ、本機では 05H まで書き込んだところで、 ストップコンディションを送出して終了をしています。 すなわち、02H、03H、04H、05H の4つのレジスタにデータを設定することによって、「FMステレオラジオ」 として機能をするようになります。 そして、(注意)としてあるところはサブルーチン ( fm_tuner_set ) が選局方法を、上述の DIPスイッチの値の一覧表 で、 b'11' (SEEK機能で自動選局)のときと、それ以外(プリセット情報で選局)のときを切り分けているのです。 しかし、 b'11' (SEEK機能で自動選局)のときでも初回1度目の設定のときだけは、シーク動作はさせていません。 それは、前回に選局をしていたセーブ情報を基に、再設定をするのが目的だからです。 それでも切り分けを行っているのは、レジスタ 03H の CHAN [9:0] ビットに設定をするための、セーブ情報である元データが異なっているためで、すなわち、 b'11' のときには CHAN [9:0] そのものがセーブ情報ですが、それ以外のときにはプリセットの局番号がセーブ情報であるためです。 ;========================================================================== ; (RDA5807M FM Tuner)の設定 ;========================================================================== fm_tuner_set btfss updt_flg,7 ;初期化直後フラグ = ON か? goto ftset03 ;No ; updt_flg.7 = 1 (初期化直後)のとき ;;;;;;;;;; 連続した複数のレジスタに書き込むためのプログラム例(開始);;;;;;;;;; call i2c_start ;スタートコンディション movlw h'20' ;RDA スレーブアドレス call byte_send ;1 バイト送信 movlw b'11010000' ;RDA_Reg 02h、15=DHIZ,14=DMUTE,13=MONO,12=BASS,11=RCLK_N,10=RCLK_D,9=SEEKUP,8=SEEK call byte_send ;1 バイト送信 movlw b'00000001' ;RDA_Reg 02h、7=SKMODE,6:4=CLK_MODE[2:0],3=RDS_EN,2=NEW_METHOD,1=SOFT_RESET,0=ENABLE call byte_send ;1 バイト送信 movlw b'11' subwf sel_sw,W btfsc STATUS,Z ;SELECT 1,0 スイッチ = b'11' か? ;;;;;;;;;;(注意);;;;;;;;;; goto ftset01 ;Yes movf rda_reg_h,W ;RDA_Reg 03h、15:8=CHAN[9:2] call byte_send ;1 バイト送信 --------- movf rda_reg_l,W ;RDA_Reg 03h、7:6=CHAN[1:0],5=DIRECT MODE,4=TUNE,3:2=BAND[1:0],1:0=SPACE[1:0] call byte_send ;1 バイト送信 --------- goto ftset02 ftset01 movf radio_no,W ;RDA_Reg 03h、15:8=CHAN[9:2], (radio_no = chan_h) call byte_send ;1 バイト送信 --------- movf chan_l,W ;RDA_Reg 03h、7:6=CHAN[1:0],5=DIRECT MODE,4=TUNE,3:2=BAND[1:0],1:0=SPACE[1:0] iorlw h'18' ;4=TUNE = '1', 3:2=BAND[1:0] = '10' = 76-108 MHz (world wide), 1:0=SPACE[1:0] = '00' = 100 kHz ;チューニング操作が完了すると、TUNE = 0 に設定され、STC = 1 に設定される call byte_send ;1 バイト送信 ftset02 movlw b'00000000' ;RDA_Reg 04h、15:12=RSVD,11=DE,10=RSVD,9=SOFTMUTE_EN,8=AFCD call byte_send ;1 バイト送信 movlw b'00000000' ;RDA_Reg 04h call byte_send ;1 バイト送信 movlw b'10001000' ;RDA_Reg 05h、15=INT_MODE,14:12=RSVD,11:8=SEEKTH[3:0] call byte_send ;1 バイト送信 movf volume,W iorlw b'10000000' ;RDA_Reg 05h、7:6=?? ,5:4=RSVD,3:0=VOLUME[3:0] call byte_send ;1 バイト送信 ----------- call i2c_stop ;ストップコンディション goto ftset06 ;;;;;;;;;; 連続した複数のレジスタに書き込むためのプログラム例(終了);;;;;;;;;; ftset03 btfss updt_flg,0 ;ラジオ局番号更新フラグ = ON か? goto ftset05 ;No ; updt_flg.0 = 1 (ラジオ局番号更新)のとき movlw b'11' subwf sel_sw,W btfsc STATUS,Z ;SELECT 1,0 スイッチ = b'11' か? ;;;;;;;;;;(注意2);;;;;;;;;; goto ftset04 ;Yes movlw h'03' ; call rda_reg_write ;RDA_Reg = h'03' へ書き込み goto ftset06 ; updt_flg.0 = 1 && sel_sw = b'11' (SEEK選局)のとき ; 9 = SEEKUP: 0 = シークダウン, 1 = シークアップ ; 8 = SEEK: 0 = ストップシークを無効, 1 = 有効 ; シーク動作が完了すると、SEEK = 0 に設定され、STC = 1 に設定される ; 7 = SKMODE: 0 = 帯域の上限または下限でラップしてシークを続行, 1 = シークを停止 ftset04 movlw b'11010001' ;RDA_Reg 02h、15=DHIZ,14=DMUTE,13=MONO,12=BASS,11=RCLK_N,10=RCLK_D,9=SEEKUP,8=SEEK iorwf seekup,W ; -------- ------ movwf rda_reg_h movlw b'00000001' ;RDA_Reg 02h、7=SKMODE,6:4=CLK_MODE[2:0],3=RDS_EN,2=NEW_METHOD,1=SOFT_RESET,0=ENABLE movwf rda_reg_l ; -------- -------- movlw h'02' ; call rda_reg_write ;RDA_Reg = h'02' へ書き込み goto ftset06 ; updt_flg.1 = 1 (音量更新)のとき ftset05 movlw b'10001000' ; movwf rda_reg_h movf volume,W iorlw b'10000000' ; movwf rda_reg_l movlw h'05' ; call rda_reg_write ;RDA_Reg = h'05' へ書き込み ftset06 return この後半部分でも(注意2)のところで、 b'11' (SEEK機能で自動選局)のときと、それ以外(プリセット情報で選局)のときを切り分けて、まず、それ以外(プリセット情報で選局)のときには、レジスタ 03H の CHAN [9:0] の設定を書き換えています。 これに対して、 b'11' (SEEK機能で自動選局)のときには、レジスタ 02H の bit 9 = SEEKUP、bit 8 = SEEK、bit 7 = SKMODE それぞれを指定して、ここで初めてシーク動作をさせています。 また、音量の更新スイッチ(VOLUME UP、VOLUME DOWN)が押されたときには、レジスタ 05H の VOLUME [3:0] を書き換えています。 以上が、レジスタに書き込むための具体的なプログラム例ですが、それぞれのプログラムで扱った各レジスタの各ビットの意味は、次表のようになります。 これは、英文データシート "RDA5807M FM Tuner V1.0 / Rev.1.0-May.2011" * (注) 内の、 ( 6 Register Definition )の表のままでは、私が非常に分かり辛かったので日本語化をして書き換えたのですが、どの程度の正確性があるかは保証の限りではありません。
FM放送局を選局をするには、プリセット情報で選局を行う方法 と、SEEK機能で自動選局を行う方法の、2種類があることを既に何度も述べてきましたが、前者の場合には レジスタ 03H の bit 4 = TUNE が、 また、後者の場合には レジスタ 02H の bit 8 = SEEK が、"1" に設定されたときにそれぞれの選局操作が開始されます。 そして、それらの選局が完了すると、"1" に設定した TUNE ビットや SEEK ビットが自動的に "0" にリセットされ、どちらの場合にも レジスタ 0AH の bit 14 = STC が "1" に設定されます。 したがって、この STC ビットが "1" になったかどうかをプログラムで監視をすれば、それぞれでの選局が完了したかどうかを把握することが可能となります。 次のプログラム例では、STC ビットが "1" になったのを確認してから、続くレジスタ 0BH を読み出すようにしています。 そしてまず、レジスタ 0AH の bit 10 = ST ビットの状態( "0": モノラル/ "1": ステレオ) で選局をした放送局の状態が分かるので、本機では "1" のときには LED を点灯させて、ステレオ放送であることを表示させています。 次には、レジスタ 0BH の bit 15:9 = RSSI [6:0] で受信強度 * が分かるので、10進数文字列に変換をしてから LCD に表示をさせています。 また、レジスタ 0AH の bit 9:0 = READCHAN[9:0] を参照すると、 受信したチャネルが分かるので、SEEK機能で自動選局の場合には、放送局名やその局の周波数に変換をして、同様に LCD に表示をさせています。
;========================================================================== ; (RDA5807M FM Tuner)からレジスタ内容の読み出しと表示 ;========================================================================== rssi_disp movlw reg_0a_h ;読み出しデータの格納アドレス movwf FSR ;間接アドレスに設定 movlw h'0a' ; call rda_reg_read ;RDA_Reg = h'0a' から読み出し btfss reg_0a_h,6 ;STC ビット = 1(シーク/チューン完了)か? goto rssi_disp ;No incf FSR,F movlw h'0b' ; call rda_reg_read ;RDA_Reg = h'0b' から読み出し bcf PORTC,LED_ST ;ST/MO LED 消灯 btfsc reg_0a_h,2 ;ST(Stereo Indicator)ビット = 1 か? bsf PORTC,LED_ST ;Yes. ST/MO LED 点灯 rrf reg_0b_h,W andlw h'7f' ;RSSI[6:0] movwf work1 call bindec8cz_cnv ;10進数文字列に変換(ゼロサプレス) ; [ Lev: ] ; 01234567 Disp_I2cLcd h'c0',level_msg,1 ;(2行目表示) … 受信強度の表示 movlw h'c5' ;DDRAM のアドレスをセット call I2cLcd_Cmd ;I2C LCD へコマンドを出力 ; movlw buff ;変換文字列の格納エリア movlw buff + 1 ;変換文字列の格納エリア movwf FSR ;間接アドレスの設定 ; movlw 3 ; movlw 2 ; movwf lpcnt ;ループカウンタに設定 rssi01 movf INDF,W call I2cLcd_Data ;I2C LCD へデータを1文字出力 incf FSR,F ;間接アドレスの更新 decfsz lpcnt,F ;ループカウンタ - 1 = 0 か? goto rssi01 ;No movlw b'11' subwf sel_sw,W btfsc STATUS,Z ;SELECT 1,0 スイッチ = b'11' か? call channel_compare ;Yes. 局名の表示 return
● PIC16F684 と MPLAB IDE v8.92 のリンクエラーについて 私が PIC でのプログラムを作成をするようになって、もう 15 〜 16 年ぐらいになりますが、今回、大変珍しい事象に初めて遭遇をした、というか経験をしました。 MPLAB IDE も最終更新が v8.92 で、現在では MPLAB X IDE に移行をして v5.45 が最新のようですが、私は使い慣れているので、今でも MPLAB IDE の v8.92 を愛用しています。 実は、少し以前まではもっと古いバージョン(v番号までは記憶にない)を使用していたのですが、今年の2月末頃にそれまで使用をしていた PC のハードディスクが、突然、クラッシュをしたようで使用不可となり、 4月になって新しい PC を購入したときに、MPLAB IDE v8.92 のインストールをしました。 ですから、MPLAB IDE v8.92 としての使用歴は意外に短く 7 か月ほどで、その間に4本のプログラムを作成し、その内の1本が本機のプログラムで、PIC16F684 を使用したものは今回が初めてでした。 ただし、以前の古いバージョンでは PIC16F684 を使用したものは、既に1本(小規模プログラム)の作成経験があります。 前書きが少々長くなりましたが、このような経歴で、今回のようなリンクエラーという事象には、 15 〜 16 年の内で初めて遭遇をしました。 そして、この珍しい経験を記録として、プログラム中にもコメントとして書き込んでありますが、 以下にも再度、まとめ直してみました。 ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― 本機のプログラムも( Ver. 1.05 )までで一応は完成をしたのですが、上述したように、ブログ "矢野零趣味のページ/Grove I2C FM Receiver を使う" で見つけた 「FMスペクトラム」 図を、私もぜひ作成をしてみたいと思い、( Ver. 1.06 )でそのための RSSI データ収集機能を本機のプログラムにも盛り込んでみたのです。 そして、そのプログラミングもほとんど終了間近というときに、 突然、リンクエラーが発生をしたのです。それは、タイミングの調節をしていたときで、 call wait_1sec ; 1 秒 ウェイトルーチンという命令を1行書いたときにはリンクエラーは発生せず、何事もなかったようにビルドが終了をしました。 ところが、もう少しウエイトを増やした方がいいかな、と思ってもう1行同命令を付け加えたところ、 突然、 MPLAB IDE が次のエラーメッセージを吐き出したのです。 ・・・ なんだ、これは !! ---------------------------------------------------------------------- Debug build of project `D:\Project\PIC\FM_StereoRadioII\FM_StereoRadioII.mcp' started. Language tool versions: MPASMWIN.exe v5.51, mplink.exe v4.49, mplib.exe v4.49 Preprocessor symbol `__DEBUG' is defined. Sun Nov 08 02:46:05 2020 ---------------------------------------------------------------------- Make: The target "D:\Project\PIC\FM_StereoRadioII\FM_StereoRadioII.o" is out of date. Executing: "C:\Program Files (x86)\Microchip\MPASM Suite\MPASMWIN.exe" /q /p16F684 "FM_StereoRadioII.asm" /l"FM_StereoRadioII.lst" /e"FM_StereoRadioII.err" /d__DEBUG=1 Make: The target "D:\Project\PIC\FM_StereoRadioII\FM_StereoRadioII.cof" is out of date. Executing: "C:\Program Files (x86)\Microchip\MPASM Suite\mplink.exe" /p16F684 "FM_StereoRadioII.o" /u_DEBUG /z__MPLAB_BUILD=1 /z__MPLAB_DEBUG=1 /o"FM_StereoRadioII.cof" /M"FM_StereoRadioII.map" /W /x MPLINK 4.49, Linker Device Database Version 1.14 Copyright (c) 1998-2011 Microchip Technology Inc. Error - section '.org_3' can not fit the absolute section. Section '.org_3' start=0x00000008, length=0x00000bf2 Errors : 1 Link step failed. ---------------------------------------------------------------------- Debug build of project `D:\Project\PIC\FM_StereoRadioII\FM_StereoRadioII.mcp' failed. Language tool versions: MPASMWIN.exe v5.51, mplink.exe v4.49, mplib.exe v4.49 Preprocessor symbol `__DEBUG' is defined. Sun Nov 08 02:46:06 2020 ---------------------------------------------------------------------- BUILD FAILED上のエラーメッセージの中で、次の Error - section '.org_3' can not fit the absolute section. Section '.org_3' start=0x00000008, length=0x00000bf2が問題なわけで、「 '.org_3' は絶対セクションに適合できない。」 の意味がまったく分からない? '.org_3' とは何? ちなみに、アセンブルリストを見てみると、当然ながら正常でエラーはない。 次は、リンクエラーが発生したとき(call wait_1sec が2行のとき)の、アセンブルリストで表示されるメモリの使用状況など。 : : All other memory blocks unused. Program Memory Words Used: 1531 ← 1530 を超えるとエラーになる! ??? Program Memory Words Free: 517 Errors : 0 Warnings : 0 reported, 0 suppressed Messages : 0 reported, 23 suppressedそこで、ソースプログラムをもう少しあれこれと変更をしてみて分かったことは、命令の種類が問題ではなく(当然だ)命令数が問題で、現状より1つ以上の増加をさせると同エラーとなる。 しかし、そうなると今後のプログラムの更新ができないではないか。 どうすれば良いのか ??? なおも、いろいろと試していると MEMORY USAGE MAP ('X' = Used, '-' = Unused) : : 0580 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 05C0 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX ← 5FF を超えるとエラーになる 0600 : X--------------- ---------------- ---------------- ---------------- 2000 : -------X-------- ---------------- ---------------- ---------------- 2100 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXX--- ----------------のように、5FFh 番地を超えたときに、確実にリンクエラーが発生することが分かりました。 こんな事象が起こるのは、リンカーのバグではないのか ??? call wait_1sec ; 1 秒 ウェイトルーチンの命令が1行のときには、偶然にも丁度 5FFh 番地までのメモリを使用していたのが、もう1行を追加したためにメモリの使用が 5FFh 番地を超えて 600h 番地までになり、結果、リンクエラーとなった。 ということになるようです。 PIC16F684 を使用の本機においては、今後、プログラムの更新をする場合には、600h 番地以降のメモリが使用できないとなると、本来のラジオ機能には関係がない( Ver. 1.06 )で追加をした、 RSSI データ収集機能関連のルーチンを取り除いて、プログラムエリアを空けるしか方法がないのでは ??? (現在、500 ワード以上もの未使用の空きエリアがあるにもかかわらず!!) これは非常に不合理なことで何か方法があるはず。 フッとひらめいたのが次のように、プログラムの一部を 600h 番地以降に移動させてみたらどうか? ということでした。 org h'0600' ;;;;; リンクエラーの回避策 spectrum movlw b'00101110' xorwf PORTA,W : :的中しました。 リンクエラーは発生しません。 そのときのメモリ使用マップが次の通り。 MEMORY USAGE MAP ('X' = Used, '-' = Unused) : : 0480 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 04C0 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXX- ← 5FF を超えて連続で 0600 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 600 以降に続かないようにする 0640 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX : :上のメモリ使用マップのように、5FFh 番地を超えて連続で 600h 番地以降に続かない(両番地の境を跨がない)ように すれば、リンクエラーを回避することが可能なことが分かりました。 以上から、結論は、やはりリンカーのバグだと思います。 そして、この事象の回避策としては、5FFh 番地を超えるような大きなプログラムの場合には、5FFh 番地のメモリを使用しないようにする ことです。 *** その後、もう一つ分かったことがありました *** '.org_3' とは何? と上述をしましたが、MPLAB IDE がビルドをする過程でリンカーが作り出す .map ファイルの中にありました。 まず、リンクエラーが発生したとき の、アセンブルリストで表示されるメモリ使用マップ 。 MEMORY USAGE MAP ('X' = Used, '-' = Unused) 0000 : X---X---XXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0040 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX : : (省略) : 0580 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 05C0 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0600 : X--------------- ---------------- ---------------- ---------------- 2000 : -------X-------- ---------------- ---------------- ---------------- 2100 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXX--- ---------------- All other memory blocks unused. Program Memory Words Used: 1531 Program Memory Words Free: 517 Errors : 0 Warnings : 0 reported, 0 suppressed Messages : 0 reported, 23 suppressedそのときの リンカーが作り出す .map ファイル の先頭の一部分。 MPLINK 4.49, Linker Linker Error Map File - Created Mon Nov 09 01:55:14 2020 *Warning* - This is only a partial map file due to a link time error. Only sections which were allocated prior to the error are shown below. CODEPAGES: Memory Start End Section Address Size(Bytes) --------- --------- --------- --------- --------- --------- page 0x0000 0x05ff .org_0 0x0000 0x0000 .org_1 0x0000 0x0002 .org_2 0x0004 0x0002 debug 0x0600 0x07ff .idlocs 0x2000 0x2003 .device_id 0x2006 0x2006 eedata 0x2100 0x21ff .config 0x2007 0x2007 .config_2007_FM_STEREORADIOII.O 0x2007 0x0002次に、org h'0600' で回避策をしたとき の、アセンブルリストで表示されるメモリ使用マップ。 MEMORY USAGE MAP ('X' = Used, '-' = Unused) 0000 : X---X---XXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0040 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX : : (省略) : 0480 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 04C0 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXX- 0600 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0640 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0680 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 06C0 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0700 : XX-------------- ---------------- ---------------- ---------------- 2000 : -------X-------- ---------------- ---------------- ---------------- 2100 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXX--- ---------------- All other memory blocks unused. Program Memory Words Used: 1531 Program Memory Words Free: 517 Errors : 0 Warnings : 0 reported, 0 suppressed Messages : 0 reported, 23 suppressedそのときの リンカーが作り出す .map ファイル の先頭の一部分。 MPLINK 4.49, Linker Linker Map File - Created Mon Nov 09 01:56:03 2020 Section Info Section Type Address Location Size(Bytes) --------- --------- --------- --------- --------- .org_0 code 0x000000 program 0x000000 .org_1 code 0x000000 program 0x000002 .org_2 code 0x000004 program 0x000002 .org_3 code 0x000008 program 0x0009ee .org_4 code 0x000600 program 0x000204 .config_2007_FM_STEREORADIOII.O code 0x002007 program 0x000002 .org_5 code 0x002100 program 0x00005a Program Memory Usage Start End --------- --------- 0x000000 0x000000 0x000004 0x000004 0x000008 0x0004fe 0x000600 0x000701 0x002007 0x002007 0x002100 0x00212c 1577 out of 2310 program addresses used, program memory utilization is 68%ここで、上で示した リンクエラーが発生したときの、リンカーが作り出す .map ファイルの、次の部分に注目をすると、 CODEPAGES: Memory Start End Section Address Size(Bytes) --------- --------- --------- --------- --------- --------- page 0x0000 0x05ff ←注目 .org_0 0x0000 0x0000 .org_1 0x0000 0x0002 .org_2 0x0004 0x0002 debug 0x0600 0x07ffこの辺りにリンクエラーが発生する原因があるのではないかと思われます。 リンカーがプログラム内部でどのような動作をしているのか、具体的なことは私にはわかりませんが、 End Memory が 0x05ff となっていることに起因するのではないでしょうか。 以下は私の想像ですが、上述した MPLAB IDE がエラーメッセージを吐き出したときの、リンカーのパラメータ指定をしている部分だけを再表示すると、次のようになっています。 Executing: "C:\Program Files (x86)\Microchip\MPASM Suite\mplink.exe" /p16F684 "FM_StereoRadioII.o" /u_DEBUG /z__MPLAB_BUILD=1 /z__MPLAB_DEBUG=1 /o"FM_StereoRadioII.cof" /M"FM_StereoRadioII.map" /W /xこれらのパラメータは、もちろん私が指定をしたものではありません。 初めに Project Wizard を使用したときに、MPLAB IDE が勝手に作り出したものです。 そして、これらのパラメータの意味は私にはよくわかりませんが、 もしかしたら、これらのパラメータを変更することで、リンクエラーの発生をなくすことができるのかもしれない。 フッと、そう思いました。 | プログラムのトップに戻る |
|
| ページトップ |
使用したプリント基板は、"秋月電子" の "片面ガラス・ユニバーサル基板 Bタイプ(95×72mm)めっき仕上げ(通販コード P-00518)" ですが、ケース加工図 で示したポリスチレンケース内に収納するためには、
下図に示すようにプリント基板の切断等の加工が必要です。 まず、横 ----- X 線の位置で切断をし、次に、縦 ----- Y1、Y2 線の2ヶ所の位置で切断をします。 そして次に、左横の位置に図のような ----- 線のコの字型になるようにくり抜きます。 この位置には基板取付用の BOX型Φ3.5ステレオジャックを取り付けたいのですが、使用したケースの左横の形状が特殊?で単純な垂直ではないことと、 ケース内側の底板と天板との空間サイズが小さいために、プリント基板の部品面に取り付けたのでは、BOX型ジャックのプラグ挿入口をケース外に取り出すことが不可能です。 そこで、サブ基板を使用してメイン基板のハンダ面側に位置するように取り付けます。 (BOX型ジャックの取り付け の項を参照) また、基板の右下の角には ----- 線の図のような形状で切り抜きます。 この切り抜いた後の空間には電源スイッチが位置します。 使用した電源スイッチは、手持ちにあったプッシュスイッチを採用しました。 しかし、このスイッチを採用したことは 完全に失敗( 後述 )でした。 このプッシュスイッチはオルタネイト型(1度ボタンを押すと ON 状態になり、ボタンから手を離しても、ON 状態を保持する)で、"ミヤマ" の製品ですが型番は分かりません。 最後に、基板の四隅にケースに取り付け用の穴Φ3.2 を4個開けます。 残りの小さな穴5個は、LCDモジュールの取り付け台のための木片固定用、サブ基板の固定用、およびアンテナ線の取り出し用で、すべてΦ2 を開けます。 |
切断、穴あけしたプリント基板 (部品面) |
同プリント基板 (ハンダ面) |
| プリント基板部品配置図 (FM_StereoRadioIIPC0.CE3) | ページトップ |
本機で使用する LCDモジュールは、基板との接続用の足ピンのピッチが 1.5 mm のため、通常の 2.54 mm ユニバーサル基板には、そのままでは搭載することができません。 そのために、専用のピッチ変換基板を使用する場合は良いのですが、
本機のように専用のピッチ変換基板を使用しない場合には、一工夫が必要です。 そこら辺りのことを "184. ストップウオッチ II" の "LCDのプリント基板への取り付け"
で詳細に述べていますので、そちらを参照してください。 また、FMラジオモジュールについても、外部との各接続用端子間のピッチが 2 mm のため、同様にそのままでは搭載することができません。 こちらについては、前作 "187. FMステレオラジオ" の "FMラジオ、デジタルアンプの各モジュールの加工" で、ピッチ変換の方法を詳細に述べていますので、そちらを参照してください。
BOX型ジャック用サブ基板については、後述の BOX型ジャックの取り付け を参照してください。 4個のタクトスイッチについては、毎回述べているように本機でも、キートップ長が通常のものより長いもので、 実測 9.5mm のものを使用しています。 左下の2個の青色の四角いものは以前に "秋月電子" で購入した、ニッセイ電機のメタライズドフィルムコンデンサで、立てて取り付けるとケース内部の空間に収まらないため、寝かせて取り付けました。 コネクタの 4P のピンヘッダ(オス)、および 2P のピンヘッダについては、"秋月電子" の背の低いタイプのロープロファイルピンヘッダ(全長:7.7 mm)を使用しました。 そして、相棒のコネクタ(メス)には、 空間の高さが小さくてピンソケットの使用ができないため、"TJC8ピンターミナル(メス)" を曲げて使用しました。 このターミナルについては、"182. ラーメン・タイマー II 2題" の "ケースへのプリント基板の取り付け" を参照してください。 |
| プリント基板パターン図 (部品面) (FM_StereoRadioIIPC.CE3) | ページトップ |
| プリント基板パターン図 (ハンダ面) (FM_StereoRadioIIPC1.CE3) | ページトップ |
配線用ワイヤーについて (余談) 上写真に写っている白色の配線用ワイヤーは、最近購入したもので、今回、本機で初めて使用をしてみました。 最近になって、私はアマゾンにおける中国製品の市場(しじょう)にハマっていて、安価だったので購入をしてみました。 少し前に、"185. TMS1121 デジタルタイマー・シミュレータ II" のページで書いたように、大昔、ラッピング用ワイヤーを "秋月電子" である量をまとめて購入をした (現在では "秋月電子" では入手ができない) のですが、それらのワイヤーがだんだんと底をつき始めたため、他での補充を何とかしなければならない、と常々思っていました。 そんな折、アマゾンでこのワイヤーを目にしたので、注文をしてみたのです。 ラッピングワイヤー AWG30 ということで、このサイズが私にとっては最も使い易いのです。 そして、実際に使ってみた私の使用感ですが、 今まで使い慣れていた "秋月電子" のものと比べると、芯線の太さが何となく少しばかり細いように感じられます。 また、被覆については逆に太く(厚く)感じられ、しかも、(表現がおかしいですが)芯線に対しての密着感がなく、 何となくブカブカしているように感じられました。 最も肝心なハンダ付けをしたときの感想ですが、やはり被覆は熱には弱いようで、鏝先を少々長めに(というほどでもないのですが)当てていると熱源に近いところでは、被覆が融けるように細長く縮むようになります。 そして、鏝先が誤って被覆に触れたりすると、黒く焦げてしまいます。 購入したものは白色の被覆なので、焦げ目がすごく目立って見苦しい状態になってしまいます。 もっとも、このワイヤーはラッピング用ということなので、ハンダ付けをするというのは、使用目的が異なっていて間違いなのかもしれません。 いずれにせよ、ハンダ付けをするという目的には向いていないようです。 後、書き忘れるところでしたが、このワイヤーの被覆はすごく柔らかく、被覆を剥くのにストリッパーはいりません。 親指と人差し指の爪先で簡単に剥くことが可能です。 以上から、本機のように配線量も少なくあまり密集しないような製作物の場合には、上述のように不満はありますが使って使えないことはない、という程度でしょうか。 ただし、鏝先の当てている時間には、常に細心の注意が必要です。 逆に、上述の "185. TMS1121 デジタルタイマー・シミュレータ II" のように配線量が多い製作物の場合には、ワイヤーの被覆が太い(厚い)ために嵩ばってしまい、配線材としては向いていないと思います。 というよりも、常に鏝先の当て時間にばかり気を配っていては、配線量が多いだけに疲れてしまいます。 このワイヤー、1巻で 305 メートルあって、私は1巻のつもりで発注をしたのですが、どういうわけか2巻も送られてきました。 これはサービスなのでしょうか? しかし、上述のような理由から、この先、出番は少なそうなワイヤーとなった今、600 メートルもあって如何にして消化をして行ったら良いのやら ・・・ |
プリント基板の加工と部品配置 の項でも述べたように、使用するケースの左横の形状が特殊?で単純な垂直ではないことと、ケース内側の底板と天板との空間サイズが小さいために、
BOX型ジャックをプリント基板の部品面に取り付けたのでは、プラグ挿入口をケース外に取り出すことが不可能です。 そこで次の写真に示すように、サブ基板を使用してメイン基板のハンダ面側に位置するように取り付けます。 まず、5 x 7 穴のプリント基板を用意してサブ基板としますが、ユニバーサル基板のために、そのままでは BOX型ジャックの端子が基板の穴には入りません。 そこで、次の左2枚の写真のように、BOX型ジャックを取り付けたときの、 その端子の位置に該当する穴の加工をします。 しかし、私はカッターナイフの先で行ったために、写真に示す通りで奇麗にはできませんでした。 いずれにしても、穴のハンダ面側のランドがつぶれてしまうので、このままではハンダがうまく付かなくなります。 そこで、つぶれたランドを補正するために、 * を付した写真( 拡大 )のように、隣の空きランドを使用して細線でハンダ面積が広がるようにします。 同様に、該当のすべてのランドを補正してハンダ付けをした結果が、 * 写真の右側の写真です。
こうして、BOX型ジャックを取り付けたサブ基板をハンダ面を上にして、メイン基板のコの字型にくり抜いた空間に、BOX型ジャックが嵌まるように載せた後、M2 のなべねじ2本で固定をします。 |
| ページトップ |
使用したケースは、100均(セリア)で購入した "トラベルケース L 1P (No.1432) 山田化学" というポリスチレンケースです。 上図では、ケースの形状を正確に描くことが難しいので、かなり単純化して全体像を表していますが、実際には、上下左右の各 "かど" などは、角ではなく丸みを帯びていたり、しかもテーパ状になっていたりして、 2次元の図では表現がしきれません。 特に、上図右側の(下面図)では実際に裏側から見ると、複雑?な形状をしていて表現をすることができません。
したがって、ケースの加工図として寸法を記入してありますが、これらの値は参考までに見ておいてください。 そこで実際にケース加工を行う場合には、(上面図)に示す4個のΦ3.5 タクトスイッチ用の穴位置は、ケースが透明で中が透けて見えるので、現物合わせで行った方が確実です。 その方法は、まず、(下面図)に示す4個の穴をあけて(これも現物合わせ)、プリント基板(BOX型ジャック用サブ基板を取り付けないで)をケース底板に仮に取り付けておいて、 上蓋を閉めると4個のキートップの位置が透けて見えるので、実際の穴位置が明確になります。 BOX型ジャックのプラグ挿入口の○穴は、BOX型ジャック用サブ基板を取り付けておいて、同様に現物合わせで開けました。 下の写真は、以上述べた現物合わせ法で穴開け加工をして、プリント基板を組み込んだ様子を、各側面から見たところです。 ケースの複雑?な形状を理解する上での参考にしてください。 なお、プリント基板の下側とケース底板との間に見える白いものは、M3 x 5 サイズのスペーサで、この 5 mm 長のものが本機の場合には丁度良い長さとなっています。
使用した電源スイッチについて 本機の電源スイッチとして、当初は、前作の "FMステレオラジオ" のように、トグルスイッチを使用してプリント基板上に取り付けるつもりでいました。 しかし、本機ではタクトスイッチの取り付けを、 前作とは縦横を逆にして 90 度異なって付けたために、トグルスイッチとは中心線がずれてしまうので、トグルスイッチの使用は断念をしたのです。 そこで、どんなスイッチにしようか、と手持ちの中でいろいろ検討をして、次の写真のようなプッシュスイッチに決めたのですが、これがまた大失敗でした。 それは、結果として、スイッチ本体の全長が少しばかり長過ぎたのが一番の問題で、使用したケースが上のケース加工図に示すように、厚さ 21 mm と薄い中に収納するのには少々無理があったようです。 そのために、スイッチのハンダ付け用の端子を根元から 90 度横に曲げ広げて、その分だけ全長を縮めたりもしました。 そして、スイッチ本体を薄いケース内から上方向に抜くために、ケースの上蓋の上面側に ( 2 ) のワッシャを挟んで取り付けてもまだ長いので、何か他にもう少し厚いワッシャ代わりになるようなものはないかと、いろいろなものを探し回りました。 ワッシャ代わりとするためには、内径が 11 mm ほどの穴が開いていなければなりません。 そして、何とか代理になりそうなものを見つけたのが ( 5 ) でした。 これは、( 4 ) と ( 5 ) がペアになっているもので、プラスチック系のブッシングのねじで、写真では分かりませんが厚さが 5 mm あります ( 2 mm ほどが丁度良いと思われる)。 そのため、今度は逆にケース内から上方向に抜き過ぎになりました。 結果として、ケース外観と内部の様子 の写真群に写っているように、この電源スイッチがケースに対して大き過ぎるのが強調されて、見苦しい存在となっています。 作者の私としては、大いに不満を感じているのですが、今のところ何ともならないのが現状です。 なお、使用したプッシュスイッチは上述もしましたが、オルタネイト型(1度ボタンを押すと ON 状態になり、ボタンから手を離しても、ON 状態を保持する)で、 "ミヤマ" の製品ですが型番までは分かりません。 |
| ケース加工図 (FM_StereoRadioIICS.CE3) | ページトップ |
(主要部品: IC, トランジスタ等) | (データシート) | ||
PICマイコン | .................... | PIC16F684 | |
トランジスタ | .................... | 2SA1015 | |
LCDモジュール | .................... | AQM0802A-RN-GBW |
| 部品表 | Excel ファイル (FM_StereoRadioII_parts.xls) | ページトップ |
59円チューナモジュールを使ったFMラジオ | .......... | http://www.asahi-net.or.jp/~rn8t-nkmr/family/pic/fr/index.html |
矢野零趣味のページ/Grove I2C FM Receiver を使う | .......... | http://yanozero.blog.fc2.com/blog-category-26.html |
PIC16F684 データシート | .......... | https://akizukidenshi.com/download/ds/microchip/PIC16F684.pdf |
RDA5807M データシート | .......... | http://www.datasheet.jp/pdf/808923/RDA5807M.html |
AQM0802A-RN-GBW データシート | .......... | https://akizukidenshi.com/download/ds/xiamen/AQM0802.pdf |
Ren He FMラジオモジュール RDA5807M RRD-102V2.0 ステレオ DC 2.7-3.6V 5個 収納ボックス付き |