« 2014年4月 | トップページ | 2014年6月 »

2014年5月30日 (金)

「天文屋のためのマイコン入門」バンクのもう一つの解釈

前回、バンクという概念をページという概念に置き換えて説明しました。その様子を図に表しました。

たとえば、1ページ目の31番地をアクセスする場合で説明します。

1 STATUSレジスタは(RP1,RP0)=(0 , 1)なので、1ページ目が抜き出される。
2 MOVWF 31 は1ページ目の番地31にアクセスされる。

1405291

さて、バンクを理解するもう一つの方法を説明します。結果はどちらも同じですが。

512個のレジスタファイルを4つのバンク(ページ)に分けるのではなく、縦に4つ並べ、通しの番地を割り当てます。(これを絶対番地という)

1405292_2 

こうすると、たとえば1ページ目の31番地は158番地になります。こうすれば番地の重複はありません。でも番地の最大値の制約127を超えてしまいます。もしプログラムで、

MOVWF  158

と書いたらどうなるでしょうか? 不思議なことにこれはエラーなりません。ちゃんと158番地にアクセスされるでしょうか? もちろんNOです。これが通るなら最初から苦労はしません。命令のフォーマットにおいて番地を指定するのは7ビットでした、したがって、127までしか許されません。

これは127を超えたら、128で割ったあまりと実質的に同じなります。

したがって、

MOVWF  158

は、

MOVWF  31

とまったく同じです。

したがって、STATUSレジスタがページ1を示していない限りページ1にはアクセスされません。ではなぜ、通し番地を使用するのでしょうか?

実際、PICマイコンのマニュアルを見ると、レジスタの番地は通し番地で書かれています。

こう考えてください。

1 レジスタはすべて通し番地の番地を持っている。重複は一切ない。
2 そうすると、512個のレジスタの番地を示すには9ビットが必要(2の9乗=512)
3 ただし、命令コストの制約があるので、9ビットの下位7ビットしか命令中に含められない。
4 余った2ビットはSTATUSレジスタの(RP1,RP0)に格納するとする

これを図で表したものがこれです。

1405293_2

この決まりをマイコンの立場にたって考えてみます。

1 マイコンがMOVFW 31の命令に遭遇したら、この命令からレジスタの番地31を抜き出します。(2進数で0011110)

2 ただ、これはあくまでも9ビットの番地の下位7ビットに過ぎません。したがって、マイコンはSTATUSレジスタから上位2ビット(0,1)を上位に足して、真の番地158番地を得ます。

3 よってマイコンが158番地のレジスタにアクセスします。

1405301

これがバンクの通し番地(絶対番地)による解釈です。

マイコンの物理的な動作としてはこちらのほうが真に近いと思います。なぜなら、

●マニュアルでは通し番地で記述されている
●プログラムに通し番地を記述してもエラーにならない

ただ、どちらの解釈であっても結果は同じ(プログラムは同じ)ですから、どちらで理解してもかまいません。

| | コメント (0)

2014年5月28日 (水)

湯沢遠征

昨晩は湯沢に遠征してきました。

11時に到着したときは雲がだいぶあったのですが、0時に快晴。

EF100mmF2.8Lマクロでへびつかい座の大きな赤い星雲を撮っていました。

30枚くらい撮ったのですが、10枚くらいは、星が潤んでいました。あまり透明度がよくなかったです。もっと高度の高い対象を狙えばよかったと後悔。

薄明が2時半ごろなので、他に何も撮れなかったです。

でも久々の遠征で、星を見れて良かったです。

| | コメント (0)

2014年5月26日 (月)

「理想のポタ赤を作る」極望レチクル進展

懸案だった極軸望遠鏡のレチクルですが、作ってくれるところを見つけました。これで、なんとかなりそうです。

それで、レチクルパターンを設計しなければなりませんが、ここで極望パターンのおさらいをしておきます。ご存知のようにパターンは2種類あります。

1 北斗七星とカシオペアが書かれたもの 時角計算必要なし
2 同心円で、目盛りが書かれたもの 時角計算が必要

極望が赤経軸の中に入って一体となっている場合は、1でも2でもどちらでも良いのですが、今回のように別々になっている場合は、1のパターンでやろうとすると次の条件が必要です。

スケールが回転でき、かつ回転軸、光軸、レチクル中心のすべてが一致していなければならない。

で、これを実現するには極軸望遠鏡を回転できるようにする機構とレチクルを移動できる仕組みの両方が必要です。

さすがにこれは無理です。したがって、2のパターンを採用することにします。

同心円ですが、いちおう2015年と2035年の北極星の位置の同心円を描きます。あと、南天用に、はちぶんぎ座のシグマ星の同心円も入れます。

ところで、上記レクチルを設計するのに、北極星の赤緯の年毎の値は調べられたのですが、はちぶんぎ座のシグマ関しては、調べられませんでした。だれか知っている人いませんか?(2015年と2035年がわかればいいです)

| | コメント (4)

「天文屋のためのマイコン入門」STATUSレジスタ詳細

さて、ページ番号を切り替えるには、STATUSレジスタにページ番号を設定(書込み)すればよいのでした。ところでSTATUSレジスタは8ビットの情報をもつレジスタですが、その詳細を以下に示します。(上段のb0などは第0ビットということ)

1405252

ここで黄色の部分でページ番号を指定します。他のビットですが、これはページ数とはまったく関係ない機能です。STATUSレジスタはページ数以外の情報も扱うレジスタと思ってください。

さて、この黄色の部分でページ数を設定するのですが、それを下の表に示します。

これを見ると、たとえばページ数を2に設定したいなら、RP1=1、RP0=0とすればよいのが分かります。具体的なプログラムではSTATUSレジスタに2進数で01000000を書き込めばよい事がわかります。ここでSTATUSレジスタの番地は3番地であることに注意すると、プログラムは以下のようになります。

MOVLW   b'01000000'         ワーキングレジスタに2進数01000000を転送
MOVWF   3                       ワーキングレジスタの内容を3番地に転送

2進数の場合、先頭にbを付け、シングルコーテーションで囲うことに注意して下さい。

これで、STATUSレジスタに値01000000を書き込むことができました。つまりレジスタファイルにおいて2ページ目を開いたことになります。

しかし、このプログラムでは問題があります。STATUSレジスタはページ数以外にも他の情報を共有しています。つまり、RP1、RP0以外の他のビットにも値を書き込んでしまうことになるのです。これは他の全然関係ない部分に影響を与えてしまうのでまずいです。

そこで、特定のビットだけ、1(ビットをセット)または0(ビットをクリア)に書き込む命令を紹介しますので、これを使うようにします。

1405261

これを見ると、STATUSのRP0を1にセットしたい場合はSTATUSレジスタは3番地なので、

BSF   3,5

とすれば良い事になります。

さて、この命令を使えば、レジスタファイルのページを切り替えるのは次のように命令を書けばよいことになります。

ページ0
BCF   3,5
BCF   3,6

 

ページ1
BSF   3,5
BCF   3,6

 

ページ2
BCF   3,5
BSF   3,6

 

ページ3
BSF   3,5
BSF   3,6

さて、STATUSのRP0とRP1の値がわかっていて変更する必要がないならそれらの命令を省略することができます。たとえばマイコン起動時はRP0もRP1も初期値は0ですから、クリアする命令は省略できて、次のようになります。

ページ0
なし

 

ページ1
BSF   3,5

 

ページ2
BSF   3,6

 

ページ3
BSF   3,5
BSF   3,6

次に4つのページのうち、良く使うのはページ0と1ですから、実際問題としては、RP0のクリアとセットだけでなんとかなってしまうこともあります。

ページ0にする
BCF  3,5

ページ1にする
BSF  3,5

さて、前回出した4つのレジスタファイルのページの図を良く見てください。STATUSレジスタがすべてのページにあります。これは当然といえば当然です。STATUSレジスタが一つのページにしかないと、ページを切り替えたらSTATUSページにアクセスできなくなり、2度ともとのページに戻れなくなってしまいます。

STATUS以外にも、複数のページに同じ名称のレジスタがあります。これらはすべて同一のものです。良く使うレジスタはいちいちページを切り替える必要がないようにという配慮からです。

また、この図の灰色の部分はプログラムで自由にメモリとして使えるレジスタですが、112番地から127番地の16番地は、どのページもページ0と同一です。ですから、この番地にデータを割り当てておけば、現在がどのページであっても、アクセスすることができます。これは嬉しい配慮ですが、やはり、面倒ですね。

さて、ここではバンクという概念を本にたとえて、ページという概念で説明しました。これで十分なのですが、バンクをまた別の概念で理解する方法があります。実はマイコンの動作から見るとこちらの理解のほうが近い感じがします。次回、それを説明します。

| | コメント (0)

2014年5月25日 (日)

「天文屋のためのマイコン入門」バンクとは

PIC16F88のレジスタは、実は512個あります。レジスタファイルの制限は128個でしたね。実に4倍もオーバーしています。そのからくりはバンクという概念にあります。

バンクを理解する方法として2通りの理解の仕方があります。初めにページという概念でバンクを理解してみましょう。バンクはページと思ってください。

何かの本である記述がある場所を指定するのに、何ページ目の何行目という言い方をします。バンクもこれと同じです。512個のレジスタは4つのレジスタファイルに分かれています。これをバンクといいます。つまりページです。そして各ページの行数に相当するのが番地というわけです。

1405251

すなわち、レジスタファイルは、4ページからなる本と考えればよいです。あるレジスタを指定するには、まずページ番号(バンク番号)を指定します。次に番地を指定します。

このようにレジスタを指定するのに2段階を要するので面倒であることは確かですが、これでたくさんのレジスタを扱うことができます。

ところで、番地は命令の中で指定するので良いとして(MOVFW 5のように)ページ番号はどこで指定するのでしょうか? 実はこれもレジスタに値を書き込むことによって指定します。この特別なレジスタをSTATUS(ステータス)レジスタといいます。

STATUSレジスタはレジスタファイルの中にあり、番地は3番地と決まっています。

さて、たとえば、2ページ目のレジスタファイルの5番地に値を書き込みたい場合は、まずスSTATUSレジスタにページ番号2を書き込み、さらに5番地のレジスタに目的の値を書き込みます。

STATUS ← 2ページ目
MOVWF  5

STATUSレジスタの値によって、MOVWF 5の指し示すレジスタがまったく違うものになることに注意してください。

STATUSレジスタが1ページ目を指定しているなら、それは1ページ目のレジスタファイルの5番地のことですが、2ページ目を指定しているなら、2ページ目のレジスタファイルの5番地ということです。番地が同じでもページが異なればまったく別のものになります。

STATUSレジスタにページ番号を書き込んだら、それは次に別のページ番号に書き換わるまで有効です。ですからページ番号が同じなら、いちいちレジスタアクセスの度にSTATUSレジスタの書き換えを行う必要はありません。またレジスタアクセスの直前にページ番号を書き込む必要もありません。

たとえば、0ページ目の12番地と13番地に値を書き込みたい場合は、

STATUS ← 0ページ目
MOVWF  12
STATUS ← 0ページ目
MOVWF  13

とする必要はなく、

STATUS ← 0ページ目
MOVWF 12
MOVWF 13

で良いわけです。

プログラマはあるレジスタにアクセスしたい場合は、常にSTATUSレジスタが今、何ページ目を指しているか意識する必要があります。これはけっこうな負担です。

このバンクという概念は大昔のマイコンによく採用された方法ですが、現在のマイコンは少ないです。PICの場合、システム規模が小さいため、このような方式をとらざるを得なかったのでしょう。ですから、PICマイコンは小さいから簡単だという単純な話にはならないです。むしろ難しい方の分類に入るかもしれません。(ただしハード的には簡単)

さて、STATUSレジスタにページ番号を指定する方法ですが、実はこれがやっかいです。次回、その方法を説明します。

| | コメント (6)

「天文屋のためのマイコン入門」予告2

昨日、ミニCD-1を作ると予告しましたが、もう一つ予告があります。

現在、学習用に作っているインターバルシャッターですが、普通に作ったんでは面白くないので、無線通信を搭載して、スマフォからコントロールできるようにしたいと思います。

いちおう順番としては

1 普通のインターバルシャッター作成
2 モータドライブおよびミニCD-1作成
3 インターバルシャッターを無線化

インターバルシャッターですが、直接操作では露出時間しか設定できませんでしたが、スマフォからでは、すべてのパラメーターを設定できるようになります。

さて、このスマフォ対応ですが、もちろん「理想のポタ赤」作りの前哨戦みたいなもんです。やっぱ、これからはスマフォ&iPadの時代ですね。

| | コメント (0)

「天文屋のためのマイコン入門」予告

え~、マイコン入門ですが、解説しながらの工作記事なので、いっこうに進まず、申し訳ありません。もともと一年企画なので、長い目でお願いします。

ところで、現在、インターバルシャッターを作っていますが、この次は、モータードライブを作る予定です。で、「理想のポタ赤」の模型作りで、余った部品があります。

1405241

これらを組み合わせると、小さなポタ赤が出来てしまいそうです。ということで作ります。

名づけて、

「ミニCD-1」

アイベルさん、名称を借用してすみません。

これは、広角での星景写真用に使えそうです。

| | コメント (0)

2014年5月20日 (火)

「天文屋のためのマイコン入門」命令コストとは

さて、PICマイコンというのは規模が小さいマイコンなので、マイコンの中では簡単な方だと思われるかも知れません。しかし、概念的には難しい部類に入ります。

この難しい概念を暗記的に覚えることもできるのですが、なぜそうなっているのか、十分理解して覚える方法もあります。そのとき役に立つのが命令コストの概念です。

命令コストは1でなければならいとして説明してきましたが、もっと正確に正しく説明してみようと思います。

以前マイコンの命令は数値に変換されると説明しました。(ビルドといいました)

データを格納するメモリは8ビットのバイトが基本単位でした。メモリにはもう一種類あります。プログラムを格納するプログラムメモリです。こちらの基本単位は14ビットです。なぜ14ビットか、それはPICの設計者がいろんなバランスを考えてこれが最適と考えたのでしょう。もっとビット数を多くすることができますが、多くすれば、プログラムも大きくなりますし、速度的にも不利です。

いずれにせよ、14ビットと決まったわけですから、翻訳された命令の数値は14ビットに収まらなければなりません。

ここで14ビットの命令のフォーマットを調べてみます。

14051710

命令の14ビットの情報のうち、上側7ビットは、命令の種類(MOVFWとかADDFWとか)を指定するのに使われます。7ビットですから原理的には2の7乗で128種類の命令を指定できます。残りの7ビットはレジスタファイルの番地を指定するのに使われます。レジスタファイルの番地は0から127までの128個に限られます。

この図を見れば分かるように、レジスタファイルの番地を増やそうとすると命令の種類を減らさないといけないことがわかります。ですからむやみに番地を増やす分けにはいきません。命令の種類を増やそうとすれば番地が減り、番地を増やそうとすると命令の種類を減ります。

どこに最適値をおくかはPICの設計者の理念ですが、とにかく番地指定のために7ビットしか割り当てられなかった分けですから、レジスタファイルのレジスタ数は128ということになります。

しかし、これでは少ないのでしたね。そこでもっと別な方法でレジスタを増やす策が必要です。これがバンクと言われる方式です。次回説明します。

| | コメント (0)

2014年5月18日 (日)

「天文屋のためのマイコン入門」レジスタファイルの例

本日3つ目の記事アップです。この連載最初からちゃんと読んでる人は、記事をさかのぼって読んでください。

前回、レジスタファイルの説明をしたので、PIC16F88のレジスタファイルを紹介しましょう。

1405179_2 

これがレジスタファイルです。TMR2のような記号が入っているところは、ポートのように何らかの機能がすでに割り当てられている場所です。ですからそれ以外の目的には利用できまません。5番地のPORTAは既に出てきましたね。ポートのAグループです。

※のところはまだ何も割り当てられていませんが、将来割り当てられる可能性があるので勝手に使ってはいけません。

さて、32番地から127番地の灰色の部分ですが、ここはプログラムで自由に使っていいデータ領域です。ここが本来のメモリ領域と思っていいです。

たとえば、これからインタバルシャッターのプログラムを作りますが、残り露出時間を保存しておくメモリ領域が必要です。これを32番地に割り当てることができます。別に33番地でも127番地でもどこでもいいです。

このように自由に使っていい領域のレジスタを汎用レジスタといいます。

困った問題

さて、上のレジスタファイルを見るとレジスタは未使用も含めて、0番地から127番地までの128個あります。実はこの128個というのはマイコンとしては全然足りないのです。マイコンの中にはポート以外にもたくさんの機能があり、それらをレジスタに割り当てなければなりません。また、プログラムで使う汎用レジスタも大きなプログラムになればいっぱい使います。とにかく128個というのは全然少ないのです。

それではもっと増やせば良いのではないかと思います。実はそれが簡単にはできないのです。それが命令コストの問題です。

またまた出てきました命令コスト。この命令コストを理解すれば、難しいPICマイコンの概念がほんとよく分かるようになります。

次回命令コストについて、ちゃんとした説明をします。

| | コメント (0)

「天文屋のためのマイコン入門」データメモリとは

本日2つの目の記事アップです。

プログラムで使うデータを保存しておく物理的な領域をデータメモリといいます。その基本単位はバイトですが、もちろん1バイトだけではありません。たくさんのバイトの集合体がデータメモリです。

これらのバイトを区別するために各バイト(部屋)には番地が割り当てられれています。したがって、メモリ上のデータを指定するには(アクセスするには)番地を指定しなければなりません。

1405176_2 

さて、以前LEDを点灯させるプログラムを出したました。それを見てみましょう。

MOVLW  255
MOVWF  5

この命令は255をワーキングレジスタに転送し、それを5番地のデータメモリに転送しています。図で表すと以下のようになります。

1405177

データメモリの5番地は実際にはポートであって、メモリの機能はありません。ただ、命令によるアクセス方法はまったく同じですから同一視してかまいません。

レジスタファイル

今まで、データメモリという言葉を使ってきましたが、PICマイコンではレジスタファイルというらしいです。バイトの何らかの対象物をすべてレジスタといいます。ワーキングレジスタ、ポート、プログラムで使うデータ。これらはすべて1バイトのアクセス単位で、命令はすべてこれらを対象物にします。これらをまとめてレジスタといいます。

で、レジスタがたくさん集まったということで「レジスタファイル」といいます。従って、以後、レジスタファイルということにします。

レジスタの中で番地がないのはワーキングレジスタだけです。あとのすべては、レジスタファイルの中にあり、番地が決まっています。命令でそのレジスタにアクセスするには、この番地を指定します。

| | コメント (0)

「天文屋のためのマイコン入門」バイトとは

さて、以前マイコンのデータは0か1で表現できると説明しました。この0か1の情報の単位をビットといいます。

マイコンはビットを単位として処理してもいいのですが、ビット単位ではあまりにも効率が悪いので、ビットを8個集めた、バイトを処理単位とします。(ビットが処理単位の命令もある、ビット命令という)

これがバイトです。

1405173

命令の説明でワーキングレジスタというのが出てきましたが、ワーキングレジスタはまさにこのバイトそのものです。

また、データメモリやポートもこのバイトが基本単位です。

バイトは8ビットの情報単位ですから、2の8乗=256通りの数を表現できます。そこで、この256通りに0~255を割り当てればマイコンのデータとなります。

その様子を下の図に示します。

1405174

バイトの各ビットの0か1をそのまま2進数表現とすれば数を表すことができます。2進数を10進数に変換するのはちょっと面倒なので、16進数を仲介させたり、最初から16進数で表したりします。なぜ16進数が便利かというと、桁数が固定できるからです。2進数の4桁が16進数の1桁になります。進数の詳しい話は別のところで勉強して下さい。この連載では分かりやすい2進数でなるべく表現するようにします。またあまり16進数は使わないようにします。

さて、256通りの表現を0から255に割り当てましたが、-128から127に割り当てれば、正負の数を表すことができます。この連載では負数は扱わないので、これ以上詳しくは説明しませんが、数の割り当て方で、いろんな数(小数も含む)を扱うことができます。ただ、どんな割り当て方をしてもそれは人間の解釈であって、マイコン自体はやっていることは同じです。

さて、バイトは255までの数しか格納できません。ではそれを超えたらどうなるでしょうか?

以下の図は255の数が入ったバイトを表してします。これに1を足してみましょう。

1405175

各ビットは次々と桁上がりしていき、最後は'1'がバイトから溢れてしまい(桁上がり)バイトには0が残ります。

つまり溢れた分は、バイトには収まらないので、これは0と同じです。つまり

255+1=0

なのです。256と0は等しいのです。これは覚えておいてください。

ちなみに溢れた'1'、どこへ行くのでしょうか? バイトに収まらないので捨てられるのでしょうか?

実は捨てられないで、ステータスレジスタ(これもバイトですが)というところに、一時的にですが保存されます。これがあるため、実はバイトを超える大きな数の計算もできるのです。詳しくはいずれ、話をすることがあるかもしれません。

今日はちょっと難しい話が続いたのでここまで。

| | コメント (0)

2014年5月17日 (土)

「天文屋のためのマイコン入門」データの基本

ここのところマイコンの命令について説明してきました。今まで、転送命令と演算命令を説明しました。まだ制御命令が残っています。しかし、マイコンのプログラムは命令とデータからなります。命令とデータは双対なのです。ですから、命令だけ説明するのはバランスが悪いので、ここら辺で、データについても説明します。

データというのは大雑把に言えば数です。この数を入れるメモリやレジスタなどをデータということもあります。

さて、数といえば数学ですが、マイコンで扱う数は数学で扱う数と比べて以下のような違いがあります。実はこの違いの感覚が非常に重要なのです。

マイコンの数の特徴

●その1 限界値がある
数学ではいくらでも大きな数を扱うことができます。しかし、マイコンの世界では数を入れるメモリ単位のサイズが決まっているので、自動的に限界値があります。ちなみにPICマイコンの場合、8ビット以上の数を一度に扱えないので、その限界は0から255です。

以外に限界が小さいこのとに驚くかも知れません。PICマイコンでは1000という数でさえ、一度には扱えません。(小さい単位に分解して複数命令で扱うことはできる)

マイコンでは限界値を超えたら0に戻ります。たとえば、256は0と同じです。257は1と同じです。まったく同等です。つまり255を超えたら、256で割った余りがその数になります。これは数学で言うところモジュラー計算と同じです。

●その2 整数しか扱えない
マイコンでは小数は扱えません(扱えるのもある) これはそれがたとえ計算途中であっても同じです。次の計算をしてみてください。

3÷2×2=?

数学の世界なら、3÷2×2=1.5×2=3です。
また、3/2×2と考えて、2が約分できるから3です。

さて、マイコンの世界では3÷2は整数しか扱えないので、1.5ではなく1です。したがって、

3÷2×2=1×2=2

となります。また約分のような概念はありません。

●その3 正負(符号)の概念がない
さてマイコンの世界ではプラスとかマイナスの概念がありません。正確に言うとすべて正数として扱います。つまりマイナスがない。

マイコンをちょっと知っている方は、「いやそんなことはない、符号付きの命令があるではないか」と思うかも知れません。

確かに符号付きの命令や負ならフラグがセットされるような命令はあります。ただ、これはあくまでも人間が正負をそのように解釈しているだけであって、マイコン自体に正負の区別があるわけではありません。

また、マイコンのデータで、負の数は最上位ビットが'1'と教わることがあります。しかし、これも解釈次第です。マイコンからすれば最上位ビットが符号なのか、それともデータの第8ビットなのかまったく区別がありません。

さて、数学で扱うところの数とマイコンで扱うところの数ではこれだけ違いがあります。この違いを十分理解していないと、初めてマイコンを学習する人にはあれ?と思うことがあるかも知れません。

次回はもうちょっと詳しいデータの話をします。

| | コメント (0)

2014年5月16日 (金)

「天文屋のためのマイコン入門」インクリメント、デクリメント

さて、演算命令の説明が終わりましたが、マイコンのプログラムでは、データに1を加算したり、減算したりすることが頻繁にあります。

たとえば、ある処理を10回繰り返したいときは、データメモリに10を格納しておき、一回処理するごとに1を引いていきます。そして0になったら処理を終了するようにします。

このように1を加算したり、減算したりする命令は頻繁に使われるので、特別な命令が用意されています(クリア命令と同じように)ちなみに、マイコンの世界では1を加算することをインクリメント、1を減算することをデクリメントといいます。インクリメント、デクリメントの命令はつぎのとおりです。

1405161

これらの命令は命令コストは余分にかかりません1のままです。なぜなら加算、減算する数値は1に固定されているので、数値を指定する必要がないからです。

| | コメント (0)

2014年5月13日 (火)

「天文屋のためのマイコン入門」演算命令の続き

だいぶお休みしましたが、また再開したいと思います。

演算命令、加算命令だけ紹介しましたね。

今日はその他の演算命令について説明します。まずは減算命令です。

加算の時と同じように考えると減算命令も加算とまったく同じで、ADDをSUBに変えれば完成します。

1405131_2 

ただし、減算は加算と違って、可換ではありません。引き算の順序が重要です。上記の表を見ると、ワーキングレジスタからデータメモリを引く命令がありません。ほんとはあってもよさそうなのですが、命令の節約でしょうか?ありません。

仕方がないので、データメモリから、ワーキングレジスタを引いたものを符号反転します。符号反転は0から引けばできます。

例 ワーキングレジスタからデータメモリの減算
SUBWF   f , W      データメモリからワーキングレジスタを減算
SUBLW   0     それを0から引く、つまり符号反転

あと、ワーキングレジスタから数値を引く命令もありませんが、これは数値の符号を反転して加算に変えれば実現できます。

例 ワーキングレジスタから3を引く
ADDLW    -3        -3にワーキングレジスタを足す

さて、加算、減算命令が完成しましたが、そのほかに論理演算命令があります。これらは具体的にどのように使うかは以後説明しますが、命令だけ書いておきます。

論理和 ADDをIORに変える
論理積 ADDをANDに変える
排他的論理和 ADDをXORに変える

1405132

以上で2項の演算命令の説明は終わりです。

| | コメント (0)

「理想のポタ赤を作る」仕様発表

模型が完成したので、より詳しい仕様が決まりました。

本体

●大きさ 幅86mm 奥行き66mm 長さ150mm 回転部、突起含まず

●赤経部 ウォーム歯数120枚 1/36ギア内蔵ハイブリッドパルスモーター
回転テーブル 直径8cm 中心カメラネジ M6タップ×3

●赤緯部 ウオーム歯数80枚 減速機ウオーム歯数30枚 ハイブリッドパルスモーター マイクロステップ駆動
回転テーブル 直径6cm アルカスイス互換クランプ M8×2(35mm間隔)

●極軸望遠鏡 6倍9.3°ビクセン単眼鏡 ミラーによる直角視。明視野照明内蔵 レチクルは2重円(目盛りは特になし)

●電源 12V外部より供給

●インターバルシャッター内蔵 露出時間設定スイッチ、スタート・ストップスイッチ

●恒星時、1/2恒星時、太陽時、月時、反転スイッチ

●無線Bluetooth搭載。パソコン、スマフォから無線で操作可能。

●オートガイド端子ST-4互換

●ハンドコントローラ接続可能

●十字キーによるモータ制御 1倍~32倍 連続微動、ステップ微動(0.1°~10°)

●モーター制御とインターバルシャッターを組み合わせたプログラム撮影可能。パソコンやスマフォなどから撮影プログラムをプリセット。一晩の撮影計画をあらかじめプリセットしておくことも可能。またモザイク自動撮影などに応用可能。(撮影時はプリセットを呼び出すだけでパソコン不要)

●自動導入インターフェース(形式は未定)搭載

電源ユニット

●大きさ 幅86mm 奥行き14cm 高さ11cm

●リチウムイオン電池パック10AH搭載

●カメラ用可変安定化電源 5~9V 3A 半固定抵抗による可変

●ヒーター用 PWMパワーコントロール電源 2チャンネル

ウエイトシャフト

●φ20mm ビクセン互換 ワンタッチ取り付け

| | コメント (3)

2014年5月11日 (日)

「理想のポタ赤を作る」電源ユニットの模型

電源ユニットの模型もできました。

1405111

ここに10AHくらいのリチウムイオン電池を搭載する予定です。またカメラ用に可変電源、ヒーター用に2chのPWM電源も搭載して、これだけで一晩もたせる計画です。

さすがに、こうなると大きくなって、ポタ赤らしくなくなります。ただ、一晩撮影するとなると、電源は絶対必要ですからね。

システムのコンパクト性や使いやすさは、必要な物すべて一式含めて、また遠征から帰ったあとの充電やメンテナンスの容易さをなどをすべて含めて評価するべきで、本体だけ小さいからといって、コンパクトだとか、お気楽撮影とか評するのは間違っていると思います。

そういった意味では、この電源ユニットをつけることによって、完全にこれで完結した状態になりますから、組み立てたまま運んで、あとは置くだけ。という便利さです。

ちなみに、オールイワンの観念から言えば、極軸調整用の上下水平微動も付けたかったのですが、これは、はっきりいって私には無理、技術的に難しいです。単純な金属加工だけでは必要な強度のものが設計できませんでした。意外と難しいんですよ。

BORG67FLを搭載した写真も掲載しておきます。

1405112

また、電源はメインの機材からもらうからいいよ、という人は、このような傾斜ブラケットだけ利用すればだいぶコンパクトになります。

1405113

もちろん、三脚雲台に本体を直接載せて、雲台を傾けても良いです。

次回は、詳細仕様を発表します。

| | コメント (2)

2014年5月 3日 (土)

「理想のポタ赤を作る」模型完成

模型作りが完成しました。前回のバージョンよりだいぶコンパクトになりました。

1405031

極軸望遠鏡は単眼鏡を使っていますが、レチクルをどうやって作るか考えています。半径1mmくらいの円に目盛りを刻むので、普通のプリンタで印刷したくらいでは全然荒くてダメでした。

1405032

あと、ポルタの部品を使っていますが、実際の完成品ではポルタは使いません。ポルタはベアリングを使っていませんが、ベアリングを使う予定です。高速回転時、抵抗が全然違います。

| | コメント (7)

« 2014年4月 | トップページ | 2014年6月 »