Ich habe einen ATmega644, der über den UART mit einem anderen Gerät verbunden ist. Nach dem Empfang einiger Zeichen auf dem UART wird das Gerät zurückgesetzt und / oder verhält sich seltsam. Einige Beispiele für dieses Verhalten:
Das Gerät verwendet einen externen 18,432-MHz-Quarz und der UART ist auf 19200 Baud eingestellt. Es wird mit 5V betrieben; Der RX-Pin ist mit einem 3V3-RPi verbunden.
Auch wenn das Problem bei diesem speziellen Setup etwas anderes war (wie in einer anderen Antwort hervorgehoben), besteht ein weiterer häufiger Grund darin, dass der Controller in Bezug auf die Vcc-VS-Taktgeschwindigkeit außerhalb des "sicheren Betriebsbereichs" betrieben wird.
Mit 18,432 MHz Taktrate würde das Gerät mindestens etwa 4,2 V benötigen, um richtig zu funktionieren.
Intermittierendes Verhalten ist oft das Ergebnis fehlender oder unzureichender Leistungsentkopplungskappen in der Nähe Ihres Controllers? Als Faustregel gilt: 100 nF für jeden Pin mit der Bezeichnung Vcc, so nah wie möglich an den Power-Pins des Controllers. Wenn Sie schon dabei sind, ist es immer gut, Ihre Stromschienen mit einem Voltmeter (und einem Oszilloskop, falls verfügbar) zu überprüfen.
Dies wird normalerweise durch falsche CKSEL- Sicherungen verursacht. Der ATmega644 muss so konfiguriert werden, dass er den Quarz im "Full Swing Oscillator"-Modus für Taktraten über 16 MHz antreibt; Für bestimmte andere MCUs scheint diese Option ein separates Sicherungsbit namens CKOPT oder CLKOPT zu sein
In meinem Fall hat es die Verwendung von CKSEL = 0111 behoben, aber der beste Weg, die richtigen Sicherungen herauszufinden, ist die Verwendung eines Sicherungsrechners und die Überprüfung der Ergebnisse anhand des Datenblatts, bevor sie geschrieben werden.
Ist es möglich, dass Sie den RS232-Port des Computers direkt mit den UART-Pins der ATmega MCU verbunden haben?
Die + und - Spannungsschwankungen des RS232-Ports würden den ordnungsgemäßen Betrieb des MCU-Siliziums verheeren. Diese Verwüstung könnte zu einem der von Ihnen beschriebenen Fehlersymptome führen.
Normalerweise werden die Leitungen eines RS232-Ports eines PC-Computers durch einen Spannungspegelumsetzer gepuffert, der sie in Spannungspegel umwandelt, die mit der MCU kompatibel sind. Wenn Sie dies nicht eingerichtet haben, ist eine Änderung Ihrer Einrichtung erforderlich.
DiebMeister
Michael Karas