Arduino Uno R3 を AVRライタにして atmega328p-pu で L チカ


タイトル画像(容量大)
やっとこさ電子回路の Hello World! こと L チカを行うことが出来ました。

簡単にまとめます。

まずは Arduino Uno に AVR ライタのプログラムを書き込みます。
普通に PC に Arduino Uno をつなぎ、Arduino IDE から
ファイル -> スケッチの例 -> 11.ArduinoISP -> ArduinoISP を開き、それを転送したら OK です。

その後、Arduino Uno とターゲットとする ATMega328p をブレッドボードでごにょごにょします。
回路の詳細は Using an Arduino as an AVR ISP (In-System Programmer) [acruino.cc] にあります。
内蔵クロックを利用して動作させるので、ものすごく簡単な回路です。

適当なフォルダを作り、以下の Makefile を作ります。
ちなみに、Cross Pack for AVR で avr-project した時に生成される Makefile を基にしました。

##
#  Name: Makefile
#  Author: kuroshima
#  Copyright: Copyright(c) bisland.xyz All Rights Reserved.
##

DEVICE     = atmega328p
PROGRAMMER = -c avrisp -P /dev/cu.usb* -b19200 -v

OBJECTS    = main.o
#	FUSES      = -U lfuse:w:0xad:m -U hfuse:w:0x69:m
	FUSES      = -U efuse:w:0x07:m -U hfuse:w:0xd9:m -U lfuse:w:0x62:m # low 10011101 high 00100110 ex 000 8MHz internal

AVRDUDE = avrdude $(PROGRAMMER) -p $(DEVICE)
COMPILE = avr-gcc -Wall -Os -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

reinstall: clean flash fuse

 

同じ階層に、main.c を作ります。

/*
 * Name: main.c
 * Author: kuroshima
 * Copyright: Copyright(c) bisland.xyz All Rights Reserved.
 */

// delay 用クロック設定
// 内蔵 8MHz(CKDIV=0 なので 1/8)
#define F_CPU   (8000000UL / 8UL)

#include <avr/io.h>
#include <avr/delay.h>

int main(void) {

    // L チカ用ピン
    int pin_led = PIND3;

    // RX(0) と TK(1) は変更せず。それ以外は出力に設定(0xFC = 0b11111100)
    DDRD = DDRD | 0b11111100;

    for(;;){
        // LED 点灯
        PORTD |= _BV(pin_led);
        _delay_ms(500UL);

        // LED 消灯
        PORTD &= ~_BV(pin_led);
        _delay_ms(500UL);

    }
    return 0;
}

 

ターミナルから上記ファイルを作成したフォルダにうつり、

make install

するとマイコンに転送されますので、あとは確認用回路を組むとタイトル画像の用に L チカを思う存分楽しめます。

main.c を編集して再度転送する場合は、コンパイルしたバイナリが邪魔なので、
消去後、再度 make install するのが面倒だったので、reinstall を追加しました。
make reinstall 便利です。

おわり。


コメントを残す

メールアドレスが公開されることはありません。