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
Das waer dann EMV. Da sollte man sich von einseitig, Lochraster, Steck- und so loesen.
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
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.
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?
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.
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.
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
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.
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.
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
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?
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.
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.
HalbTroll schrieb: > Das waer dann EMV. Wo siehst du da irgendwelche Verträglichkeiten? Der Einschaltpuls stört eindeutig den Zähler.
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.
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?
weshalb ist auf der anderen seite nicht GND ? Als durchgaengige Flaeche.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.