へのへのもへじ工作室
07 | 2017/08 | 09
S M T W T F S
- - 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 - -

スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

100円DCCデコーダー(2)
今日は、マイコンのプログラム作成の話です。といってもC言語でのプログラミングではあまり一般的ではないので処理内容を中心にお話します。

(1)電源投入されて通信データーが来なければLEDが点灯したままにする。
先日ご紹介した回路は、レール右側がプラスのときにのみマイコンに電源が供給されるようにしています。これで、アナログ運転時にも自動極性判断ができるようになっています。なお、DCC運転時は逆極性になるのが短時間なのでコンデンサで蓄えた電気で動き続けます。通信コマンドが来たら、一旦LEDを消灯にして、あとは通信コマンドに従って点滅させます。

(2)通信データを読み取る
通信データは、PB2ピンのHI,LOで監視しますが、HIからLOに戻る時間が70μS以下であれば”1”、それ以上であれば”0”と判断します(詳細はDCCの解説ページにいろいろと出ていると思います)。連続した1が8回以上来た後、データの取り込みを開始します。データの取り込みは 固定値の"0" + 8ビットデータ となりますが、今回は最大4回分の取り込みを行います。なお、通信データの最後には誤り検出データが付加されますが、今回はこちらのチェックは行いません。

(3)通信アドレスを確認する
今回は、取り付ける客車に合わせてデコーダーアドレスを460(固定値)としていますので、1バイト目=0xc1、2バイト目=0xccと一致するかを調べます。これ以外は、他のアドレスへの命令なので無視します。

(4)コマンドを解読する
今回は、走行方向(テールライトが後ろ側)とF0(ライト点灯、消灯)の状態が一致したら点灯、それ以外は消灯としています。
走行方向の読み出しはアドレスに続くコマンド3バイト目が0x3fのとき、4バイト目でわかります。二進数で一番大きいビット(MSB)が1なら正方向、0なら逆方向とします。なお、F0は3バイト目の内容から読み出し点滅させていますが、この機能はなくてもいいかもしれません。(詳細説明は省略します)


なお、今回のプログラム作成にあたっては、プログラムの実行時間の遅れを考えつつ、1kバイトと非常に小さいプログラムメモリに入れるために工夫が必要です。

AUTHOR: へのへのもへじ
DATE: 08/18/2013 00:05:28
プログラムは以下の通りで、なんとか動作確認できました。

/*
* simple decorder
*
* PB0 = LIGHT1
* PB1 = LTGHT2
* PB2 = DCC Input
*
*/

#include
#define cbi(addr,bit)_ addr &= ~(1
スポンサーサイト
コメント

コメントの投稿














管理者にだけ表示を許可する



天気予報


-天気予報コム- -FC2-

プロフィール

へのへのもへじ

Author:へのへのもへじ
FC2ブログへようこそ!

最近の記事

最近のコメント

最近のトラックバック

カテゴリー

ブロとも申請フォーム

この人とブロともになる

アルバム

ブログ内検索

RSSフィード

リンク

このブログをリンクに追加する

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。