PIC 16F88のPUSH POPについて

久しぶりのPICネタである

ミッドレンジのPICである16Fシリーズには、データスタックが無い
プログラムスタックは8段(最近のF1シリーズは拡張されている)となり、ネスティングが8段までとなり、プログラムスタックは、ソフトで読み書きは出来ないのである

PICでプログラムを書いていると、WレジスタがPUSH/POP出来るればと言う妄想が浮かんで来る、ついては、PUSH POPマクロをでっち上げてみた

マクロを使う場合、コードの中に以下のデータを定義する
.
.
dstack Udata_shr  h’78’
dstack_area res     8
;dstack_sp res  1
;dstack_fsr res 1
;dstack_w res  1
;dstack_data res 4
.
.

内容は Fレジスタの78番地からスタック用として8バイトを確保している
貴重な8バイトなのに、スタック出来るバイト数は4バイトなのは、愛嬌である

ちなみに70H~7FHのFレジスタは共用メモリとして重要である
メモリバンクがどこに設定されていても、必ず読めるアドレス空間である
従って、ここにスタックデータを置くことになる
以下がマクロである

;—————————————-
;Memory addrerss 00h-FFh 対応 (bank 0,1 only)
;PUSHW
;Wレジをスタックする
;78h dstack_sp データスタックポインタ
;79h dstack_w W reg save
;7ah dstack_fsr FSR save
;7bh-7fh dstack_data 5 level stack data
;

dstack_sp equ      h’80’-8
dstack_fsr equ     h’80’-7
dstack_w equ      h’80’-6
dstack_data equ  h’80’-5
;

;例: PUSHW
;—————————————-
PUSHW macro
movwf dstack_w    ;Wreg save
movfw FSR
movwf dstack_fsr   ;FSR save

movfw dstack_sp
addlw dstack_data   ;W=stack data offset
movwf FSR              ;FSR (stack_data)+sp

movfw dstack_w
movwf INDF            ;W → stack_data

incf dstack_sp,F        ;stack_sp ++

movfw dstack_fsr
movwf FSR               ;restore FSR
movfw dstack_w       ;restore W
endm

;—————————————-
;Memory addrerss 00h-FFh 対応 (bank 0,1 only)
;POPW
;スタックからWにデータをセットする
;78h dstack_sp データスタックポインタ
;79h dstack_w W reg save
;7ah dstack_fsr FSR save
;7bh-7fh dstack_data 5 level stack data
;
;例: POPW
;—————————————-
POPW macro
movwf dstack_w      ;Wreg save
movfw FSR
movwf dstack_fsr     ;FSR save

movfw dstack_sp       ;W=stack data offset
addlw dstack_data     ;W=stack data offset
movwf FSR
decf FSR,F                  ;FSR (stack_data)+sp-1

movfw INDF              ;stack_data → W

movwf dstack_w         ;Wreg save
movfw dstack_fsr
movwf FSR                  ;restore FSR
decf dstack_sp,F           ;stack_sp —
movfw dstack_w          ;restore W
endm

 

 

MPLABX

<MPLAB X IDE の画面>

デバッグはマダである
従って利用するには、大変な勇気が必要となると思われる
当然であるが、サポートは何も無いのである

実は少し使って見たので有ったが、WレジスタのPUSH/POPのために、貴重なプログラムエリアを無駄に消費してしまうのである

画期的と思ったのは私の妄想であった
。゚(゚´Д`゚)゚。

久しぶりの秋葉原

パーツの買い足しに行って来た

久しぶりの秋葉原である
最近の秋葉原は、昔と雰囲気が違って私には違和感があるので、必要な時しか行かなくなった
しかし、秋月電子さんの辺りは、昔の秋葉原の雰囲気が残っていて嬉しい
秋月電子さんは、相変わらず超満員で店内は身動きもしずらい状態であった
素晴らしいことである

IMG00303

<超満員の秋月電子さん>

最近ではRaspberry Piの値段も下がりかなり安価にlinuxサーバの基板が手に入る
Raspberry Pi関連の書籍も充実しており、興味をそそるのである

最近では、ZigBeeやXBeeなどの無線ネットワーク関連のモジュールも安価なってきている
これら、駆使すれば現在、色々と騒がれているIoTへの対応が可能となるであろう
無線モジュールも技適取得済であり、色々と使えそうである

これら、現代に対応したパーツやモジュールを安価に販売している点が、秋月電子さんの繁栄まポイントであろう

私も、ZigBeeで暫く遊んでみるのである

VFOマシンは楽しい

気持ちは1970年代そのまんまである
当時、良く聴いていた’ガンダーラ’が流れてきそうな感じである

昔、欲しくても当然買って貰える機械ではなく、指をくわえて眺めていた機械たちなのであった

IMGP6207

<Drake R-4A,TRIO TS-700GⅡ,FT-101E,FT-101ZD>

私は東日本大震災後に、なんか有った時にと、ハンディ機で再開局をしたのであった
再開局後は、ハンディ機を使ってU/Vでエコーリンクで各局のお世話になっていたのだが
ふっと気が付くと、青春の思い出が沢山集まっていたのである

人間の想いって、以外と凄いことかも知れない

開局当時は仲間達で、遅くまで色々と喋っていたのが懐かしい
HFも当時は出られない7.1MHzより上の辺りで、JA10のコールが良く聞こえていたのである
それを聞き入っていると恋愛相談だったりして、ワッチも結構楽しかった

学生時代も終わり就職すると、ポツリ・ボツリとラグチュー仲間が抜けていった
自分もいつの頃か無線機の電源を入れる事が少なくなって、最後にはみんな押入れにしまわれたのあった
かなりの人がこんな感じ、縁遠くなっていたのではないかと思う

パソコン通信が流行った頃、RBBS(アマチュア無線を回線とした掲示板)で色々やったのが良い思い出ある
サーバモドキのパソコンホストを立ち上げ、ピー.ぎゃッ… の変調音がとても懐かしい

IMGP6211

<懐かしのTNC 何故か未だに捨てられない>

あれから20年以上の年月が過ぎてカムバックしたのであるが、特に144MHzにQRVしている局が激減していてのがビックリであった
チャネル争いで喧嘩が絶えなかったあの喧騒が嘘の様である
皆様はどこに行かれたのでしょう?

私は根性なしなので、DXCCを追っかける根性とアンテナもないし、国内アワードをする気持ちにもならない、電波を出すのは極稀である
けれど、妙に昔の機械は好きでVFO機を弄って遊んでいる時が今は楽しいひとときである

変人である (ToT)

RC発信器 VP-7101A である

RC発信器と言ってもピンとこないかも知れない
早い話が、低周波数信号発生器である

現在であればパソコンとソフトウェアで大概の事が出来るし、2信号等々の出力や特殊波形も出力出来る
しかし私は、スタントアローンの機械が使いやすいのである

この低周波発信器は10Hz~1MHzまで周波数が可変出来る
当然、AF発信器なので出力インピーダンスは600Ωである
ちょっとしたオーディオ機器の確認には便利である、スイープも当然手動であるがダイアルを回すだけで済むので操作が楽である
耳のf特確認には特に便利である

送信機を弄っていると、連続信号の出力がどうしても必要となる
これにはパソコンで良いが、弄っている機械の側に、低周波数発振があると送信状態の確認に便利である

IMGP6194
<普段使用している National VP-7101A>

IMGP6195
<中身はこんな感じである>

元々はオーディオ機器の確認用であろう、特にこの機種は歪の無い正弦波が出力されている。 もし歪率計があれば一度測ってみたいものである

また本来の使い方ではないかも知れないが、455KHzの中間周波数の受信機に対して、簡易的にBFOの出力を作れ、強度が可変出来るので以外と使えたりする(ビッチの調整はバーニア機構が無いと少し厳しい)

最近オークションでも値がこなれているので、もし見つけたら入手して置くと色々と便利である

ステップアッテネータ

高周波信号で色々と遊んでいると必ずと言ってよい程、必要になって来るのがアッテネータだと思う
回路上では抵抗器の組み合わせで3dBアッテネータとか6dBアッテネータなどは、インピーダンス整合に何気に使ってしまうのであるが、
ステップアッテネータは0dBm等の基準信号に対して正確に電力を減衰させるために使用する
Sメータの較正等には便利である

例えば40dBμV(EMF)の信号は30MHz以下では,S9のレベルであるが、この信号に6×8=48dBのアッテネータを入れた信号がS1の基準値となる

ステップアッテネータがあれば、基準信号に対して減衰量が制御が出来るので、用途は幅広い

IMGP6191

<1dB~112dBまでのステップアッテネータ 0.1W>

IMGP6192

<ケースの中>

便利なステップアッテネータであるが、気を付けるポイントが3点ある

・定格電力量を絶対に超えないこと <中の抵抗が焼き切れる>

・-60dB位になるとケーブル等々からの漏れ電波があるので、高減衰の場合はその確度に気を付けること

・周波数帯域を超えると減衰量が変化するので、規定の帯域無いで使用する

またQRPの運用にも応用出来る、以前にハンディ機にパワーアッテネータと、このステップアッテネータを使用して、0.1mWで交信した事もあった <余分なパワーを熱として放出するので決してエコではないが…>

是非、実験室に一個は揃えたい便利グッズである