« 2013年5月 | トップページ | 2013年7月 »

2013年6月26日 (水)

DDSであそびましょ! その5

Imgp1553s
USBでのパソコンとの通信方法も解ったし、
PIC内蔵のEEPROMの読み書きも解ったので、
動作条件をEEPROMに書き込めるようにしました。
これで、、、まさしく万能VFOの完成なのです。 ?

右下はEEPROMの内容で、受信周波数のデジタル表示、
「なんでもトランシーブ」などと共通フォーマットにしました。
+or−は表示用補正周波数を+するか−の指定。
NorRは周波数の変化を順方向にするか逆にするかの指定。
解説すると、
発振周波数の初期値5Mhz、
表示周波数は補正2Mhzを+して、変化は順方向。

左下はEEPROMに何も書き込まれていないときの表示内容で、
初期値10Mhzとしました。

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

2013年6月25日 (火)

PICに内蔵しているEEPROMの読み書き

Tera20130625_01参考書にしている本がわざわざ外付けのEEPROMを使っているので、
ちょっと、やな予感がありましたけど、問題ありませんでした。
I2Cの使い方を紹介したかった?ようです。

おまけ その2 が動作確認したプログラムで、
Read_b_eep()がEEPROMの読み込みルーチン
Write_b_eep()がEEPROMの書き込みルーチン
Busy_eep ()は書き込み完了待ちルーチン
一応PICライターでEEPROMの内容も確認しました(写真参照)。

ここまでくると、今回の18F2550を使った、
周波数カウンター、DDSの発振器、「なんでもトランシーブ」
の完成型までの技術的問題はクリヤーですね! ?

おまけ その1
 使用したC言語のバージョンは
 Microchip Solutions v2011-06-02版です。
 使用した参考書は
 「PICで楽しむUSB機器、自作のすすめ」

おまけ その2
USB通信のテストプログラムに追加した試験プログラム抜粋
以下、書き込みテストをしたプログラムの抜粋

      case '0': // OK応答
          if(mUSBUSARTIsTxTrfReady())
              putrsUSBUSART("0 OK \n");
              break;      
     case '1': // EEPROMの読み取り&PCへ送信
         for(i=0; i<8; i++)
         {
             output_buffer[i] = (char)Read_b_eep((unsigned int)i+0);
          }
         if(mUSBUSARTIsTxTrfReady())
               mUSBUSARTTxRam(output_buffer, 8);
              break;      
       case '2': // 周波数設定 発信周波数
           for(i=0; i<8; i++)
           {
               Write_b_eep((unsigned int)i+0,(unsigned char)input_buffer[i+1]);
               Busy_eep ();
           }
           for(i=0; i<8; i++)
           {
                S_Freq = S_Freq * 10 + (input_buffer[i+1] - 0x30);
           }
           if(mUSBUSARTIsTxTrfReady())
                  putrsUSBUSART("2 OK \n");
            break;

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

2013年6月24日 (月)

USB対応PICの簡易インタフェース

Tera20130624_01
せっかくUSBインタフェースを持っているPICなので、
パソコンからEEPROMの内容確認、もしくは編集が出来ると良いかな?
ということなのだけど、パソコン側のプログラムが面倒。
というか、プログラム環境がないので、どうしよう???
で、ターミナルソフトが使えないかと、ためしてみました。
WIN2000に付属するハイパーターミナルで確認すると、
1文字の送信はOKなのですが、複数バイトの送信をファイル送信で送るとうまく行きません。
で、ためしにフリーソフトのテラタームを使ってみたら、、、
うまくいきました。
USBの動作確認とか、EEPROMの書き込み等には十分に使えそう!

ということで、あとはEEPROMの書き込みなのだけど、、、、
PICメーカーさんのフリーのCコンパイラーにはツールが用意されている、
だけど、、、参考書の使用例はなぜか外付けのEEPROMを使ってます。
ちょっと、やな予感。

おまけ、上記テスト時の概要とPIC側プログラム抜粋
0  OK・・・ターミナルより0をキー入力した時のPICからのデータ
2  OK・・・ファイル転送したときのPICからのデータ
                     ファイルの具体的な内容・・・207000000
07000khz 00・・・ターミナルより1をキー入力した時のPICからのデータ

以下PIC側プログラム抜粋
     USBCheckBusStatus();

     if(UCFGbits.UTEYE!=1) 
         USBDriverService();
 CDCTxService(); 
 if((usb_device_state >= CONFIGURED_STATE)&&(UCONbits.SUSPND==0))
 {
     if(getsUSBUSART(input_buffer,64)) // データ受信あり?
     {
      switch(input_buffer[0]) // command チェック
      {
      case '0': // 0 OK
          if(mUSBUSARTIsTxTrfReady())
              putrsUSBUSART("0 OK \n");
              break;      
      case '1': // 表示周波数を返す
          if(mUSBUSARTIsTxTrfReady())
              mUSBUSARTTxRam(Disp_Freq, 16);
              break;      
      case '2': // 周波数設定 発信周波数セット
           S_Freq = 0;
          for(i=0; i<8; i++)
          {
                 S_Freq = S_Freq * 10 + (input_buffer[i+1] - 0x30);
           }
           if(mUSBUSARTIsTxTrfReady())
               putrsUSBUSART("2 OK \n");
           break;
       case '3': // 周波数設定 表示補正周波数セット
           H_Freq = 0;
           for(i=0; i<8; i++)
           {
               H_Freq = H_Freq *10 + (input_buffer[i+1]-0x30);
           }
           if(mUSBUSARTIsTxTrfReady())
              putrsUSBUSART("3 OK \n");
           break;   
      default: break;
      }
    }
}

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

2013年6月22日 (土)

なんでもトランシーブぷろじぇくと   その3

5d3_0681s
RITとかClarifier機能の代わりに、
送信周波数のロック機能を付けることにしました。
黄色いボタンを押すと、その時の受信周波数を送信周波数としてロック。
赤いボタンを押すとロック解除で受信周波数=送信周波数。

あとは、、、
使用しているPICはUSB接続ができて、EEPROMもあるので、装置に合わせた動作条件を設定できるようにすれば、機能的には完成ですかね、、、
さて、、、
割り込みでトラブりそうな予感だするので、謙虚に?
VFO、周波数カウンター、なんでもトランシーブの順で対応かな?

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

2013年6月21日 (金)

なんでもトランシーブぷろじぇくと   その2

5d3_0669s
今日は基本機能の確認。
左の発振器から9.999500Khzの信号を発振して、
なんでもトランシーブは10.000000Mhzと解釈して、
その周波数に7.000000Mhzを足して出力、
右の周波数カウンターで出力を17.000350Mhzと表示。
10Mあたり500hzの演算誤差がでているけど、
その他問題無し!

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

2013年6月20日 (木)

なんでもトランシーブぷろじぇくと   その1

Imgp1541s
JR-60とTX-20Sをトランシーブ操作ができるようにしましょう!
が元々の始まりなのですが、、、
これができれば、
どんな組み合わせでもトランシーブ操作が可能な汎用装置が作れそう!
40年前なら、ドラえもんの道具みたいなので、
「なんでもトランシーブ」なのです。
具体的には周波数カウンターとDDSのVFOを合体させただけ。

とりあえず、
サンプリングした周波数と同一の周波数の出力を確認。

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

2013年6月12日 (水)

DDSであそびましょ! その4

5d3_0645s

KN-7QA 用VFOとして設定して、ケースにいれてみました。
ダイヤルのステップを1khz単位と20h単位の2種類にして、
550円もしたツマミにしたのですが、操作性がイマイチ。
マンマシンインタフェースは難しいですね。

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

2013年6月 7日 (金)

DDSであそびましょ! その3

5d3_0642s
あっさりとプログラムも動きました。
これにはカラクリがあって、ほとんど自分では作っていない。
前回作った周波数カウンターとほぼ同じ構成、
「PICで楽しむUSB機器・自作のすすめ」にあった、
「USB接続低周波発振器の作成」がベース、
AD9834の代わりにAD9850になっただけ、なので、
プログラムもDDSの出力ルーチンを変更しただけなのです。
でも、ソース付で、ここまで動けば、
あとはもう、自由自在ですよね! ?

変更したのがSetupDDS()とそのサブルーチンSIrialOut()
これだけ直せばとりあえず動きます。

//// DDSシリアル出力関数
void SetupDDS(unsigned long freqdata, char flag) {
 float SetFreq;
 unsigned long temp;
 unsigned char w[5];
 char i;
 ///設定周波数から設定パラメータ計算
 ///クロック 128MHzで計算
 SetFreq = 34.359738 * (unsigned long)freqdata; // 設定値
 temp = (unsigned long)SetFreq; // 整数に変換
 w[0] = 0x00; // COMMAND
 w[1] = (temp >> 24) & 0xff; // Freq data 31-24bit
 w[2] = (temp >> 16) & 0xff; // Freq data 23-16bit
 w[3] = (temp >> 8)  & 0xff; // Freq data 15-8bit
 w[4] =  temp  & 0xff; // Freq data 7-0bit
 /// DDSへ下位から送信 ///
 for(i=4; i>=0; i--)  {
 SerialOut(w[i]); //  1 char out
 }
 dds_fsync = 1; // FSYNC High
    dds_fsync = 0; // FSYNC low
}

void SerialOut(unsigned char data) {
 unsigned char i;
 unsigned char mask;
 mask = 0x01;

 for(i=0; i<8; i++) { // 1charを下位bitから送信
   if(data & mask) 
     dds_sdat = 1; 
 else
     dds_sdat = 0;
 dds_sclk = 1; // SCK High
 dds_sclk = 0; // SCK low
 mask = mask << 1; // next bit
 }
}

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

2013年6月 6日 (木)

DDSであそびましょ! その2

Imgp1507s
ちょっと寄り道していて、ハードの試作が遅れていましたが、
なんとか完成?
といっても、PICのユニットとDDSのユニットを使用、
なので、無造作に線をつなぐだけなんですけどね。
一応、前回の周波数カウンターのソフトが動くことを確認。
さて、、これからプログラムの作成をはじめるのだけど、
動作モードの設定どうしましょうかね、、、
自分で使うだけなら、プログラムの書き換えが1番簡単、
でもね、、、
あっ、、、周波数カウンターにDDS付ければ、
JR-60とTX20Sをトランシーブさせることもできるんだ、、、
と、遊び方無限にありそう、、、?

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

2013年6月 4日 (火)

トリオのTX-20S  その2

Imgp1505s

JR-500との接続ケーブルを作成して再調整。
VFOも2SC460だったので、オリジナルの2SC185に変更、
これで決まり!
と思ったのだけど、あいかわらずドライブ不足。
で、力技、ヒータの6.3Vから電源をいただいて、
2SC1815でVFOの信号を増幅、なんとか実用範囲!
さすがPSN方式!、モニターの範囲ではとても良い音質です。

ってことで、DDSで遊ばないといけないので、
ちょこっとお休みして暖房機代わりに使える季節になったら、
電源周りから見直ししましょ!

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

« 2013年5月 | トップページ | 2013年7月 »