Nobutarou / ArduinoDeAsobu

Arduino で遊んだときの記録
GNU General Public License v3.0
0 stars 0 forks source link

書き込み失敗調査 #82

Open Nobutarou opened 2 months ago

Nobutarou commented 2 months ago

RX (ATMega側) - GND 間に C 0.1uF を入れると書き込めない。 TX - GND 間は大丈夫。通信機側からの信号を受けとれなかったということだろう。

UART とか シリアル通信とかで調べていると TX, RX をプルアップしている例がある。R 2k 入れてみたが、書き込みできる。 https://www.ele-lab.com/mcu11.php

書き込めない症状が出たら試してみよう。

Nobutarou commented 2 months ago

https://forum.microchip.com/s/topic/a5C3l000000McDZEA0/t376969 https://community.infineon.com/t5/%E3%83%8A%E3%83%AC%E3%83%83%E3%82%B8%E3%83%99%E3%83%BC%E3%82%B9%E3%82%A2%E3%83%BC%E3%83%86%E3%82%A3%E3%82%AF%E3%83%AB-KBA/PSoC-4-%E3%83%87%E3%83%90%E3%82%A4%E3%82%B9%E3%81%A7%E3%83%95%E3%82%A1%E3%83%BC%E3%83%A0%E3%82%A6%E3%82%A7%E3%82%A2%E3%81%8B%E3%82%89-UART-%E3%81%AE-Tx-%E3%81%A8-Rx-%E3%83%94%E3%83%B3%E3%82%92%E5%88%B6%E5%BE%A1%E3%81%99%E3%82%8B-KBA224950-Community-Translated-JA/ta-p/251055#.

RX だけプルアップとか書いてあるが Arduino は RX -> TX, TX -> RX っていう双方向の通信だから、結局両方とも pull up なのでは?

Nobutarou commented 2 months ago

USB シリアルに PIC16F1455 を使って kit scope で TX, RX (PIC から見て) の様子を見てみた。TX は High が出ている。RX は 1~2.5V くらいをふらふらしていると思ったが、ブートローダは終了してスケッチが走ってるだけだ。

RX (実際は ATMega の TX) を R 1k でプルアップしてみたとろ、ずっと High のままだった。書き込めた。

逆に RX (実際は ATMega の TX) を R 1k でプルダウンしてみた。こちらは書き込み中に High も出てた。ATMegaの TX は output で High, Low は出さないということになる。これも書き込めた。ATMega328P からの通信は全部無視なのであろうか。

TX (実際は ATMega の RX) をプルダウンしてみた。もともと直列で 1kΩが入っているので電圧降下を避けるため 22kΩを入れておいた。書き込める。どうやら PIC 側は High も Low も output するようだ。

逆に TX (実際は ATMega の RX) を R22kΩでプルアップしてみた。書き込める。

ATMega の TX が一番怪しいんだけど、TX が何を出そうが無視してるみたいなので、どうなろうが問題ない気がする。

やはり、書き込めなくなったときに調べないといけない。

Nobutarou commented 2 months ago

atmega の tx はブートローダー実行中、つまり外部リセットから2秒弱の間を見なくてはいけない

Nobutarou commented 2 months ago

適当に Lチカを書きこんでから ATMega の TX を見てみる。Lチカ中は浮いていて、リセット掛けたあとも浮きっぱなしである。つまりブートローダ中は、自分から TX 信号を出さないし、かつ、データ無転送状態を示すための H にもしないことが分かる。

TX を 1kΩでプルアップして書き込むと、書き込み中に H, L は出る。プルダウンしておいても H, L 出る。ただ TX の何も無し状態は H なので、するならプルアップだろう。

ブートローダ実行中に TX が浮いているのが気になるが、これでも書き込めている。

Nobutarou commented 2 months ago

リセットピンも見てみたが DTR によるパルスも 0V に到達していた。

Nobutarou commented 2 months ago

PIC の DTR 側を見ておこうとして一つ発見。kit_scope のプローブを当てると、ASOBoard をリセットしても H に戻らなかったり、4V くらいまでしか戻らないときがある。USB を抜き差ししなおしたら書き込めたし、ちゃんと 0, 5V での L, H も出てた。

おかしいときは DTR を疑うのが良いかもしれない。

Nobutarou commented 3 weeks ago

また出た。

  1. ブレボ上で MiniCore ブートローダと Blink 書き込み
  2. ASOBoard で Arduino IDE からの書き込み失敗
  3. ASOBoard で Arduino as ISP からの書き込み OK
  4. 他の ATMega328P に差し替えて Arduino as ISP から MiniCore ブートローダー書き込み
  5. そのまま Arduino IDE から書き込み成功
  6. 失敗していた ATMega328P に差し替えて MiniCore の内蔵クリスタル 8MHz のブートローダ書き込み
  7. Arduino IDE からの書き込み成功
  8. MiniCore の外部 16MHz ブートローダを書き込み
  9. Arduino IDE からの書き込み成功

結局分からない。7の時点でマイコンがちょっと怪しかったのかと思ったが結局は動いた。

今考えているのは、飛び散ったはんだが、変なところで微妙なショートを起こしていたり、残ってしまったフラックスのせいで、ソケットなどで微妙に接触不要をしてたりで、テスターの抵抗チェックでは問題ないんだけど、実は微妙なチャタリングみたいなのが起きてたりしてたのが、こねこねしてるうちに、解消した、みたいな物理的な問題なのかなあと思っている。