婚約指輪
結婚情報センター 医師
★
メニュー
■試行錯誤編
■試行錯誤編(6/4)
■試行錯誤編(6/20)
■試行錯誤編(6/21)
■解決編(6/25)
■回路図
■ソースファイル
★
DCC loconetをATMEL AVRでコントロール
■試行錯誤編
とりあえず、OPC_GPONとOPC_GPOFFを繰り返すサンプルソフトから。
AVRの動作クロックは8MHzで、コンパイラは、avr-gcc (WinAVR 20080610) 4.3.0です。
ブレッドボード上に作成。
←クリックすると拡大します。
無駄に電源ランプが明るい(^^;
USBtoLoconetアダプタで通信確認
PC側でモニタできないので、ちゃんとloconetが出力されているのかがわかりません・・・(^^;
オシロスコープが欲しいな。
続く・・・
■試行錯誤編(6/4)
デバックの為に液晶を接続しました。
USBtoLoconetアダプタで通信確認は、プルアップ処理か、ステーションに接続しないとだめ
1)回路図
←クリックすると拡大します。
2)写真
←クリックすると拡大します。
3)ソースファイルのダウンロード
ダウンロード
あれ、mainのループはちゃんと回っているなー。
立ち上げ直後、TxBuf.buf_size が、0xFFからカウントダウンして0x00になるとmain.cのwhile(1)内が
回りだすのが、何かあるのかな。
■試行錯誤編(6/20)
1)chibiegg さんに、サンプルプログラムをUPしていただいて、試してみるが何も起こらず orz
2)AE-UM232Rを接続して、HHD Free Serial Port Monitor でモニタしてみた。
←クリックすると拡大します。
なんだか化けてしまっているが、認識できているものもある。
←クリックすると拡大します。
■試行錯誤編(6/21)
1)原因が良くわからないので大きなブレッドボードに作り直してみた。
←クリックすると拡大します。
乗っかっているのは左上:AE-UM232R、左中:ATtiny2313未使用、中央下:液晶、右上:LocoNet送受信回路、右中:ATtiny2313
2)動きました!、DCS50KのTRACK STATUS LEDがチカチカしました。
うれしかったのでつい・・・テッテッテーに乗せて・・・
人影が写っていましたね。
■解決編(6/25)
OPC_GPON / OPC_GPOFF が、うまく制御できたり出来なかったり不安定な動きをしていました。(掲示板に記載)
オシロスコープ
を導入して(^^;解決しました。
LoconetTestのアプリケーションでPowerOnしたときの全体の波形と、1bitの拡大です。
←クリックすると拡大します。
本当は立下りと立ち上がりのスレッショルドで見るべきなのですが、わかりにくいので、立下り開始と立ち上がり開始で測定した結果
59.50usデス。
※LocoNetは16600bpsなので、1/16600=60.24us
←クリックすると拡大します。
avrでPowerOnしたときの全体の波形と、1bitの拡大です。
←クリックすると拡大します。
56.00usデス。そのままボーレートを計算すると17857bps・・・早いのかな。
ちなみに、OSCCALの値は0x5dでした。
←クリックすると拡大します。
avrでPowerOnしたときの全体の波形と、1bitの拡大です。
OSCCALの値を0x59にしました。
←クリックすると拡大します。
60.00usデス。ボーレートを計算すると16666bps。
←クリックすると拡大します。
工場出荷状態の内蔵オシレータの校正値では、LocoNetのボーレートが高めになってしまうようです。
OSCCAL値を0x5Dから、0x59 にする事で動作するようになりました。
ちなみに、0x5Cでも、正常に動作しました。
main内に
OSCCAL=0x59;
の一行を追加しました。
ちなみに、0x5Cでも、正常に動作しました。
0x5d
0x5d_zoom(56.00us)
0x5c
0x5c_zoom(57.17us)
0x5b
0x5b_zoom(58.00us)
0x5a
0x5a_zoom(58.67us)
0x59
0x59_zoom(60.00us)
■回路図
←クリックすると拡大します。
■ソースファイル
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include "uart.h"
#include "loconet.h"
void
delay_ms(uint16_t ms){
while
(ms--){
_delay_ms(
1
);
}
}
ISR(TIMER0_COMPB_vect){
loconet_timer(
800
);
}
int
main(){
init_uart(
16600
);
//800us割り込み
OCR0A =
100
;
OCR0B =
50
;
TIMSK |=
0
b100;
//COMPB割り込み
TCCR0A =
0
b00000010;
TCCR0B =
0
b00000011;
DDRB =
0x01
;
PORTB =
0x00
;
sei();
uint8_t OPC_GPON[] = {
0x83
};
uint8_t OPC_GPOFF[] = {
0x82
};
while
(
1
){
PORTB = ~PORTB;
loconet_send(OPC_GPON,
1
);
delay_ms(
100
);
PORTB = ~PORTB;
loconet_send(OPC_GPOFF,
1
);
delay_ms(
100
);
}
return
0
;
}
■ソースファイルのダウンロード
ダウンロード
2009.05.31 初版
2009.06.25 2版