JR-100の同期信号が整理できたところで、PICのプログラミングに入ります。と、その前にプログラムテスト用の信号をSCLで作っておきます。プログラムとしては単純で、適当な間隔でRA0ピンの状態を0(Low)と1(High)で切り替えるだけです。垂直同期信号を検出する前の処理も確認するために、最初の垂直同期信号を出す前に水平同期信号を1回分出しておくことにします。またプログラム開始直後は100サイクル分の待ち時間を入れておくことにします。
できたプログラムはこれです。
testbench for "pic16f1705" is begin process is variable linenumber : integer := 0; begin RA0 <= '0'; wait for 100 ic; RA0 <= '1'; wait for 32 ic; RA0 <= '0'; wait for 192 ic; loop linenumber := 0; RA0 <= '1'; wait for 32 ic; RA0 <= '0'; wait for 32 ic; RA0 <= '1'; wait for 1792 ic; RA0 <= '0'; wait for 160 ic; linenumber := linenumber + 9; loop RA0 <= '1'; wait for 32 ic; RA0 <= '0'; wait for 192 ic; linenumber := linenumber + 1; exit when linenumber == 256; end loop; end loop; end process; end testbench;
wait for
文の引数に変数を指定しても変数値がちゃんと参照されない(?)ようなので、すべて整数定数を指定しています。サイクル数は命令サイクルを単位として計算します。たとえば入力クロックが3.579545MHzで8.9μsの時間を待つ場合、3.579545[MHz]×8.9[μs]=31.8≒32サイクルとなります。
さてこのプログラムをMPLAB X IDEに読み込ませる前に、何らかのプロジェクトを作ってあるこをと前提とした上で、IDEをシミュレータモードにしておきます。IDEのメニューバーからFile > Project Properties (プロジェクト名)を選ぶとプロジェクトのプロパティ画面が開きます。この画面の真ん中のHardware Toolボックス内にあるHardware ToolsツリーからSimulatorを選んでApplyを押します。通常ここはPICkit3などのPIC書き込みツールになっているはずです。デバッグが終わったら再度PICkit3などに戻しておきましょう。
すると左のCategoriesボックスのConfツリーに"Simulator"が現れるのでそれを選択します。そして真ん中上部のOption categoriesコンボボックスからOscillator Optionsを選ぶと、その下にクロック周波数を設定するテキストボックスが出てきます。
ここで2つの周波数を入力します。
Instruction Frequency (Fcyc) | 命令サイクルの周波数 |
RC Oscillator Frequency | PICの入力クロック周波数 |
今回は3.579545MHzの水晶発振子を外部接続して4xPLLを有効にしているため、Instruction Frequencyを3.579545MHz、RC Oscillator Frequencyを14.31818MHzとし、最後にOKを押します。
そして最後にMPLAB X IDEのSCLでデバッグ(2)で説明したやり方にしたがってPICプログラムにアタッチすれば準備完了です。
次はPICのプログラムを作ります。
コメント