第16週 16F877で遊ぶ(準備体操2)
先日のJリーグ開幕戦。今年は国立のアントラーズ−グランパスを観戦してきました。
山とんぼ、人が変わっちゃうんですよ、サッカー見てると。
「くぉらぁ、ばかものぉ!しっかり走らんかい!」
「あ、あ、あ、バカ、バカ、バカ! 後ろ、後ろ、後ろ!」 
きっと選手も「見も知らないおっさんに指図されるいわれはないやい!」などと言いたいところでしょう。もっとも選手には聞こえてはいないですかね。春休みマンガ祭りなんかやってる映画館に行くと、ガキがスクリーンに向かって悪者が後ろから忍び寄って来るのを必死で教えてますが、まあ、だいたいそんなレベルですね。サッカーオヤジと幼稚園児、いいとこ勝負。(^^;
まあ、サッカー場だからいいけどね、街でいきなり、「くぉらぁ!」なんて叫んでるおっさんがいたら、アブないから、私、遠巻きにします。


16F877で遊ぶ(準備体操2)

先週は苦労の末、うまいことモータも回ったしLCD表示もできたので、今度はモータとLCDを一緒に駆動させようと思います。
モータが回っているとき[Motor Run]と表示させます。なんと無意味な!(^^;



ステッピングモータのプログラムとLCDのプログラムをレジスタアドレスがぶつからないように移動しながらくっつければいいわけですが、思わぬ伏兵が現れました。モータ速度が一気に上昇ししばらくするとLCD表示も停止してしまいます。
いろいろとMPLABでデバッグしたり試行錯誤したりの結果、どうやら以下ようなことらしいとわかりました。

1.LCDのBUSYチェックでバンク切り替えしてバンク1でBポートを一時的に入力としている。
2.ちょうどこのとき割り込みがかかると割り込み内のプログラムはバンク1で処理することになる。
3.これを避けるには
  (1)BUSYチェック中は割り込み禁止
  (2)割り込み先頭でバンク0に切り替え(復帰はレジスタ復帰操作のときにSTATUSが戻るから特に考慮しなくてOK)

ともにうまく動作しましたが、BUSYチェック中の割り込み禁止ではその間スッテッピングモータのパルス遅れとなり波形が乱れると考えられます。したがって(2)の方法としました。



前回の16F877回路

プログラムは別ページに
LCD表示を”Motor”と”Run”を入れ替えながら表示し、一方でモーター駆動が同時にできました。
これも、まあ、考えてみればなんと無意味な。(^^;





■今週のなるほど

LCD表示でBUSYチェックをするときのバンク切り替えの処理は注意深く考えておかなければいけないようです。
単にレジスタ待避すればなんでも済んでしまうとはいかないようで、このあたりが割り込みの使いにくさです。