[[FrontPage]] 2008/10/09 からのアクセス回数 &counter; #contents SunSPOTのeDemoには、ATMELのATmega88が使われていて、拡張ボードもATmega88だと都合がよいので AVRを勉強することにしました。 ちょうど、「エレキジャックNo. 8」にTiny2313が付録についてきたので、これを使ってみることにします。 また、「インターネット・ガジェット設計」という本が結構おもしろいので、これもさらってみます。 ソフトの開発でも同じですが、 - 頭で理解するのではなく、自分の手を使って実際に最初から自分でなぞってみること - 常に複数の対応を準備しておき、場合に応じて対処すること が大切です。 ** ライターを用意する [#ied0ea6a] ちょうど、EZ-USBが手元にあり、チップ抵抗の半田付けを練習するために、オプティマイズの [[EZ-USBを使用した AVR ISP ライター>http://optimize.ath.cx/avr/index.html]]を使うことにしました。 送られてきた部品は、 #ref(1.jpg); です。 たった4個のチップ抵抗の半田付けに半日かかりました。 #ref(2.jpg); ** 開発環境の整備 [#x132a66c] *** Windowsの環境 [#lb9792c6] ライターがWindowsでしか動作しないので、最初はWindows 2000に開発環境を整備しました。 「エレキジャックNo. 8の第5章AVRマイコンを使おう」に沿って - [[AVR Stduio>http://www.atmel.com/dyn/products/tools_card.asp?tool_id=2725]] ダウンロードには登録が必要です - [[WinAVR>http://sourceforge.net/projects/winavr/]] をダウンロードしました。このほかCygwinもインストールしてあります。 ライターのソフトは、オプティマイズのページからダウンロードし、WinAVRをインストールしたディレクトリのbinと同じ場所に入れます。 エレキジャックNo. 8の図5-6 ((初心者を対象とした入門書なのに、実体配線図のLEDのKとAの記述が逆になっているので注意してください。)) を参考に、LEDの点灯例題を #ref(6.jpg); のようにブレッドボードで回路を組んで、ライターでSignatureを読み込むと、 #pre{{ $ 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を参照してください。 #pre{{ $ 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. }} *** 純正ライターの購入 [#mcfb0d99] Macでの開発のために、純正のAVR ISP mkIIを購入しました。 #ref(4.jpg); WindowsのAVR Stduioで動作を確認しようとしたところ、いきなり + ソケットのピン配置を勘違い + Tiny2313を認識しない + プログラムが書き込めない + 書込後に正常に動作しない という事態に陥りました。 原因を調べたところ、 + AVR ISP mkII のユーザガイドには、 #ref(pin_assign.jpg); のように書かれているので、ついケーブルの赤いラインのピンが1番だと勘違いした。 この図は、ライターにソケットを付けた時にボードの上からみた図で、赤いラインに一番近いピンは2番 ピンです。どうようのメッセージがhttp://metrocrusader.blog41.fc2.com/blog-date-200711.htmlにもありました。 + EZ-USBのISPライターではライターから電源を供給していたが、mkIIは外部電源を必要とする + 回路に組み込んだままでは、プログラムが書き込めなくて、クリスタルを付けた別ブレッドボードを用意した。 [[永山さん>http://cap.dcnblog.jp/]]から回路に組み込んでISPが可能な条件が[[ChanNさんのページ>http://elm-chan.org/works/avrx/report.html]]のISP対応設計に説明されていると教えていただきました。 + これも当たり前なのですが、うっかりライターのケーブルを接続したまま、動作チェックをした ことが原因と分かりました。 *** USBマルチ電源 [#sa13f6b3] ターゲットボードの電圧が、3.3Vなので、トランジスタ技術1月号の付録基板、「USBマルチ電源」を使って電源を供給することにしました。 #ref(usbPower.jpg); 更に、クリスタルをセットした書き込み用のブレッドボードを用意し、プログラムの書き込みをしました。 #ref(writting.jpg); *** Mac OSXの環境 [#a4db9613] 最初は、MacPortを使ってインストールしようとしたのですが、途中でエラーとなったので、今回は - WinAVRのマック版である[[AVR MacPack>http://www.obdev.at/products/avrmacpack/download-de.html]]のAVRMacPack-20080721.dmgをダウンロードしました。 インストールはマック用のパッケージ形式になっているので、マウント後のAVRMacPack.pkgをダブルクリックするだけです。 libusbが正しく動作するように念のため、インストール後に再起動をした方がいいです。 ** 動作確認 [#u9784a51] テストプログラムには、エレキジャックNo. 8のLEDの点灯プログラムを使いました。 今回は、ブザーを必要としないので、以下のようになります。 #pre{{ #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; } } }} ここで、 - DDRxでxポートへのI/Oポートへの入出力を切り替えます、bitに1をセットすると出力、0をセットすると入力となります。 - PORTxでxポートへの値の設定と状態のチェックを行います。 - PINxはxポートから入力値を読み取ります。 ** コメント [#ua8e5faa] この記事は、 #vote(おもしろかった[4],そうでもない[0],わかりずらい[0]) 皆様のご意見、ご希望をお待ちしております。 - 永山さんのご指摘により、ChanNさのISP対応設計のリンクを追加 -- [[竹本]] &new{2008-10-14 (火) 18:55:42}; #comment_kcaptcha