ATMEGA328P /シリアル動作のスタンドアロンArduinoですが、シリアルプログラミングはありません(ブートローダを一度起動すると一度だけ)

私の卒業論文では、マイクロコントローラとして ATMEGA328P-AU のボードを設計しました。 ここに画像の説明を入力 いくつかのライブラリを使いたいのでシンプルさが好きなので、 "Arduino"を使ってプログラムしたいと思っています。

すべてが問題なく機能します: 私はArduino Unoをとり、 "ArduinoISP"スケッチをアップロードしました。 私はISPのピンを接続し、 "Arduino Duemilanove/Diecimila"に設定されたボードでブートローダーを焼きました。ブートローダーが焼損しているというメッセージがありました。 私はISPピンを切断し、UNOボード上のソケットからATMEGAを取り出し、シリアルピンを接続しました。

私が理解できない問題がここに来る:

上記の手順を完了すると、スケッチをアップロードしてシリアル通信が動作します。しかし、私は一度だけアップロードすることができます! 2回目(同じパワーアップ中でも別の時でも)アップロードスケッチボタンを押しても数分間は何の反応も出ません(私はもう何も来ないということを確認するために10分間待っていました:))。 USBまたはTX/RXケーブルのいずれかを抜くと、エラーが表示されます(またはUSBケーブルの場合も同様)。

avrdude:stk500v2_ReceiveMessage():タイムアウト

     

avrdude:stk500v2_getsync():プログラマと通信するタイムアウト

ブートローダーをもう一度アップロードすると、以前と同じようにスケッチをアップロードすることができます。同じ問題が再び発生します。

私はStackexchangeでいくつかの質問をチェックしました(特にここ)、問題を探知しましたが、今まで私は解決策を見つけることができません。

あなたが想像することができるように、常にRX/TXケーブルを外してISPケーブルを再び接続し、ブートローダを焼くのは非常に面倒です。

So my question: What could cause this problem and how can I solve it?

Btw。私は1.6.9を使用してArduinoソフトウェアのバージョンを使用しています

1
私はヒューズを変更しなかった。あなたは "何"のブートローダーを使っているのですか?別のものはありますか? Arduino 1.6.8環境で "Arduino Duemilanove/Diecimila"に設定されたボードでブートローダーを焼きました。
追加された 著者 Matt P,
RXとTXの2本の線は、4本のピンヘッダに行きます(4本の線、5V、TX、RX、Gndのケーブル用)
追加された 著者 Matt P,
ヒューズを交換しましたか?どのブートローダを使いましたか?
追加された 著者 Al.,
シリアル接続はどのように配線されていますか?その回路図には欠けています。
追加された 著者 Majenko,

2 答え

あなたの回路には問題があり、プログラミング時に配線されている方法もあります。シリアルプログラミングにRTSラインを使用できませんでした。その回線をATMega328のRESETに接続する必要があります。これはプログラミング用のブートローダのようなもので、ICがリセットされないとrserialは起動しません。また、Arduino UNOのブートローダーをあなたが選んだものよりも燃やすべきです。

ダイオードをESD保護として使用していることを明確にしたようです。ありがとうございます。ノイズの多い環境でリセットラインにコンデンサを接続することをお勧めします。

RTS信号とArduino RESETピンの間の回路は、次のようにする必要があります。

            C
 RTS >>----||------->> RESET(PIN1)
           0.1µF

同じ "私がArduinoをレンガしたことがありますか?"とあなたがリンクしているので、Nicks投稿の約3/4は、 Arduinoのシリアルプログラミングの使用

FTDI    Arduino Uno

GND       GND  (black wire on FTDI cable, blue jumper wire)
CTS       not connected
VCC       5V
TxD       D0 (RX)
RxD       D1 (TX)
RTS       To RESET with a 0.1 µF capacitor in series with it (green wire)

RTS出力を持つ適切なシリアルプログラマを持っていない場合は、IDEが "Uploading ..."と言うように、マイクロコントローラを手動でリセットしてブートローダーに入る必要があります。

Doh、どうして私はこれを逃しましたか...試してみましょう。
追加された 著者 Matt P,
ダイオードが正しい。 ESD保護のためのこのアプリケーションノートを参照してください。 atmel.com/Images/… またArduinoボードもそれを使用しています。 arduino.cc/en/uploads/Main/Arduino_Uno_Rev3-schematic.pdf
追加された 著者 Matt P,
返事が遅れて、あなたの答えが受け入れられたのは残念です。私はちょうど今それをテストするチャンスがあった!欠けているリセット接続が問題を解決しました!しかし、UNOブートローダーを使用してあなたの提案は機能していません。それはブートローダを焼いたと言います。しかし、スケッチをアップロードするときにタイムアウトが発生します。 Duemilanoveをブートローダとして選択すると、動作しています!
追加された 著者 Matt P,
@ KarlKarlsom私はそのESD保護を知っているが、なぜか。あなたはESDの起こりやすい環境でそれを持っていますか? ESD保護のために、より大きなパルス電流でダイオードを選択する可能性があります。
追加された 著者 RSM,

古いポストへの返信:リセットダイオードは実際にはESD保護ではありません。チップが高電圧に反応して高電圧プログラミングモードになるのを防ぐために高電圧スパイクをVccに分流し、シーケンスを完了するためのさらなる制御信号である。

0
追加された