CDC-IO
CDC-IO は、PC の仮想 COM ポートを通じて AVR マイコンの特殊機能レジスタ (SFR) を操作するものです。これにより、マイクロコントローラのパラレルポートへの読み書きを自在に行えます。また、タイマ・カウンタや PWM, AD 変換や EEPROM なども操作できますので、PC 側のアプリケーションと連動した高度な制御が可能となります。
ソフトウェア USB による外部インターフェース
使い方
インストール方法は CDC-232 と同じですが、
ボーレートなどは適当な値で構いません。
9600bps より早いデータ転送速度が必要な場合は、lowcdc.vbs を起動して、バルク転送による高速モードに切り替えてください。
PC のターミナルやアプリケーションから、テキスト形式のコマンドを送り制御します。
CDC-IO 命令表
機能 命令 形式 応答 Who @ @ "cdc-io", CR-LF Get ? address ? data, CR-LF Set = data address = CR-LF AND & Set & data address & CR-LF OR & Set | data address | CR-LF EX-OR & Set ^ data address ^ CR-LF Set Double $ data2 data1 address $ CR-LF ATtiny2313 版は3命令のみ
address: メモリマップ上の特殊機能レジスタ(SFR) のアドレスを 16 進数で記述
data: SFR に設定する8ビットのデータを 16 進数で記述
アドレス、データ、命令はタブ、スペース、改行で分ける。
つぎのレジスタは、そのまま指定可能。
PINB, DDRB, PORTB PINC, DDRC, PORTC PIND, DDRD, PORTD例 ('_' はスペース)
DDRB_?_ DDRB レジスタの値と改行を返す
12_34_=_ 0x34 番地の特殊機能レジスタに 0x12 を書き込み、改行を返す
FB_PORTC_&_ (PORTC レジスタと 0xFB の AND 値を PORTC レジスタに書き込み、改行を返す
直前に送出したデータやアドレスは再利用できます。命令文字だけ送ります。
”Set Double” 命令は、EEPROM への書き込みなどに使います。
USB 信号線が接続されている端子と同じポートを操作するときは、USB 信号を壊さないよう、元の値への AND, OR を行うか、PIN* レジスタによるトグル動作を使ってください。
割込みを許可すると、割り込み発生したベクタアドレスがデバイスから自発的に送られます。
タイマ、AD変換、USART, EEPROM などの使い方は、データシートをよく読んで理解してください。
回路図
ATtiny45, ATtiny461, ATtiny2313 および ATmega8/48/88 用の回路図です。いずれも ISP でプログラムできます。
D1, D2 は、USB バスからの 5V を 3.6V に降圧して AVR に供給するものです。
動作が不安定ならもう一個追加してください。このダイオードには最大で 100mA
ぐらい流せますが、他の回路に供給するときは別に3端子レギュレータなどを介したほうがよいでしょう。
接続先のマイクロコントローラが 5V 駆動のとき、AVR 側を読み込みポートとするときは、逆流抑止のため数KΩの抵抗を挿入してください。
発振子には、必ず水晶を使ってください。セラミック発振子でもほとんどの場合に動作しますが、偏差が大きいと動作が不安定になります。
ATtiny45, ATtiny461 では内蔵 RC 発振の PLL 逓倍により 16.5MHz で駆動します。接続時に PC からの USB 信号を使って
発振周波数を同期します。
CDC-IO for ATtiny45-20
CDC-IO for ATtiny461-20
ATtiny2313 はプログラム領域が狭いため、使えるコマンドは "Set", "Get", "Xor" のみです。割込み機能もありません。
CDC-IO for ATtiny2313-20
CDC-IO for ATmega8/48/88-20
プログラム例
ATmega8/48用の実験回路とサンプルプログラムです。C, VB, VC, VC++, C# のプログラムですが、これ以外にもシリアルポートを操作できる言語(マクロも含めて)ならば動かせるはずです。
ボリュームを動かすと、音程と LED の明滅パターンが変化します。