CH340G USBシリアル変換とUSBaspを使ってみる

前回作成したCH340G USBシリアル変換とUSBaspを使ってみたいと思います。

前提として3.3V-5V AE-ATmega基板を使用します。

atmega03
atmega00
usb電源専用 3.3v–5v AE-ATmega基板です。

不要なものはできるだけ省いてあります。

atmega01
usbからの5vはレギュレーターを介して3.3vを作っています。
スライドスイッチで3.3v–5vを切り替えます。
vccはP1を介してCH340GとUSBaspに送ります。

AVR基板として使う場合ISPコネクタは常時接続のほうが便利なので回路図の(P3)ピンヘッダを利用してISPコネクタに接続してあります。
電源を持っているターゲットに対してはこのコネクタから書き込みができます。

atmega02
usbからの5vをレギュレーターに送るためジャンパー線を取り付けます。

USBを接続してみる
dmesg
USB端子を接続すると白色LEDが一瞬光ってUSBaspが認識されたことがわかります。

USBハブ、USBasp、CH340Gがそれぞれ認識されます。

これまでの経緯から/etc/udev/rules.dには次のファイルがあります。

$ cat 99-USBasp.rules
ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="05dc", MODE="0666"

$ cat 99-CH340G.rules
ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", MODE="0666"
RUN+="/bin/stty -F /dev/ttyUSB0"

AVRボードとして使ってみる
atmega05

シリアル接続のテストにはUARTを使用してみたいと思います。

またPiにはシリアルで通信するソフトが必要ですのでインストールします。
Piではminicom,kermit,cuなどが使えますがここでは取り合えずminicomをインストールしておきます。

# apt-get install minicom

minicomについては解説しているサイトがたくさんあるのでここでは割愛しますが取り合えず ~/.minirc.dfl には以下の設定が書かれているものとします。

$ cat .minirc.dfl
# Machine-generated file - use setup menu in minicom to change parameters.
pu baudrate         9600
pu bits             8
pu parity           N
pu stopbits         1

avrdude01
mcuにはatmega88vをクリスタルは8MHzを付けています。

$ avrdude -c usbasp -p m88 -v
読み込みできないときはSlow SCKを切り替えます。

ディフォルトは1MHzですので8MHz、クリスタル有りに変更します。

$ avrdude -c usbasp -p m88 -u -U lfuse:w:0xcf:m

テストにはAVR-GCC librariesのページからUART libraryを使用させて頂きました。
テスト用のディレクトリを作ってuartlibrary.zipをダウンロード、展開します。
展開したディレクトリにuart_testとかのディレクトリを作ってtest_uart.c,uart.c,uart.hの3つをコピーします。
test_uart.cを編集します。(8MHzに変更)

//#define F_CPU 4000000UL
#define F_CPU 8000000UL

コンパイルします。

$ avr-gcc -mmcu=atmega88 -Wall -Os uart.c test_uart.c
$ avr-objcopy -O ihex -R .eeprom a.out test_uart.hex

minicom00
ここで書き込んでもいいのですが結果をわかりやすくするため先にターミナルからminicomを立ち上げておきます。

$ minicom

test_uart.hexを書き込みます。

$ avrdude -c usbasp -p m88 -U flash:w:test_uart.hex

uart_test
左側のavrdudeで書き込んだtest_uart.hexの直後に右側で待ち受けていたminicomで実行結果が表示されています。(リセットを押すごとに同じ結果がでます)
プログラムにuart.cを組み込んでおけばデバッグ、またはAVRの計算結果などをPiで確認できるということですね。(プログラム次第ですが:)
USBケーブル1本の接続で済むので非常に便利です。
atmega04
次回はArduinoとして試してみます。