Deprecated: Assigning the return value of new by reference is deprecated in /home/users/2/floppy.jp-999953/web/kagakusukimono/class/View.php on line 25

Deprecated: Assigning the return value of new by reference is deprecated in /home/users/2/floppy.jp-999953/web/kagakusukimono/class/View.php on line 30

Warning: Cannot modify header information - headers already sent by (output started at /home/users/2/floppy.jp-999953/web/kagakusukimono/class/View.php:25) in /home/users/2/floppy.jp-999953/web/kagakusukimono/class/View.php on line 81
科学好き者の日々::鉄道模型 DCCのエンコーダ その2

鉄道模型 DCCのエンコーダ その2

DCCの信号の1,0はパルス幅で決まっています。
1はLOW58マイクロ秒、HIGH58マイクロ秒のパルス、0はその2倍以上のパルスとするようです。

せっかくパルス幅変調が簡単にできるPSoCですので、8bitのPWMモジュールを1つ使って1,0を作ってみることにしました。

デバイスセレクションで8bitのPWMモジュールを1つ選択します。出力はP2[0]に接続します。0のとき周期は236(1のとき周期は118)、パルス幅はその半分としてDUTY50%の出力とします。

アプリケーションエディターで
PWM8_1_WritePeriod(236);
PWM8_1_WritePulseWidth(118);
/* start the PWM8! */
PWM8_1_Start();
と記述すれば0のパルス列が出力されます。

これで、プリアンブル12bit、パケットスタートbit、アドレスデータByte、データByteスタートbit、インストラクションデータByte、データByteスタートbit、エラー検出データByte、パケットEndBitの順にデータをつくります。下のようになります。アンダーライン部分がデータでアンダーラインのない部分はスタート/エンドbitです。
111111111111001101110111010001000011

上記のようなデータ列をPSoCのPWMモジュールで発生させてみました。

上手くいきません。。。。同期がとれないのですね。同期をとる手立てをなにもしていないのですから当然なのですが。。。。デバイスエディターでどうしたら同期パルスにできるのか分からないのですよ。
仕方ないので、内部で遅れ時間を作ってパルス幅を変えることにしました。

結局PWMモジュールは使わないため、デバイスエディタはIOピンの入出力の定義のみしか使わないことになってしまいました。


Calendar
<< May 2024 >>
SunMonTueWedThuFriSat
   1234
567891011
12131415161718
19202122232425
262728293031
search this site.
tags
archives
recent comment
recent trackback
others
admin