· 

AVR128DB28でArduino(2)

 

進化した8bitAVRマイコン"AVR Dx"をArduinoにしてみる。Atmega328PのArduinoでリソースが足りない場合の選択肢としていんじゃないかなって。bootloaderを書き込むぜ。では、前回見た資料に従って配線してみる。
こうなる。USB-Serialはいつもの秋月FT231Xモジュールです。ダイオードはなんでもいいっぽいので、うちになぜか大量にあって始末に困っている1N4148です。抵抗は470Ω(見りゃわかるって?)。Arduinoでポートを選択。うちの場合はLinuxなので/dev/ttyUSB0
で、Programmerを選択する。はじめてのUPDIなので安全そうなSerialUPDI - SLOW: 57600 baudにする。
そして、「Burn Bootloader」、、、あ、あれ?できちゃった、、、?
ログを見てみる。
  1. SerialUPDI
  2. UPDI programming for Arduino using a serial adapter
  3. Based on pymcuprog, with significant modifications
  4. By Quentin Bolsee and Spence Konde
  5. Version 1.3.0.3 - Jul 2023
  6. Using serial port /dev/ttyUSB0 at 57600 baud.
  7. Target: avr128db28
  8. Set fuses: ['0:0b00000000', '1:0x00', '2:0x00', '5:0b11001000', '6:0b00001100', '7:0x00', '8:0x01']
  9. Action: write
  10. File: /home/hoge/.arduino15/packages/DxCore/hardware/megaavr/1.5.11/bootloaders/hex/optiboot_128dx_ser0_alt_extr.hex
  11. Pinging device...
  12. Ping response: 1E970E
  13. Setting fuse 0x0=0x0
  14. Writing literal values...
  15. Verifying literal values...
  16. Action took 0.16s
  17. Setting fuse 0x1=0x0
  18. Writing literal values...
  19. Verifying literal values...
  20. Action took 0.16s
  21. Setting fuse 0x2=0x0
  22. Writing literal values...
  23. Verifying literal values...
  24. Action took 0.16s
  25. Setting fuse 0x5=0xc8
  26. Writing literal values...
  27. Verifying literal values...
  28. Action took 0.16s
  29. Setting fuse 0x6=0xc
  30. Writing literal values...
  31. Verifying literal values...
  32. Action took 0.16s
  33. Setting fuse 0x7=0x0
  34. Writing literal values...
  35. Verifying literal values...
  36. Action took 0.16s
  37. Setting fuse 0x8=0x1
  38. Writing literal values...
  39. Verifying literal values...
  40. Action took 0.16s
  41. Finished writing fuses.
  42. Chip/Bulk erase,
  43. Memory type eeprom is conditionally erased (depending upon EESAVE fuse setting)
  44. Memory type flash is always erased
  45. Memory type lockbits is always erased
  46. ...
  47. Erased.
  48. Action took 0.06s
  49. Writing from hex file...
  50. Writing flash...
  51. Writing flash...
  52. Action took 0.46s
  53. Verifying...
  54. Verify successful. Data in flash matches data in specified hex-file
  55. Action took 0.27s
FUSE書き込みとかもやってくれてそう。まじか、、、すごいやん。
では、回路を変更して、普通にUART/bootloader経由での書き込みをやってみる。
RSTピンが結構メンドクサイ位置にあって変なところを経由しているけど、まぁいつも通りの回路です。
で、こんな単純なのやってみます。
  1. #define LED_PIN (19)
  2. void setup() {
  3.   pinMode(LED_PIN, OUTPUT);
  4. }
  5. void loop() {
  6.   digitalWrite(LED_PIN, HIGH);
  7.   delay(500);
  8.   digitalWrite(LED_PIN, LOW);
  9.   delay(500);
  10. }
で、書き込み。
うまくいったようです。そしてLEDが点滅します。で、本当に16MHzで動いているかどうかロジアナで確認すると、
ぴったり1sになっています。動作中にセラロックを引っこ抜くとLED点滅が止まるので、期待通りになっています。ということで、いいぞAVR Dxです。

ところで、大地震の確率が高まっているらしい。どういうできるわけではないけど、起こらないように祈る(―人―)