Interner Reset im ATMega 8 (PDIP)

03/08/2008 - 14:02 von Artur | Report spam
Hallo NG,

nun ist es denke ich passiert! Bisher habe ich alle meine Schaltungen
in denen ein AVR werkelt immer über eine externe RESET-Schaltung (egal
ob eigenes IC oder nur diskret über Diode, Kondensator und Widerstand)
resettet.
Irgendwann habe ich dann gehört das es "ausreichen" soll den internen
POR (Power On Reset) zu nutzen. Diese Erkenntnis habe ich dann in ein
Projekt einfließen lassen und so auf sàmtliche externe Beschaltung des
Reseteingangs verzichtet. GROBER FEHLER wie sich jetzt
herausgestellt hat!

In dem Projekt, wo ich diesen Fehler gemacht habe, werden 4 gleiche
Platinen auf denen jeweils ein eigener Step-Down-Wandler, AVR und ein
paar Eingangsschutzschaltungen sind, über ein 4-Adriges Kabel
untereinander über RS485 und mit einem USB zu RS485 Interface mit dem
PC verbunden.
2 Leitungen des Kabels werden für RS485 und die anderen 2 Leitungen
für die Spannungsversorgung 24V= genutzt.
Das Netzteil, das die 24V Gelichspannung erzeugt, befindet sich bei
dem PC an dem auch das USB zu RS485-Modul angeschlossen ist
(Hintergrund: die 4 Platinen befinden sich in einem Hygeine-Bereich in
dem mit sehr viel Wasser gereinigt wird und darum wollte ich dort
nicht mit 230V arbeiten). Das erste Modul ist vom PC über 45m Kabel
entfernt am RS485-Bus angeschlossen und die folgenden Module sind dann
jeweils im Abstand von jeweils 2m an den Bus angeschlossen.

Bei der ersten Inbetriebnahme des Gesamtsystems funktioniert alles
einwandfrei. Ich konnte über den RS485-Bus mit einer Geschwindigkeit
von 56kBaud vom PC auf die einzelnen Module (mit denen lediglich
Impulse gezàhlt werden (ca. 0,5 bis 1Hz) zugreifen. Nach kurzer Zeit
konnte dann die Software auf dem PC nur noch das erste, am Bus
angeschlossene, Modul automatisch durch Adressscanning erkennen.

An diesem Wochenende habe ich dann endlich Zeit gefunden dieses
Problem nàher zu untersuchen und habe festgestellt das, wenn ich die
Spannungsversorgung über den Bus kurz einschalte, dann sofort wieder
ausschalte, kurz warte (LED an Netzteil erlischt langsam) und dann
wieder einschalte, auch die restlichen Module am Bus durch die
Software auf dem PC automatisch erkannt werden.

Ich vermute nun das durch die Sequenz: Spannung einschalten,
ausschalten, warten und wieder einschalten die restlichen Module erst
richtig in den Reset laufen und somit richtig initialisiert werden.

Nun kann ich natürlich an dem SPI-Interface der Platine eine kleine
Resetschaltung aufsteckbar nachrüsten aber gibt es irgend eine
softwaretechnische Möglichkeit den AVR zum Resetten zu zwingen? Die
Fuses in den AVRs sind bereits so eingestellt das von einer langsam
ansteigenden Spannung ausgegangen wird und einer möglichst langer
Reset von 65ms intern im AVR erzeugt wird.

Liegt es vielleicht auch an die Step-Down-Wandler 24VDC -> 5VDC? Ich
habe dort etwas zu große Kondensatoren in der Eingangsschaltung und
der Ausgangsschaltung. Aber warum funktioniert dann das erste Modul am
Bus fehlerfrei?

Für Anregungen bin ich jederzeit dankbar!

Artur
 

Lesen sie die antworten

#1 Thomas Kindler
03/08/2008 - 14:22 | Warnen spam
Artur wrote:
nun ist es denke ich passiert! Bisher habe ich alle meine Schaltungen
in denen ein AVR werkelt immer über eine externe RESET-Schaltung (egal
ob eigenes IC oder nur diskret über Diode, Kondensator und Widerstand)
resettet.
Irgendwann habe ich dann gehört das es "ausreichen" soll den internen
POR (Power On Reset) zu nutzen. Diese Erkenntnis habe ich dann in ein
Projekt einfließen lassen und so auf sàmtliche externe Beschaltung des
Reseteingangs verzichtet.



http://www.atmel.com/dyn/resources/...oc2521.pdf

"The reset line has an internal pull-up resistor, but if the environment is
noisy it can be insufficient and reset can therefore occur sporadically.
Refer to datasheet for value of pull-up resistor on specific devices"

Als Minimal-Beschaltung nimmt man besser einen 4k7-PullUp, oder legt den Pin
direkt auf Vcc.

GROBER FEHLER wie sich jetzt herausgestellt hat!



Ja, sicherlich. Reset-Pin offenlassen mag gehen, wenn's 'ne ganz einfache,
Batteriegetriebene Schaltung ist.. Aber bei "Step-Down-Wandler, mehrere
Potentialgruppen (RS485, USB), 24V, 45m Kabel" wundert mich das nicht..

Nun kann ich natürlich an dem SPI-Interface der Platine eine kleine
Resetschaltung aufsteckbar nachrüsten



Leider liegen Reset und Vcc nicht nebeneinander, sonst würde ein Jumper
reichen..

Man kann den Reset-Pin auch per Fuse deaktivieren. Allerdings wird das
Programmieren danach blöd -- geht nur noch im High-Voltage-Modus.

aber gibt es irgend eine
softwaretechnische Möglichkeit den AVR zum Resetten zu zwingen? Die
Fuses in den AVRs sind bereits so eingestellt das von einer langsam
ansteigenden Spannung ausgegangen wird und einer möglichst langer
Reset von 65ms intern im AVR erzeugt wird.



Den Watchdog-Timer benutzt du schon?

Thomas Kindler,

Ähnliche fragen