Home
Packages
Forums
Wiki
GitLab
Security
AUR
Download
コンテンツにスキップ
メインメニュー
メインメニュー
サイドバーに移動
非表示
案内
メインページ
目次
コミュニティに貢献
最近の出来事
おまかせ表示
特別ページ
交流
ヘルプ
貢献
最近の更新
最近の議論
新しいページ
統計
リクエスト
ArchWiki
検索
検索
表示
アカウント作成
ログイン
個人用ツール
アカウント作成
ログイン
AVRのソースを表示
ページ
議論
日本語
閲覧
ソースを閲覧
履歴を表示
ツール
ツール
サイドバーに移動
非表示
操作
閲覧
ソースを閲覧
履歴を表示
全般
リンク元
関連ページの更新状況
ページ情報
表示
サイドバーに移動
非表示
←
AVR
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループに属する利用者のみが実行できます:
登録利用者
。
このページのソースの閲覧やコピーができます。
[[カテゴリ:開発]] [[en:AVR]] [[Wikipedia:AVR_microcontrollers|AVR]] は Microchip Technology 社 (以前は Atmel 社でしたが買収されました)によって開発されているマイクロコントローラ (MCU) の一種です。 AVR は [[Arduino]] プロジェクトに代表される様に、とりわけホビーや教育用途で広まっています。このページでは、これらのMCUの8ビットシリーズを扱います。 == ツールチェイン == ツールチェインと GNU コンパイラのために {{Pkg|avr-gcc}} を[[インストール]]して下さい。 == プログラマー (書込器) == AVR チップへ作成したプログラムを書き込むためには、プログラマーと、それを行うソフトウェアが必要です。有名なプログラマーには [https://www.fischl.de/usbasp USBasp]や[https://www.microchip.com/DevelopmentTools/ProductDetails/PartNO/ATAVRISP2 AVRISP mkII]、[https://www.microchip.com/DevelopmentTools/ProductDetails/ATATMEL-ICE Atmel-ICE]、[https://www.microchip.com/DevelopmentTools/ProductDetails/PartNO/ATSTK500 STK500]があります。 LPT ポートで動く単純な DIY プログラマーである [https://www.olimex.com/Products/AVR/Programmers/AVR-PG2B AVR-PG2B] などもあります。 {{Pkg|avrdude}} は、これらも含めて多くのプログラマーをサポートします。 === udev ルール === {{Pkg|avrdue}} を root 権限なしで動かすには次の様な [[Udev]] ルールを作ってください。この udev ルールによって、指定の USB デバイスを取り扱う権限を他のグループに移します ({{ic|uucp}} がこの手の処理によく使われます)。 {{hc|/etc/udev/rules.d/99-avrprogrammer.rules|2= # Set group for a programmer matching with vendor and product IDs SUBSYSTEM=="usb", ATTRS{idVendor}=="''your Vendor ID''", ATTRS{idProduct}=="''your Product ID''", GROUP="uucp", MODE="0666" }} イタリック表記の部分は、使っているプログラマーのベンダーとプロダクト ID ({{Pkg|usbutils}} パッケージにある {{ic|lsusb}} コマンドを使って特定できます) に置き換えて、また、{{ic|uucp}} グループはあなたの補助グループに置き換えてください。 == 使い方 == AVR チップのために C 言語のプログラムをコンパイルするには、 {{ic|avr-gcc}} が使えます。ここでは例として、 ATmega8A を 8 MHz で動かすことを考えます。目的の MCU (サポートされる MCU のリストは {{man|1=1|2=avr-gcc|3=mmcu=}} にあります) と動作周波数を指定する必要があります: $ avr-gcc -DF_CPU=8000000UL -mmcu=atmega8a -std=gnu99 main.c -o main.elf avrdude は、直接 ELF ファイルを読む事ができますが、 次の様に Intel HEX 形式に変換することもできます: $ avr-objcopy -O ihex -j .text -j .data main.elf main.hex 書き込むファイルができたら、 書き込み先の flash ROM を指定して、 avrdude を実行します。ここでは AVRISP mkII を例に取って、安全のため書き込み周波数を 125 kHz に小さくして書き込みます: $ avrdude -p atmega8 -c avrispmkII -B 125kHz -U flash:w:main.hex これで完了です。 他には、 avrdude は EEPROM や fuse への書き込みもサポートします。例えば、low fuse と high fuse それぞれに 0x9F と 0xD1 を書き込むには、次のようにします: $ avrdude -p atmega8 -c avrispmkII -B 125kHz -U lfuse:w:0x9F:m -U hfuse:w:0xD1:m ISP プログラミングの時には、 MCU の動作周波数の 1/8 を越えないように気を付けてください。多くの新しいチップでは 1 MHz の設定で販売されているので、 125 kHz の書き込み速度にするのがよいでしょう。 == ヒントとテクニック == === 最適化 === AVR は小さな flash ROM サイズと非力な CPU で構成されているので、 ROM サイズの縮小や性能の向上のために最適化も考慮すると良いでしょう。 GCC の最適化レベルの指定 {{ic|-Os}} や他の機能 {{ic|-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums}} を使う事がよく知られた方法です。必要のないライブラリへの参照を除くためやガベージコレクションを使うためには、 {{ic|-ffunction-sections -fdata-sections -Wl,--gc-sections}} があります。 === Makefile のサンプル === 大きなプロジェクトを管理することは面倒で、 Makefile による管理は非常に有効です。 [https://www.avrfreaks.net/sites/default/files/Makefile.txt AVRfreaks] を元にしたサンプルを、ここで紹介します。 CC = avr-gcc OBJCOPY = avr-objcopy SIZE = avr-size NM = avr-nm AVRDUDE = avrdude REMOVE = rm -f MCU = atmega8a F_CPU = 8000000 LFUSE = 0x9f HFUSE = 0xd1 TARGET = firmware SRC = main.c lcd.c twi.c OBJ = $(SRC:.c=.o) LST = $(SRC:.c=.lst) FORMAT = ihex OPTLEVEL = s CDEFS = CFLAGS = -DF_CPU=$(F_CPU)UL CFLAGS += $(CDEFS) CFLAGS += -O$(OPTLEVEL) CFLAGS += -mmcu=$(MCU) CFLAGS += -std=gnu99 CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums CFLAGS += -ffunction-sections -fdata-sections CFLAGS += -Wall -Wstrict-prototypes CFLAGS += -Wa,-adhlns=$(<:.c=.lst) LDFLAGS = -Wl,--gc-sections LDFLAGS += -Wl,--print-gc-sections AVRDUDE_MCU = atmega8 AVRDUDE_PROGRAMMER = avrispmkII AVRDUDE_SPEED = -B 1MHz AVRDUDE_FLAGS = -p $(AVRDUDE_MCU) AVRDUDE_FLAGS += -c $(AVRDUDE_PROGRAMMER) AVRDUDE_FLAGS += $(AVRDUDE_SPEED) MSG_LINKING = Linking: MSG_COMPILING = Compiling: MSG_FLASH = Preparing HEX file: all: gccversion $(TARGET).elf $(TARGET).hex size .SECONDARY: $(TARGET).elf .PRECIOUS: $(OBJ) %.hex: %.elf @echo @echo $(MSG_FLASH) $@ $(OBJCOPY) -O $(FORMAT) -j .text -j .data $< $@ %.elf: $(OBJ) @echo @echo $(MSG_LINKING) $@ $(CC) -mmcu=$(MCU) $(LDFLAGS) $^ --output $(@F) %.o : %.c @echo $(MSG_COMPILING) $< $(CC) $(CFLAGS) -c $< -o $(@F) gccversion: @$(CC) --version size: $(TARGET).elf @echo $(SIZE) -C --mcu=$(AVRDUDE_MCU) $(TARGET).elf analyze: $(TARGET).elf $(NM) -S --size-sort -t decimal $(TARGET).elf isp: $(TARGET).hex $(AVRDUDE) $(AVRDUDE_FLAGS) -U flash:w:$(TARGET).hex fuses: $(AVRDUDE) $(AVRDUDE_FLAGS) -U lfuse:w:$(LFUSE):m -U hfuse:w:$(HFUSE):m release: fuses isp clean: $(REMOVE) $(TARGET).hex $(TARGET).elf $(OBJ) $(LST) *~ === 制御レジスタ値の計算 === プロジェクト開発速度の向上のために、 {{AUR|avrcalc}} ユーティリティが使えます。これはタイマーや周波数などの制御レジスタのパラメータの計算に役立ちます。 == 参照 == * [[Arduino]] * https://www.microchip.com/design-centers/8-bit/avr-mcus {{TranslationStatus|AVR|2024-08-17|790657}}
このページで使用されているテンプレート:
テンプレート:AUR
(
ソースを閲覧
)
テンプレート:Hc
(
ソースを閲覧
)
テンプレート:Ic
(
ソースを閲覧
)
テンプレート:Man
(
ソースを閲覧
)
テンプレート:Pkg
(
ソースを閲覧
)
テンプレート:TranslationStatus
(
ソースを閲覧
)
AVR
に戻る。
検索
検索
AVRのソースを表示
話題を追加