how to code something このページをアンテナに追加 RSSフィード

2012-08-10

OSX mountain lionでAVRの書き込み with avrdude

おおむねここを参考にする。
http://jun1chi.blogspot.jp/2011/07/macarduino-atmega168pft232rl.html

ピンアサインはここ。
http://sprocessing.blogspot.jp/2009/01/avrispmkii.html

重要な事実が書いてある。
http://d.hatena.ne.jp/nisuseteuryalus2/20110403

次に、これが意外と盲点なのですが、電池でいいので5V電源を用意します。そしてピンに直接さして外部電源として供給します。

(゜Д゜) ハア??
ここでかなりはまりました。

% avrdude -c avrisp2 -P usb -p t2313 -U flash:w:tiny2313.hex:i -v -B 19200  

avrdude: Version 5.11.1, compiled on Aug 10 2012 at 22:53:07
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2009 Joerg Wunsch

         System wide configuration file is "/usr/local/Cellar/avrdude/5.11.1/etc/avrdude.conf"
         User configuration file is "/Users/shohei/.avrduderc"
         User configuration file does not exist or is not a regular file, skipping

         Using Port                    : usb
         Using Programmer              : avrisp2
         Setting bit clk period        : 19200.0
avrdude: usbdev_open(): Found AVRISP mkII, serno: 000200109639
avrdude: stk500v2_recv_mk2: error in USB receive
         AVR Part                      : ATtiny2313
         Chip Erase delay              : 9000 us
         PAGEL                         : PD4
         BS2                           : PD6
         RESET disposition             : possible i/o
         RETRY pulse                   : SCK
         serial program mode           : yes
         parallel program mode         : yes
         Timeout                       : 200
         StabDelay                     : 100
         CmdexeDelay                   : 25
         SyncLoops                     : 32
         ByteDelay                     : 0
         PollIndex                     : 3
         PollValue                     : 0x53
         Memory Detail                 :

                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           eeprom        65     6     4    0 no        128    4      0  4000  4500 0xff 0xff
           flash         65     6    32    0 yes      2048   32     64  4500  4500 0xff 0xff
           signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00
           lock           0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
           lfuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
           hfuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
           efuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
           calibration    0     0     0    0 no          2    0      0     0     0 0x00 0x00

         Programmer Type : STK500V2
         Description     : Atmel AVR ISP mkII
         Programmer Model: AVRISP mkII
         Hardware Version: 1
         Firmware Version Master : 1.10
         Vtarget         : 5.2 V
         SCK period      : 19569.47 us

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 1.98s

avrdude: Device signature = 0x1e910a
avrdude: safemode: lfuse reads as 64
avrdude: safemode: hfuse reads as DF
avrdude: safemode: efuse reads as FF
avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed
         To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "tiny2313.hex"
avrdude: writing flash (110 bytes):

Writing | ################################################## | 100% 76.84s

avrdude: 110 bytes of flash written
avrdude: verifying flash memory against tiny2313.hex:
avrdude: load data flash data from input file tiny2313.hex:
avrdude: input file tiny2313.hex contains 110 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 72.90s

avrdude: verifying ...
avrdude: 110 bytes of flash verified

avrdude: safemode: lfuse reads as 64
avrdude: safemode: hfuse reads as DF
avrdude: safemode: efuse reads as FF
avrdude: safemode: Fuses OK

avrdude done.  Thank you.




なんかむちゃくちゃ遅い。。。
http://www.mikrocontroller.net/topic/96528
-Bオプション外すと心持ち早くなった気がする。。?


書き込む前にavrdudeのターミナル(-tオプション)で
-BオプションかけてBaud rate設定しといて
書き込むのが今のところの最善策かな。
Baud rateが早いほうがいいか遅いほうがいいかはよくわからない。

書き込みの様子。
f:id:seinzumtode:20120811004052j:image:w400

OSX mountain lionでAVRのコンパイル


http://awawa.hariko.com/eclipse_avr.html を参考に


crtm168.o(-mmcu=atmega168を指定した時)とかcrttn2313.o(-mmcu=attiny2313を指定した時)
とかがないと言われるので、
この2つを/usr/local/AVR/avr/libに置く。
そしてなぜかArduinoライブラリの場所を指定するとうまくいく。
(ライブラリを2回見ている?)

テストファイル
copy.cの中身

% cat copy.c
#include<avr/io.h>

int main(void) {
  uint8_t i;
  i = 0;
  DDRB = 0xff;
  while (1) {
    i++;
    PORTB = i;
  }
}

コンパイル

% avr-gcc -L /Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/avr/lib/ -mmcu=attiny2313 copy.c

または最適化

% avr-gcc -L /Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/avr/lib/ -mmcu=attiny2313 copy.c -O2 -Os 

hex生成

% avr-objcopy -R .eeprom -O ihex a.out copy.hex

できた

% cat copy.hex
:1000000012C017C016C015C014C013C012C011C052
:1000100010C00FC00EC00DC00CC00BC00AC009C07C
:1000200008C007C006C011241FBECFEDCDBF02D04F
:1000300007C0E6CF8FEF87BB80E08F5F88BBFDCF27
:04004000F894FFCF62
:00000001FF

アセンブル

% avr-objdump -d a.out

a.out:     ?&#1381;???????? elf32-avr


Disassembly of section .text:

00000000 <__vectors>:
   0:	12 c0       	rjmp	.+36     	; 0x26 <__ctors_end>
   2:	17 c0       	rjmp	.+46     	; 0x32 <__bad_interrupt>
   4:	16 c0       	rjmp	.+44     	; 0x32 <__bad_interrupt>
   6:	15 c0       	rjmp	.+42     	; 0x32 <__bad_interrupt>
   8:	14 c0       	rjmp	.+40     	; 0x32 <__bad_interrupt>
   a:	13 c0       	rjmp	.+38     	; 0x32 <__bad_interrupt>
   c:	12 c0       	rjmp	.+36     	; 0x32 <__bad_interrupt>
   e:	11 c0       	rjmp	.+34     	; 0x32 <__bad_interrupt>
  10:	10 c0       	rjmp	.+32     	; 0x32 <__bad_interrupt>
  12:	0f c0       	rjmp	.+30     	; 0x32 <__bad_interrupt>
  14:	0e c0       	rjmp	.+28     	; 0x32 <__bad_interrupt>
  16:	0d c0       	rjmp	.+26     	; 0x32 <__bad_interrupt>
  18:	0c c0       	rjmp	.+24     	; 0x32 <__bad_interrupt>
  1a:	0b c0       	rjmp	.+22     	; 0x32 <__bad_interrupt>
  1c:	0a c0       	rjmp	.+20     	; 0x32 <__bad_interrupt>
  1e:	09 c0       	rjmp	.+18     	; 0x32 <__bad_interrupt>
  20:	08 c0       	rjmp	.+16     	; 0x32 <__bad_interrupt>
  22:	07 c0       	rjmp	.+14     	; 0x32 <__bad_interrupt>
  24:	06 c0       	rjmp	.+12     	; 0x32 <__bad_interrupt>

00000026 <__ctors_end>:
  26:	11 24       	eor	r1, r1
  28:	1f be       	out	0x3f, r1	; 63
  2a:	cf ed       	ldi	r28, 0xDF	; 223
  2c:	cd bf       	out	0x3d, r28	; 61
  2e:	02 d0       	rcall	.+4      	; 0x34 <main>
  30:	07 c0       	rjmp	.+14     	; 0x40 <_exit>

00000032 <__bad_interrupt>:
  32:	e6 cf       	rjmp	.-52     	; 0x0 <__vectors>

00000034 <main>:
  34:	8f ef       	ldi	r24, 0xFF	; 255
  36:	87 bb       	out	0x17, r24	; 23
  38:	80 e0       	ldi	r24, 0x00	; 0
  3a:	8f 5f       	subi	r24, 0xFF	; 255
  3c:	88 bb       	out	0x18, r24	; 24
  3e:	fd cf       	rjmp	.-6      	; 0x3a <main+0x6>

00000040 <_exit>:
  40:	f8 94       	cli

00000042 <__stop_program>:
  42:	ff cf       	rjmp	.-2      	; 0x42 <__stop_program>

2012-07-27

ArduinoでAVR開発環境を作る

いま飛び込んできたニュース。
なんとArduinoAVRの開発環境が作れるらしい。

  • Aruduino IDEで ATtiny/ATmega 開発環境を作る

http://www.geocities.jp/arduino_diecimila/use/arduino_dev.html

  • ArduinoISPを使う

http://www.geocities.jp/arduino_diecimila/use/attiny.html


AT tinyでステッピングモータを動かす
http://cap.dcnblog.jp/jisaku/2007/12/post-91a9.html

2011-10-30

AVRマイコンライタの製作

PICに引き続きAVRの環境を構築した。
AVRPICと違ってGNUをサポートしてるらしい。
Cでの開発環境も整っているみたいなので面白そう。
参考にしたのは、武藤先生の面白チャレンジ!インターネットガジェット入門
開発環境はWindows7です。
手順は、
(1)AVRライタの製作
(2)cファイルをコンパイル→hexファイル生成→AVRに書き込み
(3)LEDの点滅テスト
まず、AVRライタの製作から。
材料は、
・Atmel AT mega 168 20PU(400円)
・ブレッドボード(200円くらい?)
・ジャンプワイヤ
・クリスタルオシレータ(水晶発振子。秋月、5個200円。今回は12MHzを使用)
・FT232RL USBシリアル変換モジュール(950円)
USB AオスーUSB miniオス ケーブル(120円)
図のように構築する。空中配線はご愛嬌。
f:id:seinzumtode:20111030182040j:image
製作したライタをUSBケーブルでPCに接続すると、自動的にデバイスドライバインストールされる。
(2)次にWinAVRをインストールする。
その前にCygwinを入れておく。gcc-core,gcc-g++,wget,tar,vim,unzipなどのLibs(ライブラリ)をインストールしておく。
sourceforgeからWinAVRをダウンロードインストール
武藤先生のサーバからテストコードをとってくる。
http://web.sfc.keio.ac.jp/~takefuji/led0-168.zip
中に入ってるled-0168.pnprojをダブルクリックすると、Programmer's notepadが立ち上がる。
(Programmer's notepadはWinAVRのパッケージに入ってるソフトウェア)
mainファイルは以下。
main.c

/* LED flash using atmega168 designed by takefuji on sept. 22, 2009*/

#define F_CPU 1.0E6     //1MHz
#include <avr/io.h>
#include <util/delay.h>

int main(void)
{ 
 
for(;;){DDRC=0x20;
		PORTC=0x20;_delay_ms(500);
		PORTC=0x00;_delay_ms(500);}
}

Toolsメニューの"Make all"でビルドするのだが、ここでビルドが通らない。
エラーメッセージを確認すると、

#include <util/delay.h>

がない、といっている。
WinAVRのフォルダを確認すると、確かに入ってない。
検索するとWinAVR/include/avr/delay.hに入っていたので、環境変数PATHにC:\WinAVR\includeを追加して

#include <avr/delay.h>

に書き換えたらビルド成功。(環境変数の追加はいらないかも)
次に、WinAVRをインストールすると作成されたavrdudegui.exeを起動。
以下のように設定する。コマンドラインオプションに注意。
f:id:seinzumtode:20111030183617p:image
接続後、FuseのReadを実行して上記のようになれば成功。
さきほど生成した.hexファイルをFlashに指定してErase-Write-Verifyを実行。
(3)LED点滅試験
以下のように、テストボードを組む。
f:id:seinzumtode:20111030181055j:image

点滅の様子