TASCAM DR-2d のファームウエア更新

TASCAM の Webサイトに、リニア PCM レコーダ DR-2d のファームウェア更新のお知らせがあったので、適用してみました。主な修正は

■ Ver.1.03リリース!
・ファイル名が日付の場合、トラックインクリメントすると正常な日付がファイル名に付かない場合があるのを修正。
・MP3へのマークが99個登録できないのを修正

だそうです。

USB に接続して、utilityフォルダにファームウェアのファイルを放り込む。

MENU + PLAY/PAUSE ボタンを押しながら電源ON、 ファームウエアバージョンを確認して適用するなら ENTER ボタン押して開始

問題なく完了しました。

ちゃんと録音出来るかは後で…

デスクトップPCのシリアルポートを使えるようにした

M4A89TD PRO/USB3 という AMD 用のマザボには、COMポートのコネクタはありますが実際にRS232Cケーブルを差すブラケットは付属していません。ということで、ブラケット探してましたが通販では微妙な価格なので送料かかったりと実に中途半端です。まぁ、作ればいいやと思ってました。

ということで、3/19墓参りで大阪帰ったついでに 京谷豊のページへようこそ! を運用されています先輩と一緒に日本橋買い物タイム。

デジットで購入した。フラットケーブル用のコネクタ。これで、あとは家にあるもので作成可能なので買い物終了。(ほかのマイコン関係とか、ジャンクのチェックとかはいつも通りやってますよ)

んで、次、千石へ行ったら

ブラケット発見、かつ、安い…  迷わず購入

いいんです。部品買うときは、こういうことは良くある話です…

ということで、PCの取り付け

あとは、Windows 7 に入れてる Tera Term をこのシリアルポート使うように設定して、vmware の仮想PC にも Tera Term 入れて、 IODATA の USB RSAQ2 というWindows 7 で動かないUSB-SERIAL変換をクロスケーブルで接続しまして、OKかどうか確認しました。

動いてあたり前なので、動作確認は終り。

これで、パラレルポートがあれば完璧ですがそこまで贅沢は言いません。

Cubase 6 アップグレード版が来た

とりあえず中身は

  • CUBASE 6
  • HALION SYMPHONIC ORCHESTRA TRIAL VERSION
  • HALION SONIC Ver 1.5 TRIAL VERSION (2枚)
  • THE GRAND SE3 Ver 3.1 TRIAL VERSION
  • CUBASE 6 / CUBASE ARTIST6 Quick-Start Video Tutorials

とインストールマニュアルとアクティベーション用のキーが書かれた紙です。

とりあえず、私のところの環境は、Windows 7 home 64bit ですが今回は32ビット版のほうをインストールしました。(Cubase 5は残したままインストール作業開始)

DVD-ROM を ドライブに入れて、 Start_Center.exe を起動すると言語選択の画面が表示され日の丸を押すとインストールする製品を選ぶ画面に変りますが、そこからCubase 6 をインストールしようとしてもインストーラーが起動しませんでした。

ということで、Cubase 6 for Windows の Setup.exe をダブルクリックしインストーラーを起動させました。

詳細設定を開いてインストールされるものを確認。 HALion Sonic SE は個人的には不要なのでチェック外して、すべてのユーザーで使用にチェック入れて続行。インストールするディレクトリは、32ビット版なので本来なら “Program Files (x86)” というディレクトリになりますが、別ディレクトリを指定してそこにインストールしました。あとは、 eLicenser Control Center の画面からアクティベーションのコードを入れたら完了です。

Cubase 6 を起動したら、デバイス → プラグイン情報 から自分の使っているVSTプラグインのディレクトリを追加したり、オーディオI/Fなどのデバイス設定も一通りやっておかないと駄目です。

とりあえず、 MIDI Yoke のMIDIポートも見えたし、 Vocalid / Vocaloid2 の Rewire もデバイスのところで見えたので Vocaloid MEIKO さんを起動して「カ~エ~ル~の~う~た~が~」を入力、Cubase 6 側でRewire のチャンネルを作って同期するかやってみたところ再生ボタン・停止ボタンなど連動出来ているようなので問題ないと思います。たぶん

今日はこれくらいにしといたろ

ビデオ編集ソフト Edius6 が届いたのでインストール

今頃になって、グラスバレーの Edius 6 アップグレード版を通販で購入しました。先程手元に来たので、媒体不良があるといけないので、速攻でインストールしてみます。

その前に Edius 5 をアンインストールしましたが、NewBlue のプラグインがアンインストール出来なかったので、Revo Uninstaller を使用して無かったことにしました。

それ以外のアンインストール作業と  Edius 6 のインストール作業は順調で、バージョン 6.02 へのアップデートもHASPドライバの更新の時にいやなメッセージが出ましたが最終的には無事セットアップ完了となりました。

Edius Pro 5 の赤色ドングルは大丈夫かいな?と思うくらい LED が大変明るく光ってくれてましたが、Edius 6 のドングルは、Edius 4 のと同じ緑色に戻りましたし LED  の明るさも控え目になったので嬉しいです。あまりにも LED が明いと気になるもんで…

今はすぐ編集しなきゃいけないネタが無いのですが HDR-HC3 の IEEE1396 に出てくる TS を適当にキャプチャーしてみるとか、確認はそのうちしましょう。と言ってもこの週末は墓参りで大阪行くしちょっと後回しすかね。

20110313 ヴァイオリンレッスン64回目

今日の予想最高気温15度ということなので、花粉はいやですが電車で教室まで行きました。

  • 楽器のチューニング
  • 全弓ボゥイング(鏡使用)
  • 篠崎バイオリン教本2
  • 3, 4番 ハ長調音階
  • 6, 7, 8, 9, 10,11番 右手弓の練習
  • 8番 アマリリス
  • 11番 ロシア舞曲
  • 12, 13番 ト長調音階
  • 17番 メヌエット

今日の楽器の準備中に先生が席外されたので、鏡見ながら全弓ボゥイングやってたら、先生戻ってこられて、そのままレッスン開始。ボゥイングのチェックからレッスン開始です。まぁ、やはり弓が前後スベるとか、弦と直角でないという事象はすぐに再現するので、いろいろ言われましたが残念ながらイッパイなのです。

「アマリリス」は前回に続いて4回目のレッスンです。よほど下手さ加減が印象に残っているのかわかりませんが、今日これやるとは思ってなかったので不意打ちダメージ一気にきてメロメロです。今回もとにかく最後まで弾いてみて、そこから先生が気になったところを修正していきます。各弦のピチカートは前回よりマシになった。音量のバラツキも減ったのが良い。スタッカートの音量も良くなってきた。
あとは、前回も言ったと思うけど弦を押えきれてないところで音が弱いと注意。

「ロシア舞曲」は3回目。これも弾いてみます。今日の指摘はFisの音程が低い。あと、こういうふうに弾いて。とお手本を聞く。が、これをテキストでは書けないのですが、越えられない壁の向こうの演奏であったことは間違いありません (^^;

「メヌエット」今日からレッスン開始です。ほぼレッスン時間も終りかけなので、表現とかは抜きにとにかく最後まで通しで弾きました。なんかいろいろありそうで何から指摘するか困ったようですが、今日のところは半音に意識して下さい。誰でも知ってる有名なフレーズなので、半音をタイトに取って聞いている人のイメージと合うような音を出すように。とのこと。結構むずかしいです。

次回のレッスン日は先生が米良美一withセントラル愛知交響楽団スプリングコンサートに行かなきゃならなくなりそうなので代わりの先生お願いする予定とのことでした。

次回のレッスンは3月27日の予定です。

とりあえず、FPGA版 Hello, World

普段 DWMとか読まないんで、CPLDやFPGAの事情はさっぱりわかりません。昔のページに XILINX XC9500シリーズの
CPLD使った記事も書きましたが2002年6月のことで、当然ここのサイトには掲載してません。
今更という感じはあるのですが、久しぶりにやってみたくなったので入門キットを買ってボチボチ遊びたいと思います。

FPGAの「Hello, World」は、はやり LEDピコピコですが、今回は飛ばして VGA 出力の練習です。
Verilog HDL入門本見ながら書いてみました。以下ソースとUCFです。
Webpack 10.1で作成してとりあえず成功っと


モニタはPCデポ店頭に積んであったセリング KW-M80C というとこのSVGAモニタでアナログRGBとコンポッジト入力だけの
シンプル構成です。1万4千円くらいだったと思います。まぁちょっと使う程度なら使えるモニタです。

`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer:
//
// Create Date:    12:46:33 06/22/2008
// Design Name:
// Module Name:    vga
// Project Name:
// Target Devices:
// Tool versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//////////////////////////////////////////////////////////////////////////////////
//
// -- 水平タイミング --
// 表示期間:   640ドット
// フロントポーチ:  16ドット
// 水平同期:    96ドット(656)
// バックポーチ:   48ドット(752)
//
// -- 垂直タイミング --
// 表示期間:   480ライン
// フロントポーチ:  10ライン
// 垂直同期:     2ライン(490)
// バックポーチ:   29ライン(492)

module vga(CLK_50MHZ, VGA_R, VGA_G, VGA_B, VGA_HSYNC, VGA_VSYNC);

input CLK_50MHZ;
output [3:0] VGA_R;
output [3:0] VGA_G;
output [3:0] VGA_B;
output VGA_HSYNC;
output VGA_VSYNC;

reg [3:0] VGA_R;
reg [3:0] VGA_G;
reg [3:0] VGA_B;
reg VGA_HSYNC;
reg VGA_VSYNC;

wire clk_25mhz;
reg clk_25mhz_a;
assign clk_25mhz = clk_25mhz_a;

reg [9:0] hcount;
reg [9:0] vcount;

/* 25MHz のクロック作成 */
always @(posedge CLK_50MHZ)
begin
clk_25mhz_a <= ‾clk_25mhz_a;
end

/* 25Mhz のクロックで画面描画 */
always @(posedge clk_25mhz)
begin

// 水平タイミング
hcount <= hcount + 1;     // 水平カウント 800 で一周     if(hcount > 10'd799)
begin
hcount <= 0;
vcount <= vcount + 1;
end
// 水平同期出力
if(hcount == 10'd655)
begin
VGA_HSYNC <= 0;
VGA_R <= 4'b0000;
VGA_G <= 4'b0000;
VGA_B <= 4'b0000;
end
// 水平同期出力終了
if(hcount == 10'd751)
begin
VGA_HSYNC <= 1;     end     // 垂直タイミング     // 521 ラインで一周     if(vcount > 10'd520)
begin
vcount <= 0;
end
// 垂直同期開始
if(vcount == 10'd489)
begin
VGA_VSYNC <= 0;
end
// 垂直同期終了
if(vcount == 10'd491)
begin
VGA_VSYNC <= 1;
end

// カラーバーもどき → メモリインタフェースにする
if(hcount == 10'd0)
begin
VGA_R <= 4'b1111;
VGA_G <= 4'b1111;
VGA_B <= 4'b1111;
end
if(hcount == 10'd79)
begin
VGA_R <= 4'b0000;
VGA_G <= 4'b1111;
VGA_B <= 4'b1111;
end
if(hcount == 10'd159)
begin
VGA_R <= 4'b1111;
VGA_G <= 4'b0000;
VGA_B <= 4'b1111;
end
if(hcount == 10'd239)
begin
VGA_R <= 4'b1111;
VGA_G <= 4'b1111;
VGA_B <= 4'b0000;
end
if(hcount == 10'd319)
begin
VGA_R <= 4'b1111;
VGA_G <= 4'b0000;
VGA_B <= 4'b0000;
end
if(hcount == 10'd399)
begin
VGA_R <= 4'b0000;
VGA_G <= 4'b1111;
VGA_B <= 4'b0000;
end
if(hcount == 10'd479)
begin
VGA_R <= 4'b0000;
VGA_G <= 4'b0000;
VGA_B <= 4'b1111;
end
if(hcount == 10'd559)
begin
VGA_R <= 4'b0000;
VGA_G <= 4'b0000;
VGA_B <= 4'b0000;
end

end
endmodule

 
<pre><code>

NET "VGA_R&lt;3&gt;" LOC = "C8" | IOSTANDARD = LVTTL | DRIVE = 8 | SLEW = FAST ;

NET "VGA_R&lt;2&gt;" LOC = "B8" | IOSTANDARD = LVTTL | DRIVE = 8 | SLEW = FAST ;

NET "VGA_R&lt;1&gt;" LOC = "B3" | IOSTANDARD = LVTTL | DRIVE = 8 | SLEW = FAST ;

NET "VGA_R&lt;0&gt;" LOC = "A3" | IOSTANDARD = LVTTL | DRIVE = 8 | SLEW = FAST ;

NET "VGA_G&lt;3&gt;" LOC = "D6" | IOSTANDARD = LVTTL | DRIVE = 8 | SLEW = FAST ;

NET "VGA_G&lt;2&gt;" LOC = "C6" | IOSTANDARD = LVTTL | DRIVE = 8 | SLEW = FAST ;

NET "VGA_G&lt;1&gt;" LOC = "D5" | IOSTANDARD = LVTTL | DRIVE = 8 | SLEW = FAST ;

NET "VGA_G&lt;0&gt;" LOC = "C5" | IOSTANDARD = LVTTL | DRIVE = 8 | SLEW = FAST ;

NET "VGA_B&lt;3&gt;" LOC = "C9" | IOSTANDARD = LVTTL | DRIVE = 8 | SLEW = FAST ;

NET "VGA_B&lt;2&gt;" LOC = "B9" | IOSTANDARD = LVTTL | DRIVE = 8 | SLEW = FAST ;

NET "VGA_B&lt;1&gt;" LOC = "D7" | IOSTANDARD = LVTTL | DRIVE = 8 | SLEW = FAST ;

NET "VGA_B&lt;0&gt;" LOC = "C7" | IOSTANDARD = LVTTL | DRIVE = 8 | SLEW = FAST ;

NET "VGA_HSYNC" LOC = "C11" | IOSTANDARD = LVTTL | DRIVE = 8 | SLEW = FAST ;

NET "VGA_VSYNC" LOC = "B11" | IOSTANDARD = LVTTL | DRIVE = 8 | SLEW = FAST ;

NET "CLK_50MHZ" LOC = "E12"| IOSTANDARD = LVCMOS33 ;

# NET "CLK_AUX" LOC = "V12"| IOSTANDARD = LVCMOS33 ;

# NET "CLK_SMA" LOC = "U12"| IOSTANDARD = LVCMOS33 ;


 

STM32 Primer2 が出てきた。

とりあえずいつ買ったか思い出せないほど昔に買いましたが、
部屋の整理中に発掘されたので、また時間見て遊んでみようと思います。
まぁ、でもとりあえず
stm32Circle.com
にある、プログラムサンプルとかを見てみておもしろそうなのから
動かしてみましょうというレベルですね。

優先度はかなり低い

LX200 極軸合わせ

英語マニュアルに載っている,Drift Method
東西方向の位置合わせ
ガイドアイピースを取り付けて,天の赤道の南中するあたりの星を手動で導入する。 ガイドアイピースを覗いていると,星が左に動いていくので,十字線の向きを合わせる。これが東西方向になる。 望遠鏡の電源を入れ,コントローラーから赤道儀モード[POLAR]にする。このとき,北極星の位置合わせは行わない。 また,コントローラーの微動速度の設定にも注意する。
(早い← SLEW – FIND – CENTER – GUIDE →遅い) コントローラーの微動で,星をガイドアイピースの十字線にあわせて,どのように星がずれていくか様子を見る。星が,北に上がっていくようであれば,望遠鏡は西にずれている。同様に南にずれていく場合は望遠鏡は東にずれている。 望遠鏡の方位ネジ(仰角ではない)を動かして,東西方向の調整を行う。
ガイドアイピース内の星の位置を,動いていたのと反対方向に持ってくる。再度,コントローラで,ガイドアイピースの中心に星を入れて様子を見る。先ほどよりは,星の動きが緩やかになったと思うが,それでも星は動いていくと思います。 再度,東西方向の調整を行います。 これを,繰り返して行くうちに,ついに星の動きが反対向けになるときが来ます。
この時点で,望遠鏡の東西方向の調整で正確な極軸方向を通り過ぎたことがわかります。向きを少し戻して,東西方向が合ったものとして,調整を終了する。

仰角の合わせ

同じく,天の赤道上にあって東の地平線から20~30度程度昇った星をガイドアイピースの中央に導入して, 星の動きの様子を見ます。(十字線の方向調整を忘れない) ここでも,やはり導入した星は,ガイドアイピースの中心から,上か下に動いて行きます。
このとき,星が南に動いていけば望遠鏡の極軸は南にずれています。(低すぎる)同様に北に動いていけば,望遠鏡の極軸は北にずれています。(高すぎる)。赤道儀ウエッジの角度を調節して,星がずれていった方向とは反対側に調整して,星の動きを観察します。 最終的に,星が上下にずれなくなったら,極軸合わせは完了。

東西方向合わせ 東向きでの仰角合わせ 西向きでの仰角合わせ
ずれの方向
方角/仰角 西にずれている 東にずれてる 高い 低い 低い 高い
調整 東に回す 西に回す 仰角を下げる 仰角を上げる 仰角を上げる 仰角を下げる

MAPUG.com で紹介されている Iterative Method

  1. 慎重に架台の水平出しを行います。
  2. [TELESCOPE] -> [ALIGN] -> [POLAR] の順にメニューを選択する。
  3. 赤緯(Dec)は、赤緯目盛りが90に合うように
    時角を 0にするのは、赤経目盛りとドライブベースにある時角のポイントが
    一直線になるように合わせます。
    |ENTER| 押すと、望遠鏡が動いて北極星のある方向に向きます。

  4. 赤道儀ウエッジの東西方向の微動と仰角を調節して、ガイドアイピースの
    中心に北極星を入れて |ENTER| を押します。
  5. 望遠鏡が基準星の方向に向きます。Keypad を使って
    基準星をガイドアイピースに導入して |ENTER| を押します

    ここまでは、マニュアルの通り
  6. |STAR| -> [NAME] -> [POLALIS] -> |GOTO| で、再度北極星を導入します。
    導入した結果、ガイドアイピースの中心からどれだけずれているか確認します。
    そして、赤道儀ウエッジの東西方向と仰角を動かして
    北極星をずれた量の半分戻します。
  7. |STAR| -> [NAME] -> 北極星以外の基準星(5 の基準星と同じでよい) -> |GOTO| で、基準星を導入します。
    そして、Keypad を使用して、基準星をガイドアイピースの中心に導入して
    |ENTER| を長押して Sync します。(Keypad の beep 音が鳴ります)

  8. 手順6. 7. を繰り返して、北極星が正しく導入されるようになれば、極軸合わせは完了です。

この手順を発表した、 Philip Perkins さん (http://www.astrocruise.com/polarold.htm) によると

3~4 回程度で、合うようなことを書いておられました。(多分きちんと設置した状態が条件だと思う)

PHD Guiding でオートガイドしたくなったので Meade LX200 エミュレータを作る (ASCOM対応LX200エミュレータ)


– 20070709 —

最近 PHD Guiding というフリーのソフトによるオートガイド環境の構築がはやっているようでして、私もやってみようと思っています。ただし、私の環境ではリレーボックスがあれば簡単になるのでPHD Guiding ではASCOMのドライバを使用するようにして、ASCOMの設定でLX200用のシリアル出力するようにします。(撮影用のノートパソコンにはパラレルポートが無いのでこの方法を選択しています)

大雑把な仕様はPCのシリアルポートから出力される LX200用のコマンド文字列をAVRマイコンで受けます。東西南北の移動コマンドが来れば対応するポートをON/OFFさせることでリレーを動かします。リレーは昔作成したのがあるので、今回はマイコン部分のみが作成対象になります。使用するマイコンはAVRマイコンです。(手持ち在庫の関係です)

※表現としてリレーと言ってますが、トラジスタのスイッチングでも全然問題はありません。


開発環境の確認

AVRマイコンに対応する gcc があります。今回はこのWebサーバーにコンパイラをインストールして環境の作成をします。このWebサーバーは Debian/GNU Linux etch で稼動していますのでdebパッケージがあれば簡単です。パッケージがあるか確認してみます。

# apt-cache search avr
ava - Algebraical Virtual Assembler for Atmel's AVR MCUs
avarice - use GDB with Atmel's JTAG ICE for the AVR
avr-libc - Standard C library for Atmel AVR development
avra - Assembler for Atmel AVR microcontrollers
avrdude - software for programming Atmel AVR microcontrollers
avrdude-doc - documentation for avrdude
avrp - Programmer for Atmel AVR microcontrollers
avrprog - Programmer for Atmel AVR microcontrollers
binutils-avr - Binary utilities that support Atmel's AVR targets.
gcc-avr - The GNU C compiler (cross compiler for avr)
gdb-avr - The GNU Debugger for avr
libgringotts2 - encapsulate data in an encrypted and compressed file
sdcc - Small Device C Compiler
sdcc-doc - Small Device C Compiler (documentation)
sdcc-libraries - Small Device C Compiler (libraries)
simulavr - Atmel AVR simulator
traceroute-nanog - Determine route of packets in TCP/IP networks (NANOG variant)
uisp - Micro In-System Programmer for Atmel's AVR MCUs
#

apt-cache の結果、gcc-avr と avr-libc がありましたので apt-get install でインストールすれば c言語で開発出来るようになります。コンパイル出来るかどうか確認するために、サンプルデモをコンパイルしてみます。

$ cp -a /usr/share/doc/avr-libc/examples/demo .
$ cd demo
$ gzip -d iocompat.h.gz
$ make
avr-gcc -g -Wall -O2 -mmcu=atmega8 -c -o demo.o demo.c
avr-gcc -g -Wall -O2 -mmcu=atmega8 -Wl,-Map,demo.map -o demo.elf demo.o
avr-objdump -h -S demo.elf > demo.lst
avr-objcopy -j .text -j .data -O ihex demo.elf demo.hex
avr-objcopy -j .text -j .data -O binary demo.elf demo.bin
avr-objcopy -j .text -j .data -O srec demo.elf demo.srec
avr-objcopy -j .eeprom --change-section-lma .eeprom=0 -O ihex demo.elf demo_eeprom.hex \
|| { echo empty demo_eeprom.hex not generated; exit 0; }
avr-objcopy -j .eeprom --change-section-lma .eeprom=0 -O binary demo.elf demo_eeprom.bin \
|| { echo empty demo_eeprom.bin not generated; exit 0; }
avr-objcopy -j .eeprom --change-section-lma .eeprom=0 -O srec demo.elf demo_eeprom.srec \
|| { echo empty demo_eeprom.srec not generated; exit 0; }
$ ls
Makefile demo.c demo.hex demo.map demo.srec demo_eeprom.hex iocompat.h
demo.bin demo.elf demo.lst demo.o demo_eeprom.bin demo_eeprom.srec
$

まぁ、demo.hex とかが作成されているので問題無いでしょう。


ASCOM がLX200を認識する条件を確認

— 20070713 —

ASCOM のLX200ドライバが接続を認識するために、何らかのコマンドをLX200に送信して、返ってくるレスポンスをもとに判断しているものと思われます。ので、どんなやりとりをやってるのか確認してみました。結果は以下のようなやりとりをしていました。これは、ASCOM 4.1 と LX200 3.34L の組合せの場合です。

***Generic LX200 Type Scopes の場合

ASCOM LX200
#:GR#
15:15.6#
#:GD#
-00゚01#
#:GR#
15:15.6#
#:U#
#:GR#
15:15:37#
#:GR#
15:15:37#
#:GD#
-00゚01:03#

***Meade Telescope and Focuser の場合
ASCOM LX200
#:GS#
15:25:32#
:GVF#
無応答
ACK
P
:Sw 3#
1
:GZ#
004゚17#
:GZ#
004゚17#
:U#
:GZ#
004゚17:51#
:GR#
15:15:37#
:GD#
-00゚01:03#
:GZ#
004゚17:51#
:Gt#
+35゚19#
:GA#
+54゚35:22#
:GZ#
004゚18:00#
:GD#
-00゚01:03#

というやりとりした結果 connected となりました。

上記シーケンスの中で’゚’の記号は 0xdf ACKと書いてるのは 0x06 のコードです。これを見るとこれから作成するエミュレータには、Get系のコマンドに応答出来るような仕込みが必要と思います。


とりあえず作成開始

— 20070714 —

さて、3連休なのですが台風4号が来るとのことですので、家で工作することにしました。物は以下の写真のようになりました。ピンボケですが撮り直しは気が向いたらします。

使用したチップは AT90S2313 が手持ちでありましたのでそれを使用しています。とにかく、ASCOMのドライバと通信しないといけないのでUART付きのマイコンを使用すれば大丈夫です。

パソコンとの接続はシリアルになるわけですが、ノートパソコンにはRS232Cのポートが無いのでUSB-シリアル変換基板を大須のタケイムセンで買ってきました。FTDIのFT232RLが乗っているやつです。あとは AVRマイコンと接続させればOKです。

本日作成したのは、上記の写真までで、リレー側の出力はまだ配線していませんが早速PHD Guiding + ASCOM の LX200 ドライバで接続出来るか確認した結果、Generic LX200 Type Scopes で LXP Connected と Meade Telescope and Focuser で LX200 Connected というのが PHD Guiding のウィンドウの左下のステータス領域に出たので第一段階はクリアしましたということでしょう。


とりあえず作成開始(その2)

— 20070716 —

新潟県中越沖地震が発生しました。これ以上被害が広がることが無ければいいと思います。

さて、3連休も最終日です。ある程度は形にしておこうということで、残りの配線をしました。写真のような感じになっちゃいました。
最初はマイコン部分だけ作って、リレーボックスはpictor 201xt互換のものを使用するつもりでしたが、基板に余裕があったので、フォトカプラを付けました。フォトカプラにミニDIN 6ピンのコネクタを付けて、タカハシのオートガイダー端子に直接差せるようにしておきました。しかしながら私のは EM200b なのでオートガイダーの端子は無いため、ハンドコントローラからコネクタを分岐させて、それと接続しました。6ピンなのでPS/2 のケーブルが使用可能です。

動作確認はパソコンの端末ソフトから LX200のコマンドを手入力して行いました。東西南北の移動コマンドを入れていきます。赤道儀に耳を付けてモーター音が変化すればOKということですが、ちゃんとそのような動きをしていたので一安心です。あとはケースに入れないとだめですね。


晴れたので動作確認をしました。

7月23日薄曇のコンディションでしたが、久し振りの晴れです。
作った LX200エミュレータが動くか確認しました。
ガイド鏡とかは以下のとおりです。

  • ガイド鏡: Meade 60mm/F11
  • ガイド用カメラ: Meade DSIPro
  • ノートパソコン(PHDGuiding 1.5/ASCOM 4.1)
  • 自作 LX200エミュレータ
  • EM-200b

ベランダに赤道儀を出してテストしました。
下のグラフのように、補正しながら稼動しました。
とりあえず、赤道儀を南向きのベランダに出した状態でテストしましたので、極軸はズレたままです。この状態でも、PHDGuiding の画面ではガイド星は動かなかったので一安心です。

今回は作ったハードが動くかどうかの確認ですので
目的は達成出来ました。


今回作った ASCOM 対応 LX200 エミュレータのソース

/* ——————————————————————————–

— Source name: lx200emu.c
— Version: 0.1(20070714)
— Author: Masahiro Kusunoki

— PHD Guiding –> ASCOM ドライバ –> LX200 コマンド出力 –> 当マイコンボックス –> EM-200b

— AT90S2313
— 01 RESET
— 02 PD0(RXD)
— 03 PD1(TXD)
— 04 XTAL2
— 05 XTAL1
— 06 PD2(INT0)
— 07 PD3(INT1)
— 08 PD4(T0)
— 09 PD5(T1)
— 10 GND
— 11 PD6(ICP)
— 12 PB0(AIN0)
— 13 PB1(AIN1)
— 14 PB2
— 15 PB3(OC1)
— 16 PB4
— 17 PB5(MOSI)
— 18 PB6(MISO)
— 19 PB7(SCK)
— 20 VCC

— シリアル回線については、9600/8N1 で接続

— 問題は、ASCOM にしても DSI にしても、どこまで返事を返せば
— 接続 OK として認識してくれるのかが不明

——————————————————————————– */

#include
#include

#define west PB0
#define east PB1
#define north PB2
#define south PB3

void commandCheck_start(unsigned char);
void commandCheck_Major(unsigned char);
void commandCheck_MandDirection(unsigned char);
void commandCheck_QandDirection(unsigned char);
void commandCheck_Get(unsigned char);
void uartPutChar(unsigned char);
void resRA(void);
void resDec(void);
void resAzi(void);
void resTrack(void);
void resSite(void);
int main(void);

/*
commandStatus = 0 “:” が来るのを待つ
commandStatus = 1 “M” “Q” の判定
commandStatus = 2 “M” に続く方角の文字判定とリレー制御
commandStatus = 3 “Q” に続く方角の文字判定とリレー制御
commandStatus = 4 “G” に続く方角の文字判定とリレー制御
*/
unsigned char commandStatus = 0;
unsigned char longFormat = 0;

/* ——————————————————————————–
— UART 受信割り込み処理(1文字来た)
——————————————————————————– */
SIGNAL(SIG_UART_RECV) {
unsigned char ch01 = UDR;
switch(commandStatus) {
case 0:
commandCheck_start(ch01);
break;
case 1:
commandCheck_Major(ch01);
break;
case 2:
commandCheck_MandDirection(ch01);
break;
case 3:
commandCheck_QandDirection(ch01);
break;
case 4:
commandCheck_Get(ch01);
break;
}
return;
}

/* ——————————————————————————–
— コマンド文字列開始判定
——————————————————————————– */
void commandCheck_start(unsigned char ch01) {
if(ch01 == ‘:’) {
commandStatus = 1;
} else if(ch01 == 0x06) { //ACK が来たら無条件に’P'(赤道儀モード)を返す
uartPutChar(‘P’);
}
}

/* ——————————————————————————–
— 移動開始か移動停止コマンドかの判定
——————————————————————————– */
void commandCheck_Major(unsigned char ch01) {
switch(ch01) {
case ‘M’: // Movement Command
commandStatus = 2;
break;
case ‘Q’: // Movement Command
commandStatus = 3;
break;
case ‘G’: // Get Telescope Information
commandStatus = 4;
break;
case ‘U’: // Precision Toggle
if(longFormat == 0)
longFormat = 1;
else
longFormat = 0;
commandStatus = 0;
break;
case ‘S’: // Set command
uartPutChar(‘1’); // Setコマンドは無条件に1(true)を返す
commandStatus = 0;
default:
commandStatus = 0;
break;
}
}

/* ——————————————————————————–
— 移動開始(該当のポートを 1 にする)
——————————————————————————– */
void commandCheck_MandDirection(unsigned char ch01) {
switch(ch01) {
case ‘n’:
PORTB |= (1 << north); break; case 's': PORTB |= (1 << south); break; case 'e': PORTB |= (1 << east); break; case 'w': PORTB |= (1 << west); break; } commandStatus = 0; } /* -------------------------------------------------------------------------------- -- 移動停止(該当のポートを 0 にする) -------------------------------------------------------------------------------- */ void commandCheck_QandDirection(unsigned char ch01) { switch(ch01) { case 'n': PORTB &= ~(1 << north); break; case 's': PORTB &= ~(1 << south); break; case 'e': PORTB &= ~(1 << east); break; case 'w': PORTB &= ~(1 << west); break; case '#': PORTB &= ~((1 << north) | (1 << south) | (1 << east) | (1 << west)); break; } commandStatus = 0; } /* -------------------------------------------------------------------------------- -- Getコマンド処理 -------------------------------------------------------------------------------- */ void commandCheck_Get(unsigned char ch01) { unsigned char saveLongFormat = 0; switch(ch01) { case 'A': // Get Telescope Altitude case 'D': // Get Telescope Declination resDec(); break; case 'R': // Get Telescope RA case 'r': // Get current/target RA resRA(); break; case 'Z': // Get Telescope Azimuth resAzi(); break; case 'T': resTrack(); break; case 'S': // Get the Sideral time case 'a': // Get Telescope local time in 12Hour Format saveLongFormat = longFormat; longFormat = 1; resRA(); longFormat = saveLongFormat; break; case 't': // Get current Site Latitude saveLongFormat = longFormat; longFormat = 0; resDec(); longFormat = saveLongFormat; break; case 'M': case 'N': case 'O': case 'P': resSite(); break; } commandStatus = 0; } /* -------------------------------------------------------------------------------- -- レスポンス 赤経 -- 00:00.0# -- 00:00:00# -------------------------------------------------------------------------------- */ void resRA(void) { uartPutChar('0'); uartPutChar('0'); uartPutChar(':'); uartPutChar('0'); uartPutChar('0'); if(longFormat == 1) { uartPutChar(':'); uartPutChar('0'); } else { uartPutChar('.'); } uartPutChar('0'); uartPutChar('#'); } /* -------------------------------------------------------------------------------- -- レスポンス 赤緯 -- 対象コマンド :GR :Gr -- +00*00# -- +00*00:00# -------------------------------------------------------------------------------- */ void resDec(void) { uartPutChar('+'); uartPutChar('0'); uartPutChar('0'); uartPutChar(223); uartPutChar('0'); uartPutChar('0'); if(longFormat == 1) { uartPutChar(':'); uartPutChar('0'); uartPutChar('0'); } uartPutChar('#'); } /* -------------------------------------------------------------------------------- -- レスポンス アジマス -- 対象コマンド :GZ -- 000*00# -- 000*00:00# -------------------------------------------------------------------------------- */ void resAzi(void) { uartPutChar('0'); uartPutChar('0'); uartPutChar('0'); uartPutChar(223); uartPutChar('0'); uartPutChar('0'); if(longFormat == 1) { uartPutChar(':'); uartPutChar('0'); uartPutChar('0'); } uartPutChar('#'); } /* -------------------------------------------------------------------------------- -- レスポンス トラッキング -- 対象コマンド :GT -- 00.0# -------------------------------------------------------------------------------- */ void resTrack(void) { uartPutChar('0'); uartPutChar('0'); uartPutChar('.'); uartPutChar('0'); uartPutChar('#'); } /* -------------------------------------------------------------------------------- -- レスポンス サイト名 -- 対象コマンド :GM :GN :GO :GP -- ???# -------------------------------------------------------------------------------- */ void resSite(void) { uartPutChar('?'); uartPutChar('?'); uartPutChar('?'); uartPutChar('#'); } /* -------------------------------------------------------------------------------- -- UART 一文字出力 -------------------------------------------------------------------------------- */ void uartPutChar(unsigned char ch01) { loop_until_bit_is_set(USR, UDRE); UDR = ch01; } /* -------------------------------------------------------------------------------- -- メイン処理 -------------------------------------------------------------------------------- */ int main(void) { cli(); PORTB = 0x00; DDRB = 0xFF; PORTD = 0x00; DDRD = 0xFF; /* * UART 制御レジスタ UCR の設定 * RXCIE 受信完了割り込み * TXCIE 送信完了割り込み * UDRIE 送信データレジスタ空き割り込み * RXEN 受信許可 * TXEN 送信許可 */ UCR = (1<