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です。
1111111111110001101110011101000010000111
上記のようなデータ列をPSoCのPWMモジュールで発生させてみました。
上手くいきません。。。。同期がとれないのですね。同期をとる手立てをなにもしていないのですから当然なのですが。。。。デバイスエディターでどうしたら同期パルスにできるのか分からないのですよ。
仕方ないので、内部で遅れ時間を作ってパルス幅を変えることにしました。
結局PWMモジュールは使わないため、デバイスエディタはIOピンの入出力の定義のみしか使わないことになってしまいました。
鉄道模型 DCCのエンコーダ その2
2007-04-15 19:30:23 (17 years ago)
-
カテゴリタグ:
- 未分類
- 前の記事:鉄道模型 DCCの信号発生器(エンコーダ)
- 次の記事:鉄道模型 DCCのエンコーダ その3
- Calendar
<< May 2024 >> Sun Mon Tue Wed Thu Fri Sat 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
- search this site.
- tags
-
- 未分類 (374)
- archives
-
- 201401 (2)
- 201305 (1)
- 201303 (1)
- 201301 (1)
- 201212 (1)
- 201211 (1)
- 201210 (1)
- 201209 (3)
- 201208 (4)
- 201207 (2)
- 201206 (3)
- 201205 (5)
- 201204 (1)
- 201203 (2)
- 201107 (1)
- 201105 (2)
- 201104 (4)
- 201007 (3)
- 201006 (5)
- 201005 (5)
- 201004 (10)
- 201003 (1)
- 201002 (21)
- 201001 (31)
- 200912 (31)
- 200911 (8)
- 200910 (11)
- 200909 (4)
- 200908 (1)
- 200907 (2)
- 200906 (1)
- 200905 (5)
- 200904 (5)
- 200903 (3)
- 200902 (1)
- 200901 (2)
- 200812 (10)
- 200811 (4)
- 200810 (5)
- 200809 (10)
- 200808 (6)
- 200807 (9)
- 200806 (15)
- 200805 (31)
- 200804 (30)
- 200803 (31)
- 200802 (29)
- 200801 (31)
- 200712 (31)
- 200711 (30)
- 200710 (31)
- 200709 (30)
- 200708 (31)
- 200707 (31)
- 200706 (30)
- 200705 (31)
- 200704 (30)
- 200703 (31)
- 200702 (28)
- 200701 (31)
- 200612 (31)
- 200611 (30)
- 200610 (30)
- 200609 (27)
- 200608 (7)
- 200607 (1)
- recent trackback