ATmega328P resettet bei I/O Zugriff

OP #7431451
Lesenswert?

Hallo!

Ich habe ein Projekt das HW-mässig auf einem Arduino Pro Mini basiert - kann über die IDE mit den gleichen Anschlüssen programmiert werden (Schaltplan im Anhang). Modifikationen gegenüber dem Original-Pro Mini (https://www.arduino.cc/en/uploads/Main/Arduino-Pro-Mini-schematic.pdf): Spannungsversorgung ATmega über Dioden (D6, D7) B140HW-7 (https://www.tme.eu/ro/details/b140hw-7/diode-schottky-smd/diodes-incorporated/) und LED an PD5 statt PB5. Zusätzlich zwei Anschlüsse für TFT-Displays an SPI mit Pegelwandler inkl. geschaltete Hintergrundbeleuchtung (PD3), Schaltregler zur 5V-Speisung. D2...D5 sind MBR0540 und L1 hat 22uH.

Problem: Firmware funktioniert soweit, wenn Speisung von Schaltregler erfolgt. FW sieht eine serielle Verbindung zur Parametrisierung vor, bei der der Schaltregler keine Spannung erhält. Durch die zusätzlichen Entkopplungsdioden (D6, D7) sollte das auch keine Problem sein - nur der ATmega wird gespiesen. Aber in diesem Modus resettet der ATmega sobald entweder ein Zugriff auf das Display (Zeile 84), oder auf den Transistor für die Hintergrundbeleuchtung (Q1) erfolgt (Zeile 92). Ich konnte das mit einem minimalisierten "Sketch" einkreisen, siehe Anhang.

Mit dem Oszilloskop habe ich die Versorgungsspannung am ATmega kontrolliert soweit das ging. Einen sichtlichen Einbruch gibt es nicht. Ich habe einen Einbruch vermutet, was aber unlogisch ist. U4 (ein SN74LVC245A https://www.tme.eu/Document/17347b0da61751aef74cc0cdbad7ac12/SN74LVC245A.pdf) erlaubt Eingangsspannungen bis 5.5V selbst wenn er keine Speisung hat, so wie ich das DaBla verstehe. Auch der Zugriff auf Q1 mit LOW sollte keine Auswirkung haben, vor allem weil ja +5V nicht vorhanden sind.

Warscheinlich bin ich völlig auf dem Holzweg, deswegen frage ich jetzt hier, ob jemand eine mögliche Erklärung sieht. Danke fürs Drüberschauen!

Gruss Chregu

(Firma: Funkenflug Industries) #7432017
Lesenswert?

Kann es sein, daß der 74 245 interne Klemmdioden hat, über die Du die 3,3V aus dem ATMega zu versorgen probierst und dadurch irgendwie ein Reset über das FT232-Modul oder so ausgelöst wird?

Übrigens finde ich die Idee mit dem Reset-Kondensator nicht gut, der Reset-Eingang des AVR ist recht hochohmig, mit so einem Kondensator da dran reicht der kleinste Störungs-Spike, um einen Reset auszulösen.

(Firma: Funkenflug Industries) #7432034
Lesenswert?

Mal spaßenshalber versucht, den Reset des AVR hart auf 5V zu legen, um diese Fehlerquelle auszuschließen?

Oder der AVR hat doch ein Register, wo drinsteht was einen Reset ausgelöst hat. Angenommen das Programm crasht nicht, schreibt doch was kurzes, was das ausliest und in einen Blinkcode für eine LED oder so umsetzt, vielleicht findet man darin weitere Informationen.

Ist doch schon wieder alles Rätselraten hier.

OP #7432046
Lesenswert?

Ben B. schrieb:

den Reset des AVR hart auf 5V zu legen, um diese Fehlerquelle auszuschließen?

Noch nicht, aber DAS könnte die Lösung sein! Der 10k liegt ja auf +5V vom Schaltregler, der - tataaa - keine Spannung liefert. Die Spannung kommt wahrscheinlich von der Schottky-Diode, die auch in Sperrrichtung relativ viel Strom fliessen lässt.

Ben B. schrieb:

finde ich die Idee mit dem Reset-Kondensator nicht gut

Ich auch nicht, aber ist halt üblich bei Arduino...

Gruss Chregu

(Firma: Funkenflug Industries) #7432096
Lesenswert?

Noch nicht, aber DAS könnte die Lösung sein! Der 10k liegt ja auf +5V vom Schaltregler, der - tataaa - keine Spannung liefert.

Dann kann das nicht funktionieren wenn dieser Schaltregler nicht läuft. Der interne PullUp am RESET des AVR ist viel hochohmiger als 10k, ich glaube im Bereich von 30..50k oder noch mehr, dadurch wird der Anschluss durch den 10k (gegen die 0V am Schaltregler-Ausgang) sehr weit heruntergezogen.

Vorsicht beim Brücken des Reset mit der AVR-Betriebsspannung falls der Schaltregler keine Rückwärtsspannung mag. Über den 10k könnte sich genug davon aufbauen, daß es für eine Beschädigung reicht wenn man Pech hat.

OP #7432488
Lesenswert?

Sebastian W. schrieb:

für den Kondensator AREF-GND würde ich 10nF statt 100nF nehmen. 10nF sind völlig ausreichend

Oh danke für den Tipp! Habe mal kurz durch das DaBla gescrollt, wo finde ich den entsprechenden Hinweis? Ich habe mich an der Schaltung von Arduino orientiert.

Christian M. schrieb:

Ben B. schrieb:

den Reset des AVR hart auf 5V zu legen, um diese Fehlerquelle auszuschließen?

Noch nicht, aber DAS könnte die Lösung sein! Der 10k liegt ja auf +5V vom Schaltregler, der - tataaa - keine Spannung liefert. Die Spannung kommt wahrscheinlich von der Schottky-Diode, die auch in Sperrrichtung relativ viel Strom fliessen lässt.

Es war genau das! Habe das beim Prototypen mal gefädelt, jetzt funktioniert es!

Vielen Dank!

Gruss Chregu

(Firma: Funkenflug Industries) #7432667
Lesenswert?

Es war genau das! Habe das beim Prototypen mal gefädelt, jetzt funktioniert es!

Na gugg, freut mich! :)

100 oder 10 nF am AREF... das wird wohl nur relevant, wenn man tatsächlich zwischen mehreren Referenzspannungen umschalten muss und ich versuche sowas zu vermeiden.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren