fc2ブログ

Entries

米粒PICでデコーダ その2

PIC10F322で、CV値を保存するための検討を行いました。


データシートを見ると、プログラムメモリとは別の領域に読み書き出来そうなものを発見。

2000h~2003hにあるユーザIDの領域です。

user_id_01.png


ということで、もう少し詳細を調べてみました。EEPROMと比較すると、制限があるようです。


・1番地あたり、14bit(0x3FFF)のデータを保持できる。

・1->0の書き込みは事前の消去不要。

・0->1の書き込みは事前の消去必要。

・なので、書き込み前に、いったん消去(3FFFで埋める)する必要がある。

・しかも消去は2000h~2003h、一度に行われる。

・初期値の設定は下位4bitまでしかできない。(0x0000~0x000F)

・初期値の設定を行わない場合は0x3FFFが書き込まれる。

・消去、書き込みにはEEPROMと同じようなシーケンスを踏む必要がある。


 ファンクション(FL)デコーダとして使うには、2桁アドレス、4桁アドレス、前後進の入れ替えぐらい設定できれば良いと考えます。

 つまり、CV1、CV17、CV18、CV29の4つを保持できれば良いです。

 そこで、2000hにCV1を、順にCV17、CV18、CV29と割り当てることとします。


 OPS命令を受信するたびに消去、書き込みを行うと、目的のCV値以外も消してしまうので、CV1、CV17,CV18と順次受信して仮の変数に代入しておき、CV29を受信した際に、まとめてこれらを書き込みをするように工夫してみました。


 また、初期値の制限もあるので、CV1=3、CV17=0、CV18=0、CV29=2として、最初はアドレス3のデコーダとして動作させ、その状態で、OPSで上記操作で書き込むことで、好きなアドレス、前後進を設定できるようにしました。

user_id_03.png


 この状態で、アドレス3のデコーダとして動作させ、OPSで順に、CV1=58、CV17=192、CV18=128、CV29=34を書き込んでみました。その後、書かれたUserIDをMPLAB X IDEで読み出してみました。

user_id_04.png


 16進数表記ですが、正しく書き込まれていることが確認できました。当然ですが、アドレス128でF0制御も可能でした。これらを、PICの起動時に読み込むことで、アドレスを適宜設定されたデコーダとして動作することができるわけです。


 あと、この前段で、プログラム容量が厳しかったので、DCC信号の読み取り処理をサブルーチン化してダイエットしてみました。


 これで、どれくらいの容量になりますでしょうか。。。。

 結果、405命令で79%となりました。

user_id_02.png


 CV設定操作を誤ると、アドレスが不定となり、以後OPSでの設定もできなくなってしまうので、CVリセット機能を実装する必要がありそうです。


 とりあえず、何とか、デコーダとしては使えそうな道筋は立ちました(^^;)


 この「米粒」みたいなPICでどんなデコーダを作るのが面白いか、考えたいと思います。


スポンサーサイト



この記事にトラックバックする(FC2ブログユーザー)
https://webnucky.blog.fc2.com/tb.php/195-0dfe6020

トラックバック

コメント

コメントの投稿

コメントの投稿
管理者にだけ表示を許可する