preload
3月 04

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

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

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

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

続きを読む »

関連するタグ:
3月 04

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

続きを読む »

関連するタグ:
6月 03

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

関連するタグ:
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)の実験

続きを読む »

関連するタグ:
5月 10

はじめてAVRについて書くのにいきなりプログラムですいません。
開発環境などについては今後書く事にします。

今回はUSARTが搭載されているAVR(今回はATTiny2313)を利用してシリアル通信する方法を紹介します。
送受信とも割り込みを利用しているので他の作業と平行してシリアルの送受信ができます。
続きを読む »

関連するタグ: