Forum: Mikrocontroller und Digitale Elektronik ungewolltes Auslösen des IRQ durch Netzteil


von Steffen (Gast)


Angehängte Dateien:

Lesenswert?

Guten morgen,

ich steh vor einem Problem, ich habe einen Zähler gebaut, der immer dann 
anfängt zu zählen wenn man ihn einschaltet, besser gesagt das Netzteil 
in die Steckdose steckt. Und genau das ist das Problem, das geht einige 
Male gut, ab und an zählt das Teil aber kurz los. Meinem empfinden nach, 
immer dann wenn das Netzteil n Lichtbogen am Anschluss macht... weiß 
eben nicht wie ich mich ausdrücken soll. Ist ein Schaltnetzteil, und die 
machen ja manchmal diesen kleinen Lichtbogen beim einstecken.

Ich nutze einen Atmega8 und am IRQ0 eine Taktquelle (RV3029) von 1s. Am 
Code kann es nicht liegen, der läuft. (im Anhang)

Hab schon einiges Probiert, Pausen bevor der IRQ eingeschaltet wird, 
hilft nichts.

Gibt es eine möglichkeit wie ich diesen Fehler mit der Spannungsquelle 
lösen kann?

Danke & Gruß Steffen

von Kai (Gast)


Lesenswert?

ein Schaltplan wäre noch gut

von Dietrich L. (dietrichl)


Lesenswert?

Kai schrieb:
> ein Schaltplan wäre noch gut

+ Layout / Foto

von HalbTroll (Gast)


Lesenswert?

Das waer dann EMV. Da sollte man sich von einseitig, Lochraster, Steck- 
und so loesen.

von MaWin (Gast)


Lesenswert?

Steffen schrieb:
> Gibt es eine möglichkeit wie ich diesen Fehler mit der Spannungsquelle
> lösen kann?

Offenbar taugt deine Schaltung nichts und ist daher zu störempfindlich.

Ein normaler Microcontroller braucht einen RESET Impuls um loszulegen.

Die AVR haben dazu eine RESET Mechanismus eingebaut, der einen Power On 
Reset auslöst. Der kann aber nur arbeiten, wenn die Betriebsspannung 
schnell genug ansteigt. Daher benötigen manche Schaltungen noch eine 
externe Reset-Beschaltung, per RC oder RESET-Controller.

Auch das kann der AVR intern, aber aazu muss der AVR aber mit den 
richtigen fuses programmiert werden.
Suche nach Brown Out Detec Level und programmmiere den richtigen 
Spannungswert.

http://www.ladyada.net/learn/avr/fuses.html

von Steffen (Gast)


Angehängte Dateien:

Lesenswert?

HalbTroll schrieb:
> Das waer dann EMV. Da sollte man sich von einseitig, Lochraster, Steck-
> und so loesen.

ist alles fest aufgebaut. Ich habe es mit dem R/C am IRQ und auch ohne 
getestet.

von Peter D. (peda)


Lesenswert?

Steffen schrieb:
> Und genau das ist das Problem, das geht einige
> Male gut, ab und an zählt das Teil aber kurz los.

???

Versuch mal den Fehler so zu beschreiben, daß es auch einer versteht, 
der nicht in Deinen Kopf schauen kann.

Was soll passieren?
Was passiert statt dessen?

von Steffen (Gast)


Lesenswert?

MaWin schrieb:

> Suche nach Brown Out Detec Level und programmmiere den richtigen
> Spannungswert.
>
> http://www.ladyada.net/learn/avr/fuses.html

Habe ich soweit schon versucht, aber die idee mit dem externen Reset 
werde ich mal testen.

Wobei ich nicht vom Reset aus gehe, eher das der IRQ irhendwo her n 
Impuls bekommt.

von Steffen (Gast)


Lesenswert?

Peter Dannegger schrieb:
> Steffen schrieb:
>> Und genau das ist das Problem, das geht einige
>> Male gut, ab und an zählt das Teil aber kurz los.
>
> ???
>
> Versuch mal den Fehler so zu beschreiben, daß es auch einer versteht,
> der nicht in Deinen Kopf schauen kann.
>
> Was soll passieren?
> Was passiert statt dessen?

also, nach dem Starten sollen Startwerte geladen werden und der Zähler 
soll los zählen. Das macht er auch einwandfrei.
Ab und an läd er die Startwerte und löst für nicht mal ne Sekunde 
mehfach den IRQ aus und zählt sehr schnell. Als würde am IRQ Anschluss 
ein Impuls kommen. Das macht der immer dann wenn man das Netzteil rein 
steckt und es diesen Lichbogen gibt.

von (prx) A. K. (prx)


Lesenswert?

Es bringt nichts, die Kondensatoren in räumlicher Nähe zu den VCC/GND 
Pins zu platzieren, wenn der elektrische Weg sie weit entfernt sieht. 
Verfolg mal die Masse von C2 auf dem Weg zu Pin 8. Zudem gehört so ein C 
auf den Weg zwischen Spannungs/Störquelle und Pins, nicht dahinter.

Reset kann man schon offen lassen, aber wenn man Probleme hat, dann kann 
man ein R/C mit 10K/100nF dran hängen. Allein schon ob beim sprotzelnden 
Einschalten saubere Verhältniss zu kriegen. Aber auch das nicht eine 
halbe Platine entfernt.

: Bearbeitet durch User
von Rolf Magnus (Gast)


Lesenswert?

Steffen schrieb:
> ich steh vor einem Problem, ich habe einen Zähler gebaut, der immer dann
> anfängt zu zählen wenn man ihn einschaltet, besser gesagt das Netzteil
> in die Steckdose steckt. Und genau das ist das Problem, das geht einige
> Male gut, ab und an zählt das Teil aber kurz los.

Was jetzt? Soll er zählen oder nicht? Dein Text liest sich so, als soll 
er ab Start loszählen, was er auch meistens tut, aber manchmal zählt er 
stattdessen ab Start los. Das ergibt irgendwie keinen Sinn.

von Rolf Magnus (Gast)


Lesenswert?

Hmpf, das passiert, wenn man zwischen schreiben und senden zu lange 
wartet.

Wo ist eigentlich auf dem Layout, das du gepostet hast, IC2? Und wo ist 
die Leitung, die von deinem INT0-Pin dorthin geht? Ich sehe da nur eine 
Verbindung zu dem Kondensator und zum Widerstand. Irgendeine Leitung 
läuft da noch, aber ich seh nicht so richtig, wohin.

von (prx) A. K. (prx)


Lesenswert?

Rolf Magnus schrieb:
> Wo ist eigentlich auf dem Layout, das du gepostet hast, IC2?

Als SMD auf der Unterseite, direkt unter den beiden I2C Pullups. 
Bisschen schwer zu erkennen.

: Bearbeitet durch User
von Bitflüsterer (Gast)


Lesenswert?

Steffen schrieb:
> Peter Dannegger schrieb:
>> Steffen schrieb:
>>> Und genau das ist das Problem, das geht einige
>>> Male gut, ab und an zählt das Teil aber kurz los.
>>
>> ???
>>
>> Versuch mal den Fehler so zu beschreiben, daß es auch einer versteht,
>> der nicht in Deinen Kopf schauen kann.
>>
>> Was soll passieren?
>> Was passiert statt dessen?
>
> also, nach dem Starten sollen Startwerte geladen werden und der Zähler
> soll los zählen. Das macht er auch einwandfrei.
> Ab und an läd er die Startwerte und löst für nicht mal ne Sekunde
> mehfach den IRQ aus und zählt sehr schnell. Als würde am IRQ Anschluss
> ein Impuls kommen. Das macht der immer dann wenn man das Netzteil rein
> steckt und es diesen Lichbogen gibt.


Ich zähl' mal ein paar Erbsen, wenn es rech ist. Nicht (allein) um mein 
Ego zu heben, sondern weil ich denke das es auch nützlich ist. (Wer 
Rechtschreibkorrekturen findet, darf sie behalten).

"Nach dem Einschalten soll der uC Startwerte in das IC2 laden der Zähler 
in IC2 soll beginnen zu zählen. Das macht er oft einwandfrei.

Ab und an lädt der uC die Startwerte in IC2 und IC2 löst für weniger als 
eine Sekunde mehrfach den IRQ am uC aus und zählt sehr schnell. Als 
würden am IRQ Anschluss mehrere Impuls kommen.

Das macht das IC2 immer dann, wenn man das Netzteil hinein steckt und es 
diesen Lichbogen gibt."

Ist das so richtig?

Zum eine würde ich am ATMega noch mindestens einen weiteren 
Abblockkondensator von 100nF anbauen. Jeder VCC-Anschluss sollte einen 
eigenen Abblockkondensator erhalten.

Solch ein Abblockkondensator fehlt auch am IC2.

Die Korrelation zu dem Lichtbogen deutet stark auf Probleme mit der 
Abblockung hin.

Irgendwie kommt mir auch der 33nF Kondensator am Eingang des ATMega 
seltsam vor. Der wirkt wie ein Tiefpass - bin aber zu faul die 
Zeitkonstante auszurechnen. Theoretisch aber verlangsamt er die Flanke 
und könnte dafür sorgen, dass der Zwischenzustand zwischen 0 und 1 
längere Zeit andauert, was für den uC wie mehrere Impulse aussehen 
könnte. Einen Zusammenhang zu dem Lichtbogen kann ich zwar nicht 
herstellen, aber es scheint mir wert, den Kondensator mal rauszunehmen.

Leider finde ich die Bezeichnung "RV3209" für IC2 im Internet nicht. 
Könntest Du die Bezeichnung mal bitte überprüfen?

Was hast Du an Meßmitteln? Ein Oszilloskop?

von Peter D. (peda)


Lesenswert?

Mal ne ganz dumme Frage, warum liest Du nicht einfach die RTC aus?

Bzw. es scheint, daß Du die RTC jedesmal auf 0 setzt, warum dann 
überhaupt eine RTC und noch ne Batterie?
Ein Quarz an den AVR und ein Timerinterrupt, einfacher gehts nun 
wirklich nicht.

von steffen (Gast)


Lesenswert?

Bitflüsterer schrieb:
> "Nach dem Einschalten soll der uC Startwerte in das IC2 laden der Zähler
> in IC2 soll beginnen zu zählen. Das macht er oft einwandfrei.
>
> Ab und an lädt der uC die Startwerte in IC2 und IC2 löst für weniger als
> eine Sekunde mehrfach den IRQ am uC aus und zählt sehr schnell. Als
> würden am IRQ Anschluss mehrere Impuls kommen.
>
> Das macht das IC2 immer dann, wenn man das Netzteil hinein steckt und es
> diesen Lichbogen gibt."
>
> Ist das so richtig?

genau so. Sorry wenn ich mich nicht richtig ausgedrückt habe. Als Timer 
nehm ich den RV3029.

Peter Dannegger schrieb:
> Mal ne ganz dumme Frage, warum liest Du nicht einfach die RTC aus?
>
> Bzw. es scheint, daß Du die RTC jedesmal auf 0 setzt, warum dann
> überhaupt eine RTC und noch ne Batterie?
> Ein Quarz an den AVR und ein Timerinterrupt, einfacher gehts nun
> wirklich nicht.

zum einen weil das Teil irgendnwas um die 500 Tage zurückzählen soll und 
nicht immer am Netzt sein soll. Im eeprom ist ein Startwert drin, der 
rückwerts gezählt wird. Dabei zählt der RV vorwärts. Deshalb auch die 
Batterie. Wenn nun das Teil ausgemacht wird, zählt der RV weiter. Nach 
dem erneuten Start, wird der Wert vom RV und vom eeprom gelesen, der RV 
Wert vom eeprom Wert abgezogen. Danach der neue Zählerstand wieder in 
den eeprom geschrieben und der RV zurück gesetzt. Der RV liefert nun 
einen Sekundentakt der am IRQ anliegt und somit den die Anzeige 
rückwerts Zählen lässt. Ich habe deshalb den RV genommen, weil er schön 
genau und Temperaturkonstant ist.

Vielleicht gibt es noch eine andere Lösung den RV nicht per IRQ 
einzulesen.

von T.Roll (Gast)


Lesenswert?

HalbTroll schrieb:
> Das waer dann EMV.

Wo siehst du da irgendwelche Verträglichkeiten?

Der Einschaltpuls stört eindeutig den Zähler.

von Peter D. (peda)


Lesenswert?

steffen schrieb:
> Nach
> dem erneuten Start, wird der Wert vom RV und vom eeprom gelesen, der RV
> Wert vom eeprom Wert abgezogen. Danach der neue Zählerstand wieder in
> den eeprom geschrieben und der RV zurück gesetzt.

Ich fürchte, diese Sequenz wird nicht atomar sein, d.h. ein Stromausfall 
darin hinterläßt zerstörte Daten.

Merke Dir doch einfach nur die Endzeit im EEPROM und vergleiche sie mit 
der RTC.
Bzw. oft kann die RTC auch selber vergleichen, d.h. man kann eine 
Alarmzeit programmieren.

Willst Du die Rückwärtszeit anzeigen, ist es das einfachste, die Zeiten 
in 32Bit und zurück zu wandeln. Ich nehme daher gerne schon RTC, die 
32Bit Sekunden zählen, reicht 136 Jahre.

von steffen (Gast)


Lesenswert?

Dank an alle, ich hab es mit einem Timer gelöst.
Erst nach 8s nach dem Start wird die Counter Routine frei gegeben und es 
läuft.
1
ISR (TIMER0_OVF_vect)
2
{
3
  tm_of++;
4
  if (tm_of == 5000){
5
    TIMSK &=~(1 << TOIE0);  //Overflow aus
6
    ende = 0;
7
    st = 1;
8
  }
9
10
}

Eine Frage habe ich dazu, kann ich mit TIMSK &=~(1 << TOIE0); den Timer 
OVF ausschalten oder irre ich mich da?

von Hmm (Gast)


Lesenswert?

weshalb ist auf der anderen seite nicht GND ? Als durchgaengige Flaeche.

von MaWin (Gast)


Lesenswert?

steffen schrieb:
> Erst nach 8s nach dem Start wird die Counter Routine frei gegeben und es
> läuft.

Vielleicht hast du einen offenen Eingang, der bei Änderung einen 
Interrupt auslöst, der das Program abschiesst.
Beispielsweise ist RESET nicht beschaltet....

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.