[マイコン] AVR ATtiny13AのLED点滅が遅い

[M1 Mac, Big Sur 11.6.8, avr-gcc 9.4.0, NO IDE]

ATtiny13AにつないだLEDの点滅が設定に比べて異様に遅いので色々調べてみると、システムクロック周波数がデフォルトで8分周(8分の1)になっていました。

対策としてavrdudeでヒューズビットを変更することにより1分周に変えます。コマンドは”make fuse”です。

Makefileは以下の通りです。ヒューズビットは16進数で表記されていますが、これでは各ビットの設定がわかりにくいため2進数表記に変えています。

DEVICE     = attiny13a
CLOCK      = 9600000
PROGRAMMER = -c avrispmkII
OBJECTS    = main.o
# FUSESのシステムクロック(lfuse第4ビット[下5桁目])を8分周から1分周に変更し2進数表記にした
FUSES      = -U lfuse:w:0b01111010:m -U hfuse:w:0b11111111:m
# デフォルト FUSES      = -U lfuse:w:0x6a:m -U hfuse:w:0xff:m

AVRDUDE = avrdude $(PROGRAMMER) -p $(DEVICE)
COMPILE = avr-gcc -Wall -Os -DF_CPU=$(CLOCK) -mmcu=$(DEVICE)

all:	main.hex

.c.o:
	$(COMPILE) -c $< -o $@

.S.o:
	$(COMPILE) -x assembler-with-cpp -c $< -o $@

.c.s:
	$(COMPILE) -S $< -o $@

flash:	all
	$(AVRDUDE) -U flash:w:main.hex:i

fuse:
	$(AVRDUDE) $(FUSES)

install: flash fuse

load: all
	bootloadHID main.hex

clean:
	rm -f main.hex main.elf $(OBJECTS)

main.elf: $(OBJECTS)
	$(COMPILE) -o main.elf $(OBJECTS)

main.hex: main.elf
	rm -f main.hex
	avr-objcopy -j .text -j .data -O ihex main.elf main.hex
	avr-size --format=avr --mcu=$(DEVICE) main.elf

disasm:	main.elf
	avr-objdump -d main.elf

cpp:
	$(COMPILE) -E main.c

# 以下追記
# cファイルからsファイル作成
asm:
	$(COMPILE) -S main.c
	
# sファイルからhexファイル作成
tar:
	$(COMPILE) -o main.o main.s -c
	$(COMPILE) -o main.elf main.o
	rm -f main.hex
	avr-objcopy -j .text -j .data -O ihex main.elf main.hex
	avr-size --format=avr --mcu=$(DEVICE) main.elf

[マイコン] Apple SiliconでAVRマイコンにhexファイルを書き込む

[M1 Mac, Big Sur 11.6.8, avr-gcc 9.4.0, NO IDE]

AVRマイコンへの書き込みではWindows環境でMicrochip Studioを使うのが定石ですが、Apple Siliconでも可能です。

一時は2014年以前のMac購入を覚悟しましたが、有志の方々が作ったApple Silicon対応コンパイラのおかげで買わずに済みました。

以下のツール等が必要になります。

1.CrossPack-AVR : Makefile作成ツール
Apple Siliconの場合 : Homebrewからインストールする。

brew install --cask crosspack-avr

Intel Macの場合 : 公式サイトからダウンロードしてインストールする。

2.avrdude : ライター操作ツール
Homebrewからインストールする。

brew install avrdude

3.avr-gcc : AVRマイコン専用コンパイラ
/usr/local/CrossPack-AVR/bin/avr-gccは古いので使用不可(Mac mini 2014以前で使用可)。”Bad CPU type in executable”というエラーが表示される。
別途、Homebrew経由でGitHubから最新版をインストールする。

brew tap osx-cross/avr
brew install avr-gcc
不適合Macでのエラー表示

書き込み手順は以下の通りです。

1.以下コマンドでプロジェクトを作成し、firmwareディレクトリへ移動する。

avr-project [プロジェクト名]

2.Makefileを書き換える。ATtiny13Aの場合は過去のMakefileをそのまま使える。書き換え方法は参考サイトを参照。

3.main.cを作成する。

4.makeコマンドでコンパイルする。

make

5.自製書き込みボードにAVRマイコンを装着する。

6.マイコンと接続したライターをMacとUSB接続する。

7.電源3V(単3×2)を自製書き込みボードに接続する。ライターがオレンジ色に点滅する場合は、電源をプラマイ逆に接続し赤色にしてから、正しい電極にする。緑色になればOK。

8.make flashコマンドでAVRマイコンへ書き込む。

make flash

9.用意しておいたブレッドボードにマイコンを装着して動作確認する。