2008/10/09 からのアクセス回数 15009
SunSPOTのeDemoには、ATMELのATmega88が使われていて、拡張ボードもATmega88だと都合がよいので AVRを勉強することにしました。
ちょうど、「エレキジャックNo. 8」にTiny2313が付録についてきたので、これを使ってみることにします。 また、「インターネット・ガジェット設計」という本が結構おもしろいので、これもさらってみます。
ソフトの開発でも同じですが、
が大切です。
ちょうど、EZ-USBが手元にあり、チップ抵抗の半田付けを練習するために、オプティマイズの EZ-USBを使用した AVR ISP ライターを使うことにしました。
送られてきた部品は、
です。
たった4個のチップ抵抗の半田付けに半日かかりました。
ライターがWindowsでしか動作しないので、最初はWindows 2000に開発環境を整備しました。
「エレキジャックNo. 8」の第5章AVRマイコンを使おうにしたがい
をダウンロードしました。このほかCygwinもインストールしてあります。
ライターのソフトは、オプティマイズのページからダウンロードし、WinAVRをインストールしたディレクトリのbinと同じ場所に入れます。
エレキジャックNo. 8の図5-6 *1 を参考に、LEDの点灯例題を
のようにブレッドボードで回路を組んで、ライターでSignatureを読み込むと、
$ avrezusb.exe -rf Detected device is ATtiny2313. Low: 01100100 ||||++++-- CKSEL[3:0] NbNI ||++-- SUT[1:0] - N |+-- CKOUT (0:PD2VXeNbNo) +-- CKDIV8 NbNlw High:11-11111 |||||||+-- RSTDISBL (RESETs 1:L, 0:(PA2)) ||||+++-- BODLEVEL[2:0] f[^V[gQ |||+-- WDTON (WDT 0:ON, 1:) ||+-- SPIEN (1:ISP~, 0:ISP) Parallel |+-- EESAVE (EEPROM 1:, 0:) +-- DWEN (On-ChipfobO 1:, 0:L) Ext: -------1 +-- SPMEN (SPM 1:, 0:L) Cal: 92
のように正しくTiny2313が認識されました。
avrezusbの使い方は、helpを参照してください。
$ avrezusb.exe -help AVREZUSB - AVR Serial Programming tool R0.30 (C)ChaN,2004 http://elm-chan.org/ Modified by OPTIMIZE for EZ-USB V4.3 Write code and/or data : <hex file> [<hex file>] ... Verify code and/or data : -v <hex file> [<hex file>] ... Read code, data or fuse : -r{p|e|f} Write fuse byte : -f{l|h|x}<bin> Lock device : -l[<bin>] Erase device : -e Copy calibration bytes : -c SPI control delay [-d3] : -d<n> SUPPORTED DEVICE: AT90S 1200,2313,2323,2333,2343,4414,4433,4434,8515,8535 ATtiny 12,13,15,22,25,26,45,85,2313 ATmega 8,16,32,48,64,88,103,128,161,162,163,165,168,169,323,603,8515,8535 AT90CAN 128 SUPPORTED ADAPTER: EZ-USB only.
Macでの開発のために、純正のAVR ISP mkIIを購入しました。
WindowsのAVR Stduioで動作を確認しようとしたところ、いきなり
という事態に陥りました。
原因を調べたところ、
ことが原因と分かりました。
最初は、MacPortを使ってインストールしようとしたのですが、途中でエラーとなったので、今回は
インストールはマック用のパッケージ形式になっているので、マウント後のAVRMacPack.pkgをダブルクリックするだけです。
libusbが正しく動作するように念のため、インストール後に再起動をした方がいいです。
テストプログラムには、エレキジャックNo. 8のLEDの点灯プログラムを使いました。
今回は、ブザーを必要としないので、以下のようになります。
#include <avr/io.h> #define F_CPU 1000000UL #include <util/delay.h> typedef unsigned char BYTE; typedef unsigned int WORD; #define bitLED1 3 #define bitLED2 4 #define LED_RED_ON PORTB |= (1<<bitLED1) #define LED_RED_OFF PORTB &= ~(1<<bitLED1) #define LED_BLUE_ON PORTB |= (1<<bitLED2) #define LED_BLUE_OFF PORTB &= ~(1<<bitLED2) #define DELAY _delay_ms(1000) main(void) { DDRB = (1<<bitLED1 | 1<<bitLED2); while(1) { LED_RED_ON; LED_BLUE_OFF; DELAY; LED_RED_OFF; LED_BLUE_ON; DELAY; } }
ここで、
この記事は、
皆様のご意見、ご希望をお待ちしております。