Forum: Mikrocontroller und Digitale Elektronik ATmega328P resettet bei I/O Zugriff


von Christian M. (christian_m280)



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

von Gerald M. (gerald_m17)


Lesenswert?

Was macht denn diese kapazitive Kopplung am FT232 Modul?

von Keks F. (keksliebhaber)


Lesenswert?

Die ist dafür da, dass wenn der Programmierer DTR/RTS hoch zieht am 
Anfang, dieser Pegelwechsel als einzelner Impuls übertragen wird um den 
Reset auszulösen.

Das mache ich bei meinen ATTinys in etwa genauso.

Es fehlen aber Widerstand und Diode.
https://github.com/SpenceKonde/megaTinyCore/blob/master/megaavr/extras/Ref_Reset.md

: Bearbeitet durch User
von Ron-Hardy G. (ron-hardy)


Lesenswert?

Christian M. schrieb:
> erlaubt Eingangsspannungen bis 5.5V selbst wenn er keine Speisung hat
eher nicht: "The inputs can accept voltages to 5.5 V at any valid VCC"
valid wäre irgendwas zwischen 1.65 und 3.6 V

von Christian M. (christian_m280)


Lesenswert?

Ja, ok, ich habe mich auf: "VI
Input voltage 0 5.5 0 5.5 0 5.5 V" bezogen. Ohne Einschränkungen der 
Versorgungsspannung.

Gruss Chregu

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


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.

von Veit D. (devil-elec)


Lesenswert?

Ben B. schrieb:

> Ü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.

Hallo,

es gibt noch den 10k Pullup. Mir sind keine Probleme bekannt. Für ein 
Hobbyboard okay. Ist ja sicherlich nicht im Industrieeinsatz.

von H. H. (Gast)


Lesenswert?

Ben B. schrieb:
> Kann es sein, daß der 74 245 interne Klemmdioden hat,

Hat er nicht, sein LVC.

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


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.

von Christian M. (christian_m280)


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

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


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.

von (prx) A. K. (prx)


Lesenswert?

Magst du die übrigen GNDs und VCCs nicht auch anschliessen?

von Christian M. (christian_m280)


Lesenswert?

Das hat Kicad automatisch gemacht. Ich weiß, ein bisschen 
unübersichtlich, habe mich auch gewundert - und kontrolliert...

Gruss Chregu

von Sebastian W. (wangnick)


Lesenswert?

FYI, für den Kondensator AREF-GND würde ich 10nF statt 100nF nehmen. 
10nF sind völlig ausreichend, und reduziert die für das Umschalten der 
AREF-Quelle nötige Zeit auf ein Zehntel.

LG, Sebastian

von Christian M. (christian_m280)


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

von Sebastian W. (wangnick)


Lesenswert?

Christian M. schrieb:
> 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.

Hier wurde das Thema diskutiert: 
Beitrag "AVR AREF intern: 100n zu GND wirklich hilfreich?".

LG, Sebastian

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.