あやの
NゲージをベースとしたDCCについての日記を 書いています。 ある程度貯まりましたら、鉄道模型のDCCのまとめサイトに まとめています。 借りている容量が最大に達しましたので、移転します。 ★移転先:http://maison-dcc.sblo.jp/
FX効果のパターンをいろいろ作ってみました。
//グロー管蛍光灯切れそう という、点灯パターンなんて、
誰使うだろうw。
スケッチはこちら。
https://github.com/ayanosuke/FunctionDecoder2_EffectFunction
SmileFunctionDecoderの紹介ページ
http://dcc.client.jp/FunctionDecoderVer2.html
周知のバグ・・・
本当は、CV49 の値でFX効果を切り替えたいのですが、切り替わりません・・・
シリアルの口が無いからデバックしづらい。
→シリアルデバックポートのある、Decoder開発ボードでデバックする予定。
モールス信号効果も数パターン用意
こっちはコメントを外せば使える様になっています。
動画を追加しました。
二次元配列のポインタを扱うための、↓の宣言にたどり着くまで数日要しましたw
unsigned char (*ptn)[4];
//グロー管蛍光灯切れそう という、点灯パターンなんて、
誰使うだろうw。
スケッチはこちら。
https://github.com/ayanosuke/FunctionDecoder2_EffectFunction
SmileFunctionDecoderの紹介ページ
http://dcc.client.jp/FunctionDecoderVer2.html
周知のバグ・・・
本当は、CV49 の値でFX効果を切り替えたいのですが、切り替わりません・・・
シリアルの口が無いからデバックしづらい。
→シリアルデバックポートのある、Decoder開発ボードでデバックする予定。
モールス信号効果も数パターン用意
こっちはコメントを外せば使える様になっています。
動画を追加しました。
二次元配列のポインタを扱うための、↓の宣言にたどり着くまで数日要しましたw
unsigned char (*ptn)[4];
Smile Function DecoderをLED表示だけではもったい無いというご意見をいただき。
手持ちにあった、5Vのリレーを動かしてみました。
F1にomron G6H-2F 5VDC を接続しました。
コイル抵抗178Ω 動作電流28.1mAです。
FETの負荷としても全然余裕です。
逆起電圧吸収用ダイオードを合わせて取り付けます。
※ちょっと見づらいですけど、リレーのコイルと並列にダイオードを取り付けます。
リレーON
ch1はG-S間電圧、ch2はD-S間電圧
リレーOFF
ch1はG-S間電圧、ch2はD-S間電圧
D-S間が7.5Vくらい上昇しているけど、FETの耐圧以内なので、問題無いでしょう。
リレーON
ch1はリレーコイル間電圧
リレーOFF
ch1はリレーコイル間電圧
ゲート抵抗が入っているので、ぬるっと立ち上がるので、リレー動作は
問題ありませんでした。
ポインターはコイルに双方向に流さないといけないので、使えないです。
電流プローブほしいなぁ。
手持ちにあった、5Vのリレーを動かしてみました。
F1にomron G6H-2F 5VDC を接続しました。
コイル抵抗178Ω 動作電流28.1mAです。
FETの負荷としても全然余裕です。
逆起電圧吸収用ダイオードを合わせて取り付けます。
※ちょっと見づらいですけど、リレーのコイルと並列にダイオードを取り付けます。
リレーON
ch1はG-S間電圧、ch2はD-S間電圧
リレーOFF
ch1はG-S間電圧、ch2はD-S間電圧
D-S間が7.5Vくらい上昇しているけど、FETの耐圧以内なので、問題無いでしょう。
リレーON
ch1はリレーコイル間電圧
リレーOFF
ch1はリレーコイル間電圧
ゲート抵抗が入っているので、ぬるっと立ち上がるので、リレー動作は
問題ありませんでした。
ポインターはコイルに双方向に流さないといけないので、使えないです。
電流プローブほしいなぁ。
SmileFunctionDecoderを使って、FX効果が作れるスケッチを作ってみた。
自由にカスタムできる様に、↓な感じにスケッチを書きます。
//FX効果
スケッチは後で公開しますが、DCCの受信に影響無い様に、
/* HeadLight control Task (10Hz:100ms) */
自由にカスタムできる様に、↓な感じにスケッチを書きます。
//FX効果
//Cmd,Time,値,分周比
//Cmd I:初期状態,O:出力,S:スイープ,L:ループ,E:終了
//Cmd I:初期状態,O:出力,S:スイープ,L:ループ,E:終了
unsigned char ptn[4][5]={{'I',0,5,1},{'S',50,255,1},{'S',50,5,1},{'E',0,5,1}}; // 三角波
//モールス効果
unsigned char mptn[]="1000 00 0100_1000 00 0100_1000 00 0100_1000 00 0100*";// ばか ばか ばか ばか (ぽにょ) 0:単音 1:長音
※しょーもない、モールス信号ですみません、ぽにょで出てきたモールス信号ですw
スケッチは後で公開しますが、DCCの受信に影響無い様に、
/* HeadLight control Task (10Hz:100ms) */
void HeadLight_Control()
の100ms周期内に、FX効果用とモールス効果用ステートマシンを作りました。
標準で、ランダムで光るライトや、マーズライト、フラッシュライト、ストロボの
パターンを登録しておくと使えるデコーダになりますでしょうかw
モールス効果は、需要があるか?ですが、ジオラマで船を浮かばせた時の
効果にでもw
※ソースコピペしたら、インデントめちゃくちゃですね・・・
パターンを登録しておくと使えるデコーダになりますでしょうかw
モールス効果は、需要があるか?ですが、ジオラマで船を浮かばせた時の
効果にでもw
※ソースコピペしたら、インデントめちゃくちゃですね・・・
//---------------------------------------------------------------------
// FX効果ステートマシン
// 100ms周期で起動
// unsigned chart ptn[4][5]{{'I',0,0,1},{'S',20,255,1},{'S',40,0,1},{'E',0,0,1}};
//---------------------------------------------------------------------
static char state = 0; // ステート
static char adr = 0; // アドレス
static int timeUp = 0; // 時間
static float delt_v = 0; // 100msあたりの増加量
static float pwmRef =0;
S00:
if(gState_F0 == 0){ // F0 OFF
state = 0;
}
switch(state){
case 0: // S00:idel
adr = 0;
timeUp = 0;
pwmRef = 0;
TCCR1 = 1<<CS10; //分周比をセット
// OCR1B有効 high出力
GTCCR = 1 << PWM1B | 2 << COM1B0;
analogWrite(O4, 0);
if(gState_F0 == 1){ // F0 ON
state = 1;
}
goto S00; // 100ms待たずに再度ステートマシーンに掛ける
break;
case 1: // S01:コマンド処理
if( ptn[adr][0]=='I'){ // I:初期化
timeUp = ptn[adr][1];
pwmRef = ptn[adr][2];
delt_v = 0; // 変化量0
TCCR1 = ptn[adr][3]<<CS10; //分周比をセット
analogWrite(O4, (unsigned char)pwmRef); // 0〜255
adr++;
state = 1;
goto S00; // 100ms待たずに再度ステートマシーンに掛ける
} else if( ptn[adr][0]=='E'){ // E:end
state = 0;
} else if( ptn[adr][0]=='L' ){ // L:Loop
adr = 0;
state =1;
goto S00; // 100ms待たずに再度ステートマシーンに掛ける
} else if( ptn[adr][0]=='O' ){ // O:出力
timeUp = ptn[adr][1];
pwmRef = ptn[adr][2];
TCCR1 = ptn[adr][3]<<CS10; //分周比をセット
delt_v = 0;
state = 2;
} else if( ptn[adr][0]=='S' ){ // S:sweep
timeUp = ptn[adr][1];
TCCR1 = ptn[adr][3]<<CS10; //分周比をセット
delt_v = (ptn[adr][2]-pwmRef)/timeUp; // 変化量を算出
state = 2;
}
break;
case 2: // S02:時間カウント
timeUp--;
pwmRef = pwmRef + delt_v;
if(pwmRef<=0){ // 下限、上限リミッタ
pwmRef = 0;
} else if(pwmRef>=255){
pwmRef = 255;
}
analogWrite(O4, (unsigned char)pwmRef); // 0〜255
if( timeUp <= 0 ){
adr ++;
state = 1; //次のコマンドへ
}
break;
default:
break;
}
//#endif
//---------------------------------------------------------------------
// モールス効果ステートマシン
// 100ms周期で起動
// 単音1,長音3,文字間3,単語間7
//---------------------------------------------------------------------
void MorseCode_Control()
{
static char state = 0; // ステート
static char adr = 0; // アドレス
static char cnt = 0; // 単音、長音のカウント
if(gState_F3 == 0){ // F3 OFF
state = 0;
}
S10:
switch(state){
case 0:
if(gState_F3 == 1){ // F3 ON
state = 1;
digitalWrite(O2, LOW); // 消灯
goto S10;
break;
}
case 1:
switch(mptn[adr]){
case '0': // 単音?
cnt = 1;
digitalWrite(O2, HIGH); // 点灯
state = 2;
break;
case '1': // 長音?
cnt = 3;
digitalWrite(O2, HIGH); // 点灯
state = 2;
break;
case ' ': // 文字区切り
cnt = 3;
state = 2;
break;
case '_': // 単語区切り
cnt = 7;
state = 2;
break;
case '*': // 終わり
state = 0;
break;
default:
break;
}
break;
case 2: // 時間が着たら消灯
cnt --;
if(cnt == 0){
digitalWrite(O2, LOW); // 消灯
state = 3;
}
break;
case 3: // 短点と長点の間隔処理(一回通る)
adr++;
state = 1;
break;
default:
break;
}
// LightMes(0,1);
}
Arduinoをベースとして作成しました、マイコンをATtiny85を使用した、
DCC用SmileFunctionDecoderの通販を始めます〜。
通販サイト
http://ayanos.cart.fc2.com/
組み立てやスケッチ
http://dcc.client.jp/FunctionDecoderVer2.html
お求めやすい様に、生基板と部品のみセットを分けまして、10枚じゃなく、
5枚づずに分けました。
生基板をたくさん買っていただいても良いです(^^;
DCC用SmileFunctionDecoderの通販を始めます〜。
通販サイト
http://ayanos.cart.fc2.com/
組み立てやスケッチ
http://dcc.client.jp/FunctionDecoderVer2.html
お求めやすい様に、生基板と部品のみセットを分けまして、10枚じゃなく、
5枚づずに分けました。
生基板をたくさん買っていただいても良いです(^^;
ブログ内検索
カテゴリー
最新記事
(12/31)
(12/31)
(12/29)
(12/23)
(12/18)
リンク
プロフィール
HN:
あやのすけ
性別:
非公開