スケッチをアップロードしているときに、カスタムArduinoボードのビープ音が鳴り、プロセスがフリーズします。どうして?


8

最も奇妙なことは、私が設計して構築したスタンドアロンのArduinoボードで起こっています。ボード(回路図は以下)には次の機能があります。

  1. スタンドアロンコントローラーとして設定された場合、5V電圧レギュレーターと通常の回路を備えたATmega328Pを備えています。
  2. 右側のコネクタ(JP1からJP12)を介してリンクされたいくつかの7桁の数字でスコアボードを制御します。
  3. ANALOG_0(A0)を介して電圧ラダーを使用してデコードされたカーソルボタンがあります。
  4. それはそれがオフになっているときに時間を保つためにリアルタイムクロックを持っています。
  5. RFレシーバーモジュールを備えています。
  6. UARTヘッダー(JP17)があるため、シリアルポートを使用してボードをプログラムできます。
  7. スピーカーはデジタルピン3(D3)に接続されています。

コントローラーの回路図

私が作成したRS232-to-TTLアダプター(以下の回路図も参照)とシリアル-to-USBケーブルを使用してスケッチをアップロードします。それをプログラミングするとき、ボードはセヴェリーノボードのように動作します。

ここに画像の説明を入力してください

奇妙なのは、スケッチをアップロードすると、プロセスが途中で一時停止し、その後スピーカーがビープ音を出し続けるということです。次のavrdudeメッセージで一時停止します。

avrdude:バージョン5.11、2011年9月2日19:38:36にコンパイルCopyright(c)2000-2005 Brian Dean、http: //www.bdmicro.com/ Copyright(c)2007-2009 Joerg Wunsch

     System wide configuration file is "C:\arduino-1.0.3\hardware/tools/avr/etc/avrdude.conf"

     Using Port                    : \\.\COM1
     Using Programmer              : arduino
     Overriding Baud Rate          : 115200

ボードのリセットを押すと、avrdudeがメッセージ(以下など)を出力し続け、ビープ音が止まり、アップロードが続行され、スケッチがボードに正常にアップロードされます。

avrdude: Send: 0 [30]   [20] 
avrdude: Send: 0 [30]   [20] 
avrdude: Send: 0 [30]   [20] 
... messages and upload continue and completes successfully.

残りのメッセージはここにはありませんが、お分かりいただければ幸いです。

だから、私の質問は:

  1. アップロードプロセスを一時停止させるのは何ですか。
  2. プロセスが一時停止するとブザーが鳴るのはなぜですか?

1
IDEの設定で、アップロードの詳細をオンにします。このログは、いくつかの洞察、またはより多くの手がかりを提供する必要があります。
mpflaga 14

1
愚かな質問:ブートローダーを使ってATmega328pをプログラミングしましたか?
コナーウルフ

1
「UNOで完全に機能する」-これは有用な情報です。したがって、ボードにはソケットが必要です。もしそうなら-あなたは簡単な実験でより具体的にソースを決定することができます。各IOピンについて、接触しないようにピンを曲げます。フローティング!ICをソケットに挿入すると、最終的には、すべてのピンをフローティングにすると、回路は問題外になります。そして、遅延/ビープ音の間のいくつかのポイントが停止するはずです。そして報告してください。
mpflaga 2014

1
@jfpoilpretスピーカーが実際にブザー(圧電)である場合、誘導がないため、ダイオードは必要ありません。元のコメントを忘れて。
jfpoilpret 14

1
若いころに多くの電子機器を作った私の友人の一人がかつて私に言った:「それがあなたが期待するように機能しない場合は、デカップリングコンデンサを追加してください」。多くの場合、私はこのアドバイスに従って大成功を収めました!ただし、回路図では、デカップリングキャパシティを追加できる場所がわかりません。//ブザーを使ってみましたか?また、2つ試してみてください(1つは低周波数用、1つは高周波数用)。1つは少なくとも1uFの電解、もう1つはセラミック100nFです。最悪の場合、効果はありません:-)
jfpoilpret 2014

回答:


3

アップロードプロセスを一時停止させるのは何ですか。

さて、あなたの質問の下で行われたすべてのコメントを考えると、これは間違いなくトリッキーなものです。あなたは(多分上のそれの見直し頼む... @jfpoilpretにより示唆されるように、あなたの回路図は私に大丈夫に見えるものの、デカップリングコンデンサを追加しようとする場合がありますEE SEを)。

avrdudeArduino IDEの出力からコマンドをコピーし(上部に表示されます)、ビットレートを低くしてコマンドシェルで実行することもお勧めします。

avrdude -v -v -v -v -C "C:\arduino-1.0.3\hardware/tools/avr/etc/avrdude.conf" -P COM1 -patmega328 -U… -B3 -b115200

-B値が高いほど、ビットレートは低くなります。そして、-bブートローダの正しいボーレートに(あなたがいることを確認、57600を見て、より一般的なのか?これは115200です)。

ヒューズも正しくセットしましたか?ヒューズの値をチェックして、クロックが正しく設定されているかどうかを確認することもできます。

avrdude -U lfuse:r:-:i -U hfuse:r:-:i -U efuse:r:-:i

ヒューズの値を出力します。次に、値を読みやすくするために、ドロップダウンリストからMCUを選択した後、ヒューズ計算サイトのフォームの下部に値を入力しAtmega328Pます。

次のことを再確認してください:

  • ブートローダー用の十分なサイズがある(通常、与えるほど多くなるほど良い)。
  • デザインのクリスタル構成を正しくセットアップしました(Arduino IDEによるセットアップとしてのデフォルトのUno設定と互換性がない可能性があります)。16MHzで外部クリスタルを正しくセットアップしているかどうかを確認します…

プロセスが一時停止するとブザーが鳴るのはなぜですか?

これは、プロセッサに出力が設定されていない場合、レジスタ内の値が未定義で予測不可能な状態になるためです。つまり、通常、リセット前の最後の値を保持するか、静電的異常のために状態を変更したり、近くのクロックの影響のために奇妙なPWM出力を出力したりします。

したがって、基本的に、コードをアップロードするときに何か問題が発生し、その問題はオーディオに間接的な影響を及ぼします。私はそれについてはあまり心配しませんが、一時停止の原因についてはもっと心配します。

悲しいことに、私はあなたに直接的な答えはありませんが、せいぜいいくつかの方法でさらに調査する必要があります。HTH


+1ヒントをありがとう!非常に便利。私はそれらすべてを試して、数日後に報告します。
Ricardo

私が問題を修正したことをあなたに知らせたかっただけです。この質問に対する私の答えを見てください。とにかくありがとう!
リカルド

3

私はようやく問題の原因を見つけました。DB9-メスコネクタのピン4(DTR-データターミナルレディ)からのリセット信号は、0Vになる前に最大10Vに急上昇し、ATmegaで高電圧プログラミングをトリガーしていました。以下は、状況を示すスコープショットです。

10Vへの電圧スパイクを示すスコープショット

黄色のトレースはDTR信号であり、緑のトレースはRESETATmegaの信号です。

AtmelのによるとアトメルAVR042:AVRハードウェア設計上の考慮事項アプリケーションノート、一つはATMEGAの間のESDダイオードを追加する必要がありますRESETし、Vccそうのように、高電圧プログラミングモードをトリガからのリセット信号を防ぐために:

ATmegaの推奨RESETピン接続

このような小さな信号ダイオード(1N4148)を、推奨されるアプリケーションノートのように追加した後、問題を修正しました。ダイオードを追加した後のスコープショットを以下に示します。

ボード固定後のスコープ撮影

これで10Vのピークはなくなりました。

トリッキーでした!! しかし、研究と適切なツールがなければ、何が悪いのかを見つけることはできませんでした。スコープのお金はよく使われるお金です!!


1
これは、リセットラインがシリアルデータラインに適用される種類のレベルトランスレーターを持っていないために起こります。ほとんどはレベルトランスレータicを使用し、そのチャネルを介してリセットを実行します。
Chris Stratton、2014年

@クリス-ええ、私はあなたがそれを修正するために2番目のMAX232コンバーターを使うように言ったのを覚えています。私はもう一度見て、そのデザインを修正できるかどうかを確認します。ありがとう!!
Ricardo

1

よくわかりませんが、コンバーターボードの自動リセット機能に問題がある可能性もあります。

Arduino Severinoからコンバーターボードのデザインをコピーしました。そのマニュアルによれば、自動リセット機能を動作させるには、シリアル通信を19,200 bpsに設定する必要があります。

コンピューターのCOMポートの速度が19200bpsに設定されていることを確認してください。そうしないと、自動リセットが正しく機能しません。

まあ、私は115,200を使用しているので、それは問題になるに違いありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.