シフトレジスタ(74HC595)の使い方という以前の記事において、汎用IOポートをソフトウエアで制御してシフトレジスタ(74HC595)を操作するというのは実験しました。
ですが、この方法ではプログラムサイズも大きくなり、動作速度も遅くなってしまうという問題があります。
そこで、今回はAVRに搭載されている周辺機能であるSPIを使い、ハードウエアでシリアルデータとクロックを送出するようにしてみたいと思います。
どれぐらいのコードサイズの削減、動作速度の向上が出来るかを実験してみます。
デコーダの設定を変更するためのモードであるサービスモードでのパケットについてまとめます。
DCCのサービスモードについての規格はNMRA DCC StandardsのRecommended Practice RP-9.2.3 “DCC Service Mode”に書かれているのでそちらも参照してください。また、誤解している可能性があるので利用する場合は十分検証してください。
信号を制御するためのデコーダを開発しました。DigitraxのSE8Cを意識しましたが、LocoNetを利用せずレール上のDCCパケットを受信するためメーカーによらず利用でき、レールに接続するだけで利用できるので配線も簡単です。
また、基板サイズも大分小さくできます。ただし、LEDの駆動回路を省略しているので思いっきり明るくは光らせられません。
接続端子がまだ一部ハンダ付けされてませんが、動作確認済み。初めてダイナミック点灯をやってみました。
続きを読む »
今回はATtiny2313でDCCのパケットを受信する手順を公開します。
ついでにDCCのパケットはピン変化割り込みを利用して受信してみます。
タイマー1を時間(パケットのパルス幅)計測に使うためタイマー1を他の事に利用する場合は修正が必要です。
回路図
電源周りのコンデンサ等は省略しています。別途確認用のLEDやシリアルを接続して動作確認してください。
またレールとの接続はフォトカプラで電気的に絶縁することも可能です。
続きを読む »
以前、PCをLocoNetに繋ぐためのアダプターLocoUSB Rev.1を紹介したのですが、MacとVistaでは使えないという問題がありました。
原因は以前の記事にも書きましたがMacおよびVistaはシリアルの通信速度がLocoNetの16600bpsに対応していないというのが原因です。
そこで、USB(パソコン)側とLocoNetの間にマイコンを挟み、そいつで速度変換をさせることによってMacおよびVistaに対応させたLocoUSB Ver.2を開発しました。
今回はさまざまな用途に利用することの多いPWMをAVRから出力することについて書きます。 PWMとはなに?という方も参考にしてください。 最初から最後までわかりやすく解説するのが目標ですが、抜けていたり飛躍している箇所がたくさんあります。 コメントで指摘していただけるとたいへんありがたいですし、自分のためにも質問にはできる限り答えるようにしようと思っています。 続きを読む »
前回は時間制で車両の速度を変えていたので停止する場所を調整するのはとても大変です。またトラブルで止まってしまった場合はそのずれを修正できません。
ということで、今回はTCSセンサーの使い方で作った、TCSセンサーの情報をLocoNetに送出する回路を利用し、(市販のBDL168でも代用可能、というよりこっちが本家)目的の場所に停止させようと思います。

センサーとモボ621
続きを読む »
今回は列車を往復運転させる簡単なスクリプトを通して、基本的なスクリプトの書き方、実行の流れを解説します。
続きを読む »
それでは連載ということで、JMRIとPythonをつかって自動制御を進めていきたいと思います。
今回はPythonとはです
Pythonとは
Pythonとはプログラミング言語(他にはC言語,PHP,Java ….)の一種でパイソンと読みます。Wikipediaには大変詳しい説明が載っています。が、JMRIにおけるPythonの立場を本当に簡単に説明したいとおもいます。
たまにJMRIの解説サイトで多く見られる誤解はPythonをJMRIで自動運転するためのスクリプト言語であるというものです。が、Pythonは汎用のプログラミング言語でありJMRI専用ではありません、JMRIではPythonで簡単に鉄道模型の制御ができるようにライブラリ(関数群)を用意しているのです(これが書きたかったのです)。ですからPythonを使えるようにすることはJMRIのみならずパソコン用のプログラミングもできるようになる可能性があるわけです。また、Pythonはプログラミングを初めて勉強するのに向いているほうの言語ですからその後にC言語やJava等の言語を学習するハードルを下げることができるかもしれません。
今回は短い記事となりましたが、次回から実際に利用していきたいと思います。
今回はシリアルデータをパラレル出力するためのICである、74HC595の使い方を説明します。
このICは最低3本の制御線で、8本の出力ができます。また、74HC595を直列に繋ぐことにより制御線はそのままに、一個追加するごとに8本の出力を増設できます。
用途はというとマイコンの出力端子が足りないときに増設するときに利用します。ただ、マイコンから直接出力するよりも時間がかかるので、速度の必要な用途には厳しいかもしれませんが、LEDへの出力など低速(内蔵IOポートに比べて)でも大丈夫な用途に利用できます。
さらに、74HC595は普通のシフトレジスタとは異なり、データの送信中は出力端子の状態を変えずに、全てのデータを送信し終わってから任意のタイミングで一気に出力ポートを変化させることができるようにラッチが内蔵されています。これにより、遅い動作で駆動させても出力端子の余計な変化は起こりません。
今回はAVRのATtiny2313から74HC595を通して3本の制御線で8個のLEDを点灯させてみることにします。
2010年3月4日追記:
ATmega等のSPI機能がついたAVRを利用する場合はSPI機能を利用することをおすすめします。SPIをつかったシフトレジスタの操作はこちら。SPIを使うことにより、シフトレジスタへの送信がハードウエアで行われ倍近くの動作速度が期待できます。しかし、動作原理を知るには以下のようにポートを直接操作するプログラムのほうがわかりやすいので、こちらも読んでいただくことをおすすめします。





最近のコメント