2012/01/28

アッテネータの作成

いろいろプロジェクトが山積していますが、まず最初に基本中の基本?として、アッテネータを自作してみることにしました。

Π型のアッテネータです。抵抗は秋月のチップ抵抗アッテネータ 10dB 0.1Wを使いました(というか、そのまんま...)。

生基板をテープとマジックでマスキングして

エッチングしたところです。

両端にBNCを付けてケースに組み込んで出来上がり。

特性はこんな感じです。まあ500MHzまでは何とか、という感じでしょうか。

2012/01/27

ホーザンのP-706(圧着工具)

基板とスピーカーやスイッチ、電源をつなぐ時には、後で取り外しができるようにコネクタとレセプタクルを組み合わせて接続したいのですが、このコネクタに差し込むコンタクトピンが中々うまく処理できませんでした。コンタクトに線材を噛ませてかしめようとすると、ぐにゃり、とへしゃげてしまうのですね。不器用ですから...。

というわけで、圧着工具というのを購入してみました。ホーザンのP-706というやつです。他にもエンジニアのPA-09というのがあるようです。
一見ワイヤストリッパーのような...。
これを使って圧着したものが、これです。電池と基板を接続するための配線です。
コネクタはB2B-EH、レセプタクルがEHR-2、コンタクトがSEH-001T-P0.6というやつです。
どうってことないじゃん、と思うかもしれませんが、これまでの失敗作に比べるとこれでも断然の出来なのです。

コンタクトピン圧着の勧め
P-706のページ


2012/01/23

4アマの従事者免許

郵便事故じゃないかと半分思い始めたところで、4アマの従事者免許が到着~。
でも、まだ無線機はなし...。

2012/01/21

PIC24FJ64GA002の顛末

PIC24FJ64GA002のスペックの良いところとしては、
  • プログラムメモリが64KBある
  • 内蔵オシレータ+PLLx4で、外付け部品なしで32MHzクロックになる。
  • 命令クロックは、(PICおなじみの)Fosc/4ではなく、Fosc/2なので16MIPS。
  • ペリフェラルポートを、ある程度自由に配置(リマップ)することができる。
今回、これを選んだ一番のポイントはプログラムメモリが64KBあることで、要はここに音声データを格納しようとしたわけです。
スペック的には、こんだけ良かったらもうAVRとか要らないよね、PICで充分じゃん、的な感じがするわけですが、そこはそれ、Microchipはいろんなネタを用意してくれてました。そこにシビれる憧れるぅ!
  • エラッタが多い。これは今回買ったリビジョンでは改善されてますが、まあプロセッサが太るとしょうがありませんね。趣味でプロセッサのエラッタ調べるなんてちょっとどうなんだろう、という感じですが。
  • MCLRは、I/Oピンになりません(MCLRENがコンフィグにありません)。
    これはまあ「あれそうなんだ、プルアップするか」で済みますが。
  • プログラムメモリにおける配列サイズの上限は32KB。
    プログラムメモリにデータを置くにはconst宣言を付けてやればいいのですが、上位32KBをバンク切り替えして見せる関係上、ひとつの配列サイズは32KB以下になります。これは16ビットアーキテクチャですから当然ですね。
  • プログラムメモリは、普通に使うと44KB程に見える(注:頑張れば64KB使えます)。
    一番びっくりしたのがこれで、実はPIC24Fの命令は、1命令 3バイトなのです。マニュアルをよーく読むと「64KB、22,016命令」と書かれています。64KB/3で22016命令ということですね。
  • そしてこいつが3バイトづつ並んでいるか、というとそうじゃなくて、
    • 命令アドレッシングは2バイト/命令
      つまり、「0番地に命令0、2番地に命令1、4番地に命令2、、、」という風に綺麗にアドレッシングされます。PCは1命令で2進みます。
    • しかし、命令は3バイト読まないといけない
      じゃあどうするかというと、命令Xには(アドレッシング的に普通に読み出せる)バイト2Xとバイト2X+1の2バイト、そして隠れた1バイトがある。という作りになっています。
      これを変態と言わずして何と言おう。
  • この隠れた1バイトは、TBLRDHという命令で読み出さないといけないらしいです。Cからどうやって書けば(初期化すれば)良いのかは、良くわかりません...。

2012/01/20

PIC24FJ64GA002にスピーカーを繋げて音を出す

白色LEDに続いて、PICで音を出すことを試みます。

今回はじめてPIC24FJ64GA002を使ってみました。いわゆる16bitのPICです。
こいつの顛末はまた色々とあるのですが、まずは音を出す話の方から。

以前、YMZ294によるFM音源で音を出してましたが、今度はPCMです。回路としてはこちらの方が簡単で、直接PICのPWMで制御しています。最初はDAコンバータとかがないダメなのでは、とか思って色々物色していましたが、音を出すだけならPWMで充分でした。

こんな感じで、ハードウェア的にはしごく単純です。
  1. PICの構成・コンフィグ
    特に何の変哲もありません。
    オシレータはFRCPLL(内蔵オシレータ+PLL)モードにして使います。
    このモードだと、内蔵オシレータだけでFosc=32MHz/16MIPSが出せるので中々偉いです。
    一つびっくりするのが、このPICはMCLRをディセーブルする(I/Oピンにする)ことができません。ちょっとだけ悩みました。
  2. PWMの構成
    PWMは、タイマ1とタイマ2の組み合わせにしました。
    タイマ1は8KHzで回し、Output Compareモジュールとタイマ2でPWMを構成します。
  3. PCMデータの扱い
    このPIC(PIC24FJ64GA002)は、64KBものプログラムメモリを持っています。PIC16Fだと rom 修飾子で指定していたのですが、C30だとconst指定しておくと、勝手にプログラムメモリに入れてくれます。楽チンですね。
  4. ピンのリマッピング
    PIC24Fシリーズの特徴となる機能として、動的にペリフェラルのピン位置を変えることができる、というものがあります(割り当て先のピンには制約がありますが)。
    マニュアル中のピン配置のページに "RPn"と記されているのが割り当て可能なピンです。
    今回は、RP4(ピン11)にPWM出力(OC2=アウトプット番号19番)をアサインしています。あと動作確認用LEDをRB5に。

    ただ、割り当て時にIOUNLOCK/IOLOCKという操作をしないといけないのがちょっと面倒ですね。不用意にピンが変わっちゃったら困るので、ロックするのはしょうがないのですが。
こちらは本体側ソースコード。
 #include "p24FJ64GA002.h"  
 #include <libpic30.h>  
   
 #define Clock  32000000  
   
 _CONFIG1( JTAGEN_OFF &  
      GCP_OFF &   
      BKBUG_OFF &  
      COE_OFF &  
      GWRP_OFF &   
      ICS_PGx1&   
      FWDTEN_OFF )  
   
 _CONFIG2( IESO_OFF &   
      FNOSC_FRCPLL &   
      FCKSM_CSDCMD &  
      OSCIOFNC_OFF &  
      IOL1WAY_OFF &   
      I2C1SEL_PRI &   
      POSCMOD_NONE)  
   
 void delay_ms(unsigned int N)  
 {  
     __delay32(Clock/4000*N);  
 }      
   
 #include "samples.c"  
 #define LEN sizeof(samples)  
   
 void play(int pos)  
 {  
  unsigned char s;  
   
  s=samples[pos];  
  OC2RS=s;  
 }  
   
 // 8KHz tick  
 int current=0;  
 void tick(void)  
 {  
  if (IFS0bits.T1IF == 1) {  
   IFS0bits.T1IF = 0;  
  }  
   
  play(current);  
   
  current = (current+1)%LEN;  
 }  
   
 void _ISR _T1Interrupt(void)  
 {  
  tick();  
 }  
   
 // Timer1 settings (8KHz clock)  
 // 1tick = 1/8000 = 125us  
 // Fosc = 32MHz for 24F internal osc.  
 // 1Fosc_2 = 16MHz = 62.5ns  
 // 1tick = 2000  
   
 // Prescaler none  
 // start tick = 0x10000-2000 = 0xF830  
   
 void init(void)  
 {  
   // Default of RC is 4MHz by CLKDIV!  
   // Make it 8MHz.  
   CLKDIVbits.RCDIV = 0;  
   
   // Setup OC2 to RP4 (pin 11)  
   // Unlock IOLOCK  
   
   asm volatile ( "MOV #OSCCON, w1 \n"  
           "MOV #0x46, w2 \n"  
           "MOV #0x57, w3 \n"  
           "MOV.b w2, [w1] \n"  
           "MOV.b w3, [w1] \n"  
           "BCLR OSCCON,#6");  
   //  __builtin_write_OSCCONL(0);  
   
   RPOR2bits.RP4R = 19;      // OC2  
   
   // __builtin_write_OSCCONL(0x40);  
     
   // Re-lock IOLOCK  
   asm volatile ( "MOV #OSCCON, w1 \n"  
           "MOV #0x46, w2 \n"  
           "MOV #0x57, w3 \n"  
           "MOV.b w2, [w1] \n"  
           "MOV.b w3, [w1] \n"  
           "BSET OSCCON, #6" );  
   
   // PIC24FJ64GA002 does not have TIMER0!!!  
   PR1 = 2000;  
   T1CONbits.TSIDL = 0;      // Continue on idle  
   T1CONbits.TGATE = 0;      // No gate accumulation mode  
   T1CONbits.TCKPS = 0;      // Do not use prescaler  
   T1CONbits.TSYNC = 0;      // DC  
   T1CONbits.TCS = 0;        // Internal clock (Fosc/2)  
   
   IEC0bits.T1IE = 1;        // Interrupt Enabled  
   
   // PWM settings  
   // Use PWM2/RB3  
   PR2 = 0xFF;            // 8bit resolution  
   OC2RS = 0x80;  
   
   T2CONbits.TSIDL = 0;  
   T2CONbits.TGATE = 0;  
   T2CONbits.TCKPS = 0;  
   T2CONbits.TCS = 0;        // Internal Clock  
   IEC0bits.T2IE = 0;        // No Interrupt  
   
   OC2CONbits.OCM=6;        // PWM, Fault pin, OFCx, disabled  
   PMD2bits.OC2MD = 0;  
     
   T2CONbits.TON = 1;        // On  
   T1CONbits.TON = 1;        // On  
   
 }//end UserInit  
   
 int main (void)  
 {  
  init();  
   
  TRISB = 0;     // configure PORTB for output  
  while(1) {  
   LATBbits.LATB5 ^= 1;  // LED blinker  
   delay_ms(1000);  
  } 
  return 0;  
 }  
こちらはサンプリングデータを格納するファイルです。8bit/8KHz。
 // file len 3946  
 // data section @ 44  
 const unsigned char samples[] = {  
 0x7e,  
 0x7d,  
 0x7b,  
 0x7e,  
 0x80,  
 0x83,  
 0x82,  
 0x7e,  
 ....  
 0x34,  
 0x2e,  
 0x36,  
 0x30,  
 0x00,  
 };  
 

2012/01/11

プラレールにLED(HT7550で昇圧)

ちょっと趣向を変えたエントリですが、、、秋月で仕入れたHT7750A白色LEDの点灯回路を作っていたのは、実はこのためでした。

非常にtypicalな改造で恐縮ですが
内部構造。
ちょっと古いタイプのプラレールです。

子供は工作精度が悪いとか言わずに大喜びしてくれるので、作りがいがあります。

2012/01/08

オシロスコープPDS-5022Sの液晶の修理

先日、液晶がしわしわになってしまったマイオシロPDS-5022Sですが、諦めて別のを買い直すしかないかなあ、色々散財しているのに困ったなあ、と思っていました。しかし諦めきれずに、しこしことgoogle様にお伺いを立てていたところ、

「PDS-5022SのEDMGRB8KHFという液晶は、NTTが以前に出していたプチウェブというネット端末で使われている」

という耳寄り情報が出てきました(そのままの型番だと出てこないのですが、枝番抜きのEDMGRB8で検索すると2ちゃんねるのスレッドが出てきます)。何事も執念深く調べてみる事であるよ、と、早速某所でプチウェブない?と色々と聞いてみたところ、何とか入手することが出来ました。

このプチウェブという端末は2000年頃にLモードの端末として発売されたようです。

こんな感じの端末です
とりあえず開梱
液晶は大丈夫そうです
裏側のネジを全部外してやると、液晶の下部の部材が
取り外せます。
キーボードを外すとこんな感じに
液晶だけを単離
液晶のフレームを抜去。何だかそれらしいのが出て来ました
全部とっぱずして、裸の液晶に
当たりです。これぞ探していたものです。

というわけで、捨て値で拾った液晶が当たりでラッキーでした。ありがとう2ちゃんねる。
早速、PDS-5022Sの液晶と交換してみます。おそるおそる電源を投入すると…


無事に起動しました。綺麗な画面が戻って来ました。


というわけで、当面はオシロの買い換えの必要はなくなりました。

アイテック SR-7 を購入

先日、アマチュア無線の免許を取りましたけれども、当然のことながら無線機はまだ持っていません。素人ですから、最初は当然どこぞの製品を購入するつもりでいたのですが、、、ちょっと見てみると、とにかく高い!
普通に買うと(FT-817NDでも)7~8万円コースになってしまいます。これではパパの趣味の予算を全部使いきっても足りません :-)

じゃあヤフオクで中古、となりますけどこれも結構競争が激しくて、だいたいFT-817NDで5万円、IC-706Sあたりでも3~4万円ですから、いきなりポンと入札するのも気が引けます。

素人ですから、最初は「半年ROMる」つもりで、とりあえず受信機だけでも作ってみることにしてキットを探します。アナログ回路はほぼ初めてなので、正直、荷が重い感じもしますが、何とか頑張って見ることにします。自己訓練 :-)

有力そうなのは

  • 貴田電子設計さんのKEM-RX7(7MHz SSB/CW スーパーヘテロダイン受信機キット)
  • アイテックさんのSR-7
いずれも受信機のみで、KEM-RX7はKEM-TX7-SSBと組み合わせるとトランシーバーになるという拡張性(?)はよさそうではありますが、外付けVFOも買うと2万円コースになってしまいますし、ヤフオクとオーダ的にあまり変わりません(あと、素人がいきなりTSSに保証認定申請、というのも、ちょっと無理がありそうなので送信機をキットという線はまずはないかなあという気もします)。

ということで、Webでも組み立て易いと評判が良くケースも付いていてそれだけで完結しそうなSR-7を購入してみました(CYTECさんやキャリブレーションさんで通販しても良かったのですが、たまたま秋葉原を通ったので、東京科学無線電機商会さんの店頭で購入して見ました。在庫があってラッキーでした)。

というわけで、まずはアンボクシング。

こんな箱に入っていました
(というか、店頭に中身が陳列してあったのを、
この元箱に入れて出してもらいました)。
箱を開けると、説明書とケースが出てきます。
綺麗なケースがあるのは結構うれしいですね。大体、工作の最後で悩むのがケースなので…。部品とかはこのケースの中に収められています。

部品のパックとPCB。
組み立て手順はステップバイステップで少しずつ組み立てては確認・調整するという趣向になっていて、とても親切です。部品もステップごとに小分けされているという芸細ぶりです。

ついでに買ったプリアンプ。ここまでたどり着くのは
いつになるのでしょう :-)
説明書はとても良くできていて、分かりやすいです。ただ確認にはそれなりに測定器はあった方がよさそうですし(オシロとか。なくてもできるようにはなっていますが)、調整する箇所も色々あるようで、100%完全無欠でデジタルオンリーだったtaipapaには、やや荷が重いかもしれません(いきなり弱気)。

とりあえず、開梱したところまでで、まだ手を付けられていませんが、近いうちに。