進化した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です。ところで、大地震の確率が高まっているらしい。どういうできるわけではないけど、起こらないように祈る(―人―)
0 件のコメント:
コメントを投稿