忍者ブログ

あやの

NゲージをベースとしたDCCについての日記を 書いています。 ある程度貯まりましたら、鉄道模型のDCCのまとめサイトに まとめています。 借りている容量が最大に達しましたので、移転します。 ★移転先:http://maison-dcc.sblo.jp/

2024/03    02« 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  »04
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

今日は気が進まない出張の為、某所に。
ガラゲーなので、綺麗に撮れていませんが、かがやきです。



停車中も床下からFANの音がガンガン聞こえているんですね。
しかも、向こう側のホームに停車していないと聞こえないんですね。

帰宅後、DCC信号が3.3V系になっている事を確認して終了w



メモ
//------------------------------------------------------------------------
// DCC Receive Routine
DCC 受信処理
//
// Howto:    uses two interrupts: a rising edge in DCC polarity triggers INTx
//           in INTx handler, Timer0 CompareB with a delay of 80us is started.
//           On Timer0 CompareB Match the level of DCC is evaluated and
//           parsed.
使い方:
2つの割り込みを使用します。
DCC極性の立ち上がりエッジでINTxハンドラのINTxがトリガされ、80usの遅延を持つタイマ0のコンペアBが開始されます。
Timer0 CompareB Matchで、DCCのレベルが評価され、解析されます。
//
//                           |<-----116us----->|
//
//           DCC 1: _________XXXXXXXXX_________XXXXXXXXX_________
//                           ^-INTx
//                           |----87us--->|
//                                        ^Timer-INT: reads zero
//
//           DCC 0: _________XXXXXXXXXXXXXXXXXX__________________
//                           ^-INTx
//                           |----------->|
//                                        ^Timer-INT: reads one
//           
// new DCC Receive Routine without Timer0 ........................................................
タイマー無しの新しいDCC受信ルーチン。
//
// Howto:    uses only one interrupt at the rising or falling edge of the DCC signal
//           The time between two edges is measured to determine the bit value
//           Synchronising to the edge of the first part of a bit is done after recognizing the start bit
//           During synchronizing each part of a bit is detected ( Interruptmode 'change' )
DCC信号の立ち上がりエッジまたは立ち下がりエッジで1つの割り込みのみを使用します。
2つのエッジ間の時間が測定され、ビット値が決定される。
開始ビットを認識した後、ビットの最初の部分のエッジに同期する。ビットの各部分の同期中に検出される(割り込みモード「変更」)。
//
//                           |<-----116us----->|
//           DCC 1: _________XXXXXXXXX_________XXXXXXXXX_________
//                           |<--------146us------>|
//                           ^-INTx            ^-INTx
//                           less than 138us: its a one-Bit
//                                        
//
//                           |<-----------------232us----------->|
//           DCC 0: _________XXXXXXXXXXXXXXXXXX__________________XXXXXXXX__________
//                           |<--------146us------->|
//                           ^-INTx                              ^-INTx
//                           greater than 138us: its a zero bit
//                                        
//                                        
//                                           
//           
//------------------------------------------------------------------------

拍手[0回]

PR
デコーダー開発ボードに、SparkFun SAMD21 Mini Breakoutを取り付ける為の
変換アダプタを工作。
SAMD21G18って、3.3Vタイプなので、とりあえずDCC PULSEだけは3.3Vで入力できるように
変換回路追加。

MicrochipのWebページをながめてたら、ATSAMC21E18Aという5Vで動くタイプがありました。
これ欲しいんですけどw

デバックポートはDCC信号入れている時はUSBポートからのデバックができないので、
UARTを使おうと思ったら、3.3Vじゃん。RS-232C変換器がないやという事で終了。

みみずゲームやろうっとw



【追記】
前に買った、USB TTL変換基板のCP2104を持っているのを思い出して取り付けました。
USBがTYPE-Aなのでちょっと微妙だなと思っています。

GNDとTXD,RXDの3本だけ繋いでおけばいいかな。

【なにやってんの?】
ARM Cortex-M0ベースのArduino M0を使ったデコーダを作ってみようという妄想の作業ですw
ATmega328のフラッシュは32kBなのですが、SAMD21G18のフラッシュは256kBあるので
贅沢に使えるのですねー。

拍手[0回]

塩漬けにしていた、Ateml製マイコン Cortex-M0+コアのSAMD21を使った、DCCデーダーを
ちょっとやってみようと情報を仕入れたら、
最新版のNmraDccのコメントに

2017-01-19 added STM32F1 support by Franz-Peter

おー、STM32F1に対応したみたいです。



Franz-Peterさん、goodです!

Webサイトがあるのかなーとググってみたけど、http://ww.stummiforum.de/ かなー
と思うけど開きませんでした。
ドイツは遠かった。

Arduino zero(M0)のCortex-M0でもうごくかな?!



拍手[0回]

山形での休日に暇を持て余しているときに、アマゾンスイッチサイエンスのSAMD21 Mini Breakoutを
ポチっていました。



USBが Micro-B Cableなんですよね。持ってませんでしたので、ダイソーで購入しました。

ますは、セットアップ
arms22さんの、 Zero/M0 互換ボード「Adafruit Feather M0 Bluefruit LE」の開発環境を準備する。
が便利です。

1、セオリーのLチカ。

合わせて、USBポートからシリアル出力できる様に確認しています。
SerialUSB.begin(9600);
SerialUSB.println("foo");
という感じに記述すればOKです。

2、エミュレートEEPROMを試す
SAMD21(ATSAMD21G18)は、E2P-ROMが実装されていないので、256kBあるフラッシュメモリ
を流用するらしい。
ライブラリはFlashStorage library for Arduinoを使用。


オレンジで塗った
while(!SerialUSB){
  ;
}
を追加しておかないと、setup内のprintlnを表示してくれなかった。

スケッチ書き込んだ直後は、以下のメッセージを表示。
EEPROM is empty, writing some example data:
-> 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
Done!
After commit, calling isValid() returns 1


リセットすると、以下のメッセージを表示。
EEPROM has been written.
Here is the content of the first 20 bytes:
-> 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119

うまく記録ができています。


とりあえず、IO制御、シリアルデバック、EEPROMモドキの確認ができました。
次は、PWMとかカウンタとかタイマーとかですねぇ。


という日記を書いて、明日からずっと山形ですw
18日はホビセンに行く予定!!!

拍手[0回]

ブログ内検索

プロフィール

HN:
あやのすけ
性別:
非公開
| HOME
Copyright ©  -- あやの --  All Rights Reserved
Design by CriCri / Material by もずねこ / powered by NINJA TOOLS / 忍者ブログ / [PR]