Das Seltsamste passiert mit einem eigenständigen Arduino-Board, das ich entworfen und gebaut habe. Die Karte (deren Schaltpläne unten aufgeführt sind) weist die folgenden Funktionen auf:
- Es verfügt über einen ATmega328P mit einem 5-V-Spannungsregler und üblichen Schaltkreisen, wenn es als eigenständiger Controller eingerichtet ist.
- Es steuert eine Anzeigetafel mit mehreren 7-stelligen Ziffern, die über die Anschlüsse rechts (JP1 bis JP12) verbunden sind.
- Es verfügt über Cursortasten, die mithilfe einer Spannungsleiter über ANALOG_0 (A0) decodiert wurden.
- Es hat eine Echtzeituhr, um die Zeit zu halten, wenn es ausgeschaltet ist.
- Es verfügt über ein HF-Empfängermodul.
- Es hat einen UART-Header (JP17), so dass ich die Karte über eine serielle Schnittstelle programmieren kann.
- An den digitalen Pin 3 (D3) ist ein Lautsprecher angeschlossen.
Ich lade Skizzen mit einem RS232-zu-TTL-Adapter, den ich ebenfalls erstellt habe (Schaltpläne siehe unten), und einem Serial-zu-USB-Kabel hoch. Bei der Programmierung verhält sich die Karte ähnlich wie eine Severino-Karte .
Was seltsam ist, ist, dass beim Hochladen einer Skizze der Vorgang in der Mitte angehalten wird und der Lautsprecher dann kontinuierlich piept. Es wird mit den folgenden avrdude-Nachrichten angehalten:
avrdude: Version 5.11, zusammengestellt am 2. September 2011 um 19:38:36 Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/ Copyright (c) 2007-2009 Jörg 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
Wenn ich auf der Karte auf Zurücksetzen drücke, gibt avrdude seine Nachrichten weiter aus (siehe unten), der Piepton stoppt, der Upload wird fortgesetzt und die Skizze wird erfolgreich auf die Karte hochgeladen.
avrdude: Send: 0 [30] [20]
avrdude: Send: 0 [30] [20]
avrdude: Send: 0 [30] [20]
... messages and upload continue and completes successfully.
Ich habe den Rest der Nachrichten hier nicht zur Hand, aber ich hoffe, Sie haben die Idee.
Meine Fragen sind also:
- Wodurch wird der Upload-Vorgang angehalten?
- Warum piept der Summer, wenn der Vorgang angehalten wird?
Antworten:
Nun, angesichts all der Kommentare, die unter Ihrer Frage gemacht wurden, ist dies definitiv eine schwierige Frage. Vielleicht möchten Sie versuchen, einen Entkopplungskondensator hinzuzufügen, wie von @jfpoilpret vorgeschlagen, obwohl Ihre Schaltpläne für mich in Ordnung sind… (fragen Sie vielleicht bei EE SE nach einer Überprüfung ).
Ich würde Ihnen auch raten, den
avrdude
Befehl von der Arduino IDE-Ausgabe zu kopieren (Sie finden ihn oben) und ihn in der Befehlsshell mit niedrigerer Bitrate auszuführen:-B
Je höher der Wert ist, desto niedriger ist Ihre Bitrate. und-b
auf die richtige Baudrate für Ihren Bootloader (sind Sie sicher, dass dies 115200 ist? Es ist üblicher, 57600 zu sehen).Haben Sie auch die Sicherungen richtig eingestellt? Sie können auch die Werte der Sicherungen überprüfen, um festzustellen, ob die Uhren richtig eingestellt sind:
Dadurch werden die Werte der Sicherungen ausgegeben. Um die Werte lesbar zu machen, platzieren Sie die Werte am unteren Rand des Formulars auf der Sicherungsrechner-Site , nachdem Sie die
Atmega328P
MCU aus der Dropdown-Liste ausgewählt haben.Überprüfen Sie Folgendes:
Dies liegt daran, dass sich die Werte in den Registern in einem undefinierten und unvorhersehbaren Zustand befinden, wenn der Ausgang des Prozessors nicht eingerichtet ist. Dies bedeutet, dass es normalerweise den letzten Wert beibehält, den es vor einem Zurücksetzen hatte oder den Zustand aufgrund einer elektrostatischen Verrücktheit geändert hat, oder aufgrund des Einflusses einer Uhr in der Nähe eine seltsame PWM-Ausgabe liefert.
Grundsätzlich passiert also etwas nicht, wenn Sie Ihren Code hochladen, und das Falsche wirkt sich indirekt auf das Audio aus. Ich würde mir nicht viel Sorgen um dieses Zeug machen, sondern mehr um die Ursache der Pause.
Leider habe ich keine direkte Antwort für Sie, aber bestenfalls ein paar Wege, die Sie genauer untersuchen sollten. HTH
quelle
Endlich habe ich herausgefunden, was das Problem verursacht hat: Das Rücksetzsignal von Pin 4 (DTR - Data Terminal Ready) an der DB9-Buchse stieg auf 10 V an, bevor es auf 0 V ging, und löste eine Hochspannungsprogrammierung auf dem ATmega aus. Unten sehen Sie eine Scope-Aufnahme, die die Situation zeigt:
Die gelbe Spur ist ein
DTR
Signal, während die grüne Spur dasRESET
Signal auf dem ATmega ist.Nach Atmels Atmel AVR042: AVR Hardware Design Considerations Anwendungshinweis , sollte man eine ESD - Diode zwischen ATmega der hinzufügen
RESET
undVcc
das Rücksetzsignal zu verhindern , Hochspannungs - Programmiermodus auslöst, etwa so:Nachdem ich eine so kleine Signaldiode (1N4148) wie im empfohlenen App-Hinweis hinzugefügt hatte, wurde das Problem behoben. Siehe unten die Scope-Aufnahme, die nach dem Hinzufügen der Diode gemacht wurde.
Jetzt ist der 10V Peak weg.
Das war eine knifflige Sache !! Aber ohne Forschung und die richtigen Werkzeuge konnte ich nie herausfinden, was falsch war. Geld für ein Zielfernrohr ist gut angelegtes Geld !!
quelle
Ich bin nicht sicher, aber das Problem kann auch mit der Funktion zum automatischen Zurücksetzen der Konverterplatine zusammenhängen.
Ich habe das Design der Konverterplatine vom Arduino Severino kopiert und laut Handbuch muss die serielle Kommunikation auf 19.200 Bit / s eingestellt sein, damit die Funktion zum automatischen Zurücksetzen funktioniert.
Nun, ich benutze 115.200, also muss das ein Problem sein.
quelle