進化した8bitAVRマイコン"AVR Dx"をArduinoにしてみる。Atmega328PのArduinoでリソースが足りない場合の選択肢としていんじゃないかなって。bootloaderを書き込むぜ。では、前回見た資料に従って配線してみる。
こうなる。USB-Serialはいつもの秋月FT231Xモジュールです。ダイオードはなんでもいいっぽいので、うちになぜか大量にあって始末に困っている1N4148です。抵抗は470Ω(見りゃわかるって?)。Arduinoでポートを選択。うちの場合はLinuxなので/dev/ttyUSB0 で、Programmerを選択する。はじめてのUPDIなので安全そうなSerialUPDI - SLOW: 57600 baudにする。 そして、「Burn Bootloader」、、、あ、あれ?できちゃった、、、? ログを見てみる。
-
SerialUPDI
-
UPDI programming for Arduino using a serial adapter
-
Based on pymcuprog, with significant modifications
-
By Quentin Bolsee and Spence Konde
-
Version 1.3.0.3 - Jul 2023
-
Using serial port /dev/ttyUSB0 at 57600 baud.
-
Target: avr128db28
-
Set fuses: ['0:0b00000000', '1:0x00', '2:0x00', '5:0b11001000', '6:0b00001100', '7:0x00', '8:0x01']
-
Action: write
-
File: /home/hoge/.arduino15/packages/DxCore/hardware/megaavr/1.5.11/bootloaders/hex/optiboot_128dx_ser0_alt_extr.hex
-
Pinging device...
-
Ping response: 1E970E
-
Setting fuse 0x0=0x0
-
Writing literal values...
-
Verifying literal values...
-
Action took 0.16s
-
Setting fuse 0x1=0x0
-
Writing literal values...
-
Verifying literal values...
-
Action took 0.16s
-
Setting fuse 0x2=0x0
-
Writing literal values...
-
Verifying literal values...
-
Action took 0.16s
-
Setting fuse 0x5=0xc8
-
Writing literal values...
-
Verifying literal values...
-
Action took 0.16s
-
Setting fuse 0x6=0xc
-
Writing literal values...
-
Verifying literal values...
-
Action took 0.16s
-
Setting fuse 0x7=0x0
-
Writing literal values...
-
Verifying literal values...
-
Action took 0.16s
-
Setting fuse 0x8=0x1
-
Writing literal values...
-
Verifying literal values...
-
Action took 0.16s
-
Finished writing fuses.
-
Chip/Bulk erase,
-
Memory type eeprom is conditionally erased (depending upon EESAVE fuse setting)
-
Memory type flash is always erased
-
Memory type lockbits is always erased
-
...
-
Erased.
-
Action took 0.06s
-
Writing from hex file...
-
Writing flash...
-
Writing flash...
-
Action took 0.46s
-
Verifying...
-
Verify successful. Data in flash matches data in specified hex-file
-
Action took 0.27s
で、こんな単純なのやってみます。
-
#define LED_PIN (19)
-
void setup() {
-
pinMode(LED_PIN, OUTPUT);
-
}
-
void loop() {
-
digitalWrite(LED_PIN, HIGH);
-
delay(500);
-
digitalWrite(LED_PIN, LOW);
-
delay(500);
-
}
で、書き込み。
うまくいったようです。そしてLEDが点滅します。で、本当に16MHzで動いているかどうかロジアナで確認すると、
ぴったり1sになっています。動作中にセラロックを引っこ抜くとLED点滅が止まるので、期待通りになっています。ということで、いいぞAVR Dxです。
ところで、大地震の確率が高まっているらしい。どういうできるわけではないけど、起こらないように祈る(―人―)
コメントをお書きください