preload
3月 04

AVRには外部クロックがなくても動作するように、ICの内部にRC発振回路によるクロックを内蔵しています。

工場出荷時に規定の周波数(基本的に8MHz)になるように校正されていますが、データシートによると10%までの誤差がある可能性があり、シリアル通信では致命傷になります。

そこで、個別に調整できるようにOSCCAL(発振校正レジスタ)が存在します。このレジスタをプログラム実行時に書き換えることで発振周波数を変更できます。OSCCALが大きいほど高い周波数で、小さいほど低い周波数で動作します。

AVRはヒューズビットのCKOUTをプログラム(0)することにより、CLK0端子からシステムクロックが出力されます。これを測定機器で観測しながらOSCCALレジスタを操作することによりクロックを調整します。

続きを読む »

関連するタグ:
3月 04

シフトレジスタ(74HC595)の使い方という以前の記事において、汎用IOポートをソフトウエアで制御してシフトレジスタ(74HC595)を操作するというのは実験しました。
ですが、この方法ではプログラムサイズも大きくなり、動作速度も遅くなってしまうという問題があります。
そこで、今回はAVRに搭載されている周辺機能であるSPIを使い、ハードウエアでシリアルデータとクロックを送出するようにしてみたいと思います。
どれぐらいのコードサイズの削減動作速度の向上が出来るかを実験してみます。

続きを読む »

関連するタグ:
7月 09

後輩から基板を発注するからなにかないか?と言われたので車両用デコーダを制作することにします。

ATTinyで作りたかったんですが、赤外線送信機能もつけるためにタイマーとROMのサイズの関係でATmegaを利用することに。

2009年7月9日現在設計段階です

loco_decoder_ver1_brd

関連するタグ:
6月 16

信号を制御するためのデコーダを開発しました。DigitraxのSE8Cを意識しましたが、LocoNetを利用せずレール上のDCCパケットを受信するためメーカーによらず利用でき、レールに接続するだけで利用できるので配線も簡単です。

また、基板サイズも大分小さくできます。ただし、LEDの駆動回路を省略しているので思いっきり明るくは光らせられません。

接続端子がまだ一部ハンダ付けされてませんが、動作確認済み。初めてダイナミック点灯をやってみました。

シグナルデコーダ

続きを読む »

関連するタグ:
6月 15

今回はATtiny2313でDCCのパケットを受信する手順を公開します。
ついでにDCCのパケットはピン変化割り込みを利用して受信してみます。

タイマー1を時間(パケットのパルス幅)計測に使うためタイマー1を他の事に利用する場合は修正が必要です。

回路図

電源周りのコンデンサ等は省略しています。別途確認用のLEDやシリアルを接続して動作確認してください。
またレールとの接続はフォトカプラで電気的に絶縁することも可能です。

AVRでDCCパケットを受信

AVRでDCCパケットを受信


続きを読む »

関連するタグ:
6月 06

以前、PCをLocoNetに繋ぐためのアダプターLocoUSB Rev.1を紹介したのですが、MacとVistaでは使えないという問題がありました。

原因は以前の記事にも書きましたがMacおよびVistaはシリアルの通信速度がLocoNetの16600bpsに対応していないというのが原因です。

そこで、USB(パソコン)側とLocoNetの間にマイコンを挟み、そいつで速度変換をさせることによってMacおよびVistaに対応させたLocoUSB Ver.2を開発しました。

LocoUSB Ver.2

LocoUSB Ver.2

続きを読む »

関連するタグ:
6月 03

今回はさまざまな用途に利用することの多いPWMをAVRから出力することについて書きます。 PWMとはなに?という方も参考にしてください。 最初から最後までわかりやすく解説するのが目標ですが、抜けていたり飛躍している箇所がたくさんあります。 コメントで指摘していただけるとたいへんありがたいですし、自分のためにも質問にはできる限り答えるようにしようと思っています。 続きを読む »

関連するタグ:
5月 25

赤外線による車両検出は基板設計が終わり発注しましたが手元に届くにはまだまだ時間があります。

ということで、TOMIXから発売されているTCSセンサーをAVRに接続し、その信号を元にBDL168のパケットを送出する実験をします。

TCSセンサーには写真のようにコンパクトなワンタッチ設置型、レール型およびスラブレール用とあります。

今回は設置の簡単なTCSワンタッチ装着センサーを利用しますが全て構造、配線は全く同じです。

続きを読む »

関連するタグ:
5月 24

以前、LocoNetにAVRを接続する回路は掲載しました。が、送信禁止期間等の実装がようやくできたので送信だけとりあえず現状を公開します。環境はAVR-GCCと、ATtiny2313で実験しています。
センサーとモボ621
続きを読む »

関連するタグ:
5月 14

今回はシリアルデータをパラレル出力するための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を使うことにより、シフトレジスタへの送信がハードウエアで行われ倍近くの動作速度が期待できます。しかし、動作原理を知るには以下のようにポートを直接操作するプログラムのほうがわかりやすいので、こちらも読んでいただくことをおすすめします。

シフトレジスタ(74HC595)の実験

シフトレジスタ(74HC595)の実験

続きを読む »

関連するタグ: