2014年10月13日月曜日

周波数カウンタ 基準発振器の換装

以前作ったPIC+AVR周波数カウンタの基準発振器を、秋月電子で取り扱っているTCXOに載せ替えた。使用したTCXOはこれ。購入時のままでもBPM標準電波とゼロビートを取った信号を測定してみると、誤差は0.4ppm程度とスペック内に収まっていた。


この発振器は上部に空いた穴からドライバを突っ込んでトリマを回すことで発振周波数を微調整出来るが、外部制御端子が付いているのでそこに多回転型の可変抵抗器を付けて微調整するようにした。

載せ替えたTCXOと微調整用のVR。


調整に使う発振器はジャンク箱で見つけた40MHzの水晶を無調整発振回路で駆動し、4分周して10MHzを得ている。10MHzの水晶があればもっと簡単になるんだけどもw

調整用の発振器の回路図。74HC4020は実装しただけで今回は使っていない。
水晶と直列に入っているトリマコンデンサは、オシロスコープなどで周波数を確認しながら調整しやすい値を選ぶ。2個付けて粗調整と微調整を分けると使いやすい。

出力コネクタと調節用のドライバを突っ込む穴。
インピーダンス50Ωと書いているが、本当に50Ωになっているのかは分からないww

内部の様子。黄色のトリマコンデンサが粗調整用。

出力波形。適当に組んだLCフィルタのおかげでそこそこ正弦波っぽくなってる。

頑張って校正した様子。
標準電波との周波数差が小さくなるほど耳でビートを聞き分けるのが難しくなるので、
受信機のAF出力をオシロで観測すると良いかも。
このくらいのズレなら実用上問題ないw

2014/12/17追記
-10dBのアッテネータを入れてGigaStで観測した結果。
フィルタの段数増やしてもいいかもしれない。


2014/12/21追記
フィルタを2段に増やして測定。
どうやらスペアナ内部で発生するスプリアスの影響で正確に高調波が測定できていない模様。



~おわり~

ワンセグチューナー+アルミケース=(・ω<)

だいぶ前に購入してちょくちょく使ってたワンセグチューナー(DS-DT305BK)をアルミケースに入れた。このワンセグチューナーは格安ながらRealtek社のRTL2832チップが搭載されており、SDR受信機として使用できることで人気があると思われる(多分

んで、購入時のままでも十分使えるんだけど、RFコネクタ脱着の利便性向上と安定動作のためにケースに入れることにした。コネクタはRF入力がBNC、USB側がBメスとした。


プラケースから取り出したワンセグチューナー基板。 
ちょこっとリード線がついてるところがRF入力部分。C結合になってるっぽい。

ケース内部の様子。 USBコネクタの取り付け方法がなかなか酷いw
BNCのシールドとケースが絶縁されるタイプのを使っているが、ケースとシールドを接続したほうがノイズが少なくなったのでこのような配線になっている。

RF入力側

USB接続側

使用例その1

使用例その2 (アンテナはFA-S270C)

使用例その3(分配器とか入れていない適当感w)

ケースにいれてだいぶ使いやすくなったと思う。特にUSBケーブルの長さをイロイロ選べるのがとても便利。チューナが動作中はチップが若干発熱するので、基板の固定方法を工夫すれば放熱面でもかなり有利になりそう。
不満というか残念な点は、基板に元から搭載されている水晶発振器(?)の周波数ズレかなー。SDR#には誤差を補正できる機能があるが、温度変化によってちょいとズレてくるのが難点。普通に使ってるぶんには影響ないんだけどねw CWを受信しているときは目立つかも。

2014-12-07追記
BNCコネクタ非絶縁タイプに交換し、RF入力部に実装されているBPF(多分。またはインピーダンス変換用?)を外して50Ω終端AC結合に改造した。
FC0013の入力インピーダンス特性が不明なのでBNCコネクタ側から見たインピーダンスは広帯域では50Ωになっていないと思われる。
FM放送を受信してみたところ感度はほとんど変化なし。フロアノイズが気持ち下がった感じ。
他の周波数帯ではどうなるだろうか...




~おわり~





2014年9月23日火曜日

PIC16F88とATtiny2313を使った周波数カウンタの製作

PIC16F88とATtiny2313を使った周波数カウンタを作りました。
本当はPICだけで周波数カウンタを作りたかったんだけど、うまく行かなかったのでAVRでゲート時間を制御するようにしました。
PICにはパルスのカウントに専念させ、AVRはゲートの開閉を制御します。
ゲートには74HC08のANDを使用しました。
AVRでゲート時間を生成することで、基準発振器1周期の分解能でゲート時間を設定することを可能としています。また、ソフトウェアディレイとnop命令を組み合わせることで様々な周波数の基準発振器にも簡単に対応できます。
PIC16F88のタイマ1カウンタはPICの動作クロックと非同期に動作することができるので、プリスケーラを使用しなくても40MHz以上までカウントできます。

- とりあえず仕様 -
・AVR: ATtiny2313 (基準発振器を動作クロックとする)
・PIC: PIC16F88(内蔵8MHz発振器で動作)
・測定可能周波数: 0.01Hz ~ 48MHz(48MHz以上の発振器がないので未確認)
・ゲート時間: 0.1s, 1s, 10s, 100s
・測定用カウンタ: 32bit
・周波数確度: 基準発振器次第


回路図


回路はとてもシンプルです。PICがAVRに指示を出す際は、AVRをリセットしてからゲート時間を設定するための2本のラインを制御します。
入力アンプをつけていないのでTTLレベルでの入力となります。

以下写真など
基準クロックを測定して測定結果と基準クロックの周波数が一致するようにAVRのゲート時間を微調整する。

内蔵しているLTC1799モジュールの周波数を測定

48MHzの水晶発振器の周波数を測定


24.576MHzの水晶発振器の周波数を測定


今回使用したTOYOCOM製の8.000MHz水晶発振器ですが、温度補償もされておらず、また、周波数の微調整も出来ないので周波数カウンタの基準発振器として使うのはあまり好ましくありません。BPM標準電波とゼロビートをとった10MHz発振器の出力を測定してみると、9,999,951Hzと表示さたので、8MHzより若干高い周波数で発振していることになります。温度によっても変化します。
TCXOを入手したら換装しようと思います。
標準電波を使った校正方法と10MHz発振器については次回あたりに書きたいと思います。
今回作成したプロジェクトファイル一式です。
https://db.tt/csBQFcvd
開発環境はAtmel Studio 6.2とMPLAB X IDE v1.41です。

LCDの表示処理の部分がごちゃごちゃしてスマートじゃないですが一応動作しています()

~おわり~




2014年7月13日日曜日

気温、気圧つぶやきBOTの試作

台風がよく現れる季節なので気圧が気になる時がありますよね??
ってことで自室の気温と気圧をつぶやくBOT的なものを作ってみました。


機能
・LPS331APから毎秒気圧、気温を取得→UARTでPCに伝送→C#のアプリで受信→つぶやく
・指定間隔、正時に自動投稿
・リプライに反応(多分


センサが入った計測部は定番のフリスクケースに格納しました。
主な内容物
・PIC12F683
・LPS331AP
・2桁8文字 i2c液晶
・CR2032電池、ホルダ
・タクトスイッチ
・3.3Vレギュレータ
・6PINソケット

6PINソケットにはPICのプログラムを書き換える際に必要なピンと、シリアル出力、電源を出しています。ピンヘッダで直接PicKitに刺せるように配置は揃えています。
シリアル出力は1200bps パリティ無し ストップビット1bit データ8bit
外部5V電源と内部のCR2032の両方で動作し、スタンドアローンでも使用可能です。









~ 終わり ~



2014年7月1日火曜日

RIGOLのデジタルオシロ(DS1074Z)が届いた!

日本時間の6/26日夜にeBayで購入したRIGOL社のデジタルオシロスコープ DS1074Zが本日手元に来ました。EMS便(特快)で上海から送られてきたのですが、割と早いですね。2週間位かかるかなーと予想していたのですが...
eBayの支払いはいつものPayPalで行いました。送料込み¥65,050JPYでした。

DS1074Zの主なスペックは以下のような感じです。
・アナログ4ch 70MHz (改100MHz)
・サンプリングレート1GS/s(1ch) 500MS/s(2ch) 250MS/s(4ch)
・メモリ 12Mpts(オプションで24Mpts)
・波形更新速度 最大30,000wfms/s
・ディスプレイ解像度 800×480
・波形の輝度調整可能
・USBコネクタ(前面、背面)、LANコネクタ搭載

4ch 12Mpts、輝度階調表示対応でこの価格はとてもコスパ良い感じ。
以前購入したOWON社のオシロスコープよりは作りがしっかりしている。
本体を持ち比べてもRIGOL社のが中身が詰まっててずっしり重い。ボタン類は軽いプッシュで操作できる。ツマミ(ロータリエンコーダ)類がとても滑らか。いい匂いがする。などなど

とりあえず写真をいくつか撮ったので貼っていきます。

安定の黄色テープ

RIGOLのダンボール。少し凹んでるけど中は問題なし。
オシロは梱包材で浮かして入っており、箱とは直接触れていなかった。

 内容物。 電源ケーブルが中国仕様なので変換アダプタが付属していた。
プローブ4本、USBケーブル、CD-ROM、保証書(3年)、クイックリファレンスなど
保証書には本体のシリアル番号が書かれたシールが貼ってある。

クイックリファレンスとCD-ROM 中国語分かりませんw

起動画面 なお、起動後は言語設定が中国語になっている。
画面中の設定から各国の言語に切り替え可能

日本語も搭載されてた!

追加の有料オプション機能が試用できるみたい。
使い勝手などを試して気に入ったら購入を考えよう。
購入前に試せるってのはとてもありがたい。
試用期間短い......

プローブは安っぽいがRIGOL純正のRP2200

スペックなど

ファームウェアバージョン

セルフキャリブレーション後、プローブの位相補償をしてテスト波形を観測。
セルフキャリブレーションには15分くらい時間がかかった。
OWONのオシロは2分くらいで終わったので、とても長く感じたが、まじめに調節すればこのくらい掛かるのだろう(多分)
なお、セルフキャリブレーションを行う前には全てのプローブを取り外しておく。

別角度から
液晶の視野角も問題なし。
下の足を立てると斜めに置くことも出来る。

OWONのオシロ(SDS7102V)とツーショット。
画面はOWONのが大きい。

波形の輝度を最小にしたらこんな感じになる。立ち上がりの線が見えなくなっている。
垂直軸調整ツマミや、時間軸調整ツマミはプッシュすると原点に波形を移動できるので便利。

PC上でWaveGeneというソフトを使って発生させたAM変調波を観測した様子。
キャリア周波数10kHz 変調周波数40Hz。
階調表示の無いOWONのオシロと比較すると一目瞭然。
解像度はそこまで高くないが、波形の頻度が輝度として観測できるのでとても分りやすい。


とりあえず以上のような感じです。
ざっとメニュー類をOWONオシロと比較しても多機能な事がわかります。
操作に慣れてきたら画像を追加するかもしれません。
なおこのオシロ、いろいろと改造(?)出来るみたいで海外のフォーラムで話題になっています。
勿論保証外ですが(そもそも正規ルートで購入していないので保証があるのかすら怪しい....



2014年6月14日土曜日

Puppy Linuxでsamba鯖を立てる時のメモ

Puppy LinuxでSamba鯖を構築するときに忘れないようにメモっておく

使用したPCのスペック
・型番: PC-MT1-H1 (SHARP Mebius)
・CPU: Intel PentiumⅢ 500MHz
・RAM: 128MB
・HDD: 20GB

使用したOS
・パピーリナックス 431JP2012

~基本的な流れ~
0. Puppy Linuxをインストール後、ネットワークウィザードよりLANの設定を行う。IPアドレスは固定しておく。
1. Puppy LinuxにSambaは同梱されていないので"Puppyパッケージマネージャ"から"samba"で検索してインストールする。
2. smb.confの設定。ファイルは/etc/opt/sambaにある。
3. 設定完了後、端末から"/opt/samba/sbin/smbd start" "/opt/samba/sbin/nmbd start"をタイプし、デーモンを起動させる。これでネットワーク上に鯖機のアイコンが見えるようになると思う。

OSを再起動するたびにコマンドを入力するのが面倒なので、コマンド類を記述したファイルに実行権限を与えてホームディレクトリのStartupフォルダに入れておく。
これで次回起動時から自動的にデーモンが起動するようになる。

ファイアウォールを設定する際はSambaで使用するポートを塞がないように注意する。
"nmap localhost"で使用しているポートを調べることができる。 ※nmapコマンドを使用するにはnmapのインストールが必要。

設定後のスクショなど

ネットワークドライブとして追加

ポート開放設定 5900番はVNC用


クライアント側からファイルをアップロード出来ても、消せないという問題が発生して困っていたが、以下の項目を追記することで解決した。
[global]
  acl check permissions = no

あと、同じ鯖内の共有フォルダに同時にセクションを張れない模様? guestアカウントでログイン中に別の共有フォルダにログインしようとするとエラーが出る。

2014/06/24追記
再ログイン後にネットワークドライブの再接続に失敗するときは、「コントロールパネル」→「資格情報マネージャー」よりWindows 資格情報を追加することで解決した。
現状設定ファイルスクショ



~ おわり ~


2014年6月1日日曜日

ATxmega32D4 タイマメモ

秋月電子で販売されてるATxmega32D4のタイマーの使い方メモ

xmega32D4には4つの16bitタイマーが搭載されている。
うち3つは4つの比較チャネルを持っていて、残りの1つは2つの比較チャネルを持っている。
TCxx.CCA, TCxx.CCB, TCxx.CCC, TCxx.CCDで比較対象となる値を設定する。
これらを使って4通りの周波数で14本のPWMを出力できる。
xmegaは入出力ポートがとても高機能になっていて、ピン再割当機能を使ってPWM出力をOR変調できたり、ピンn形態設定レジスタ(PORTx.PINnCTRL)を使ってIOピンの出力形態をデフォルトのコンプリメンタリからワイヤードOR、ANDに切り替えれたりもする。これは2和音矩形波出力を行う時に便利に使えそう(๑╹ڡ╹๑)

以下ソースコード
/*
 * ATxmega32D4_test.c
 *
 * Created: 2013/10/13 14:06:52
 *  Author: kingyo
 *
 * ライタの接続
 * Vcc:   Vcc
 * GND:   GND
 * MISO:  PDI_DATA(34pin)
 * RESET: PDI_CLK(35pin)
 *
 */ 

#include <avr/io.h>
#define F_CPU 32000000UL // 32 MHz
#include <util/delay.h>

int main(void)
{
 /* IOポート設定 */
 PORTC.DIR = 0xff;       // ポートCを出力に
 PORTD.DIR = 0xff;       // ポートDを出力に
 PORTE.DIR = 0x0f;       // ポートEを出力に


 /* クロック設定 内蔵CR32MHz */
 OSC.CTRL |= OSC_RC32MEN_bm;        // 32MHz内部発振を許可
 while(!(OSC.STATUS & 0b00000010)); // 安定化待ち
 CPU_CCP = CCP_IOREG_gc;            // 設定変更許可
 CLK.CTRL = CLK_SCLKSEL_RC32M_gc;   // 32MHzに設定
 //DFLLRC32M.CALA = 0xff;           // DFLL校正レジスタ弄り
 //DFLLRC32M.CALB = 0xff;
 
 
 /* 16bitタイマC0 (CCA, CCB, CCC, CCDの4本) */
 TCC0.PER = 10000;                  // カウンタ上限値
 TCC0.CCA = 5000;                   // (出力はPORTC.0)
 TCC0.CTRLB = 0b00010011;           // CCAEN, 単一傾斜PWM
 TCC0.CTRLA = 0b00000001;           // 前置分周器: clkPER
 
 /* 16bitタイマC1 (CCA, CCBの2本) */
 TCC1.PER = 500;                    // カウンタ上限値
 TCC1.CCA = 200;                    // (出力はPORTC.4)
 TCC1.CTRLB = 0b00010011;           // CCAEN, 単一傾斜PWM  
 TCC1.CTRLA = 0b00000001;           // 前置分周器: clkPER
 
 /* 16bitタイマD0 (CCA, CCB, CCC, CCDの4本) */
 TCD0.PER = 500;                    // カウンタ上限値
 TCD0.CCA = 200;                    // (出力はPORTD.0)
 TCD0.CTRLB = 0b00010011;           // CCAEN, 単一傾斜PWM  
 TCD0.CTRLA = 0b00000001;           // 前置分周器: clkPER
 
 /* 16bitタイマE0 (CCA, CCB, CCC, CCDの4本) */
 TCE0.PER = 10001;                  // カウンタ上限値
 TCE0.CCA = 5000;                   // (出力はPORTE.0)
 TCE0.CTRLB = 0b00010011;           // CCAEN, 単一傾斜PWM  
 TCE0.CTRLA = 0b00000001;           // 前置分周器: clkPER

}
今回はじめてソースコードをハイライト表示するSyntaxHighlighterってのを使ってみた。
割と良さげ。
~ おわり ~