PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit Powerdown Modus



albundy
01.01.2006, 12:18
Hallo,

ich habe mir eine Alarmanlage gebaut, die seit 1 Monat im Einsatz ist und bis heute einwandfrei funktioniert hat.
Leider wurde ich heute, durch eine Fehlfunktion, unsanft geweckt.
Aber ich konnte die Ursache nicht finden. (Hardware oder Software)
Hier mal ein Codeausschnitt, der den Ablauf zeigt:


$regfile = "m8def.dat"
$crystal = 4000000

Config Timer1 = Timer , Prescale = 64
Const Timer_start = 6250 'alle 100ms Überlauf
Load Timer1 , Timer_start
Enable Timer1
On Timer1 Int_1 'Timer für alles mögliche

On Int0 Int_0 'Externer Interrupt 0
Disable Int0

Enable Interrupts
Alarm Alias Pind.2 'Pin für ext. Interrupt 0
Dim Zeit As Word 'mit ext. Pullup
'-------------------------------------------------------------------------------
Do
If Alarm = 0 Then Exit Do 'bei extern Interrupt, Schleife 2
If Zeit > 1800 Then 'nach 3 min, Powerdown
Enable Int0 'ext. Interrupt 0 aktivieren
Powerdown
End If
Debounce Taste1 , 0 , Subroutine1 , Sub 'bevor Powerdown
Debounce Taste2 , 0 , Subroutine2 , Sub 'div. Einstellungen möglich
Loop

Do
'Alarm Ablaufsteuerung
Loop

End 'Programmende
'-------------------------------------------------------------------------------
Int_0:
Disable Int0 'Int 0 sperren, wegen Mehrfachauslösung
Return

Int_1:
Load Timer1 , Timer_start 'Startwert neu laden
Incr Zeit ' Zeittakt erhöhen
Return

Ich kann mir nicht erklären, wie das Programm in die 2.Schleife (Ablaufsteuerung) gelangt ist.
Pind.2 (ext. Interrupt) ist definitiv nicht "0" geworden, das hätte ich optisch sehen können.

Hat jemand eine Idee, wie die MCU "aufgeweckt" wurde ?
Die Hardware wird durch ein Schaltnetzteil gespeist.
Kann es eventuell durch eine Spannungsspitze im Netz passiert sein ?

PicNick
01.01.2006, 13:06
Prosit ! Hat ja gut angefangen *hehe*
Tschja, eine Überlegung:
Du passt zweimal auf den alarm pin auf. Einmal durch interrupt, gleichzeitig aber auch in der ersten do-Schleife. Den Interrupt startest du erst bei Zeit > 1800, aber die Abfrage Alarm = 0 immer, also auch sofort.

WENN (dreimal wenn) du einen Strom-aussetzer gehabt hättest und der Controller läuft wieder bei Null weg, prüft er SOFORT den Pin und verläßt DO. d.h. er gibt dem Pin keine Chance, Highpegel einzunehmen.
Wie du dann geschaut hast, war der Pegel ja dann hoch, nur eben ein paar Zyklen zu spät. Wenn das ein längerer Draht ist, hat er ja Kapazität.

Da das aber bei jedem Einschalten dann so wäre, könnte das nur dann der Grund sein, wenn der Brown-Out Reset schneller als der normale Reset wäre. ??????

Alles nur eine Überlegung. Auf jeden Fall solltest du ERST die Zeit checken, und dann erst Alarm = 0 abfragen, sonst hat's ja keinen Sinn mit dem enable-Delay.

Ich glaub schon an einen von aussen ausgelösten Effekt.


EDIT: Frag in der Umgebung. Vielleicht sind ja noch 57 andere Alarmanlagen losgegangen

albundy
01.01.2006, 14:44
Hallo Robert,

frohes neues Jahr noch.


Du passt zweimal auf den alarm pin auf. Einmal durch interrupt, gleichzeitig aber auch in der ersten do-Schleife. Den Interrupt startest du erst bei Zeit > 1800, aber die Abfrage Alarm = 0 immer, also auch sofort.

Eigendlich nur einmal. Beim Programmstart ist Int0 deaktiv und es wird Pind.2 direkt abgefragt. Wenn kein Alarm anliegt, kann ich über Taster1 und 2 div. Einstellungen vornehmen.
Erst wenn 3 min um sind, wird Int0 aktiviert, um Pind.2 via Interrupt zu überwachen.
Bei Alarm wird dann sofort Schleife2 angesprungen und die Abfrage in Schleife1 ist hinfällig.


WENN (dreimal wenn) du einen Strom-aussetzer gehabt hättest und der Controller läuft wieder bei Null weg, prüft er SOFORT den Pin und verläßt DO. d.h. er gibt dem Pin keine Chance, Highpegel einzunehmen.
Wie du dann geschaut hast, war der Pegel ja dann hoch, nur eben ein paar Zyklen zu spät. Wenn das ein längerer Draht ist, hat er ja Kapazität.


Aus diesem Grunde habe ich einen externen Pullup Widerstand eingebaut.
Damit soll gewährleistet werden, dass der Pin schon auf High liegt, bevor der Prozessor anfängt zu arbeiten.


Auf jeden Fall solltest du ERST die Zeit checken, und dann erst Alarm = 0 abfragen, sonst hat's ja keinen Sinn mit dem enable-Delay.


Das wäre eine Möglichkeit.
Nach dem Powerdown wird im Alamfall ja wieder in Schleife1 weiter gemacht und die Variable Zeit müsste noch auf einem Wert > 1800 stehen. Wenn nicht, würde der Alarm ja erst nach 3 min gemeldet werden.


Frag in der Umgebung. Vielleicht sind ja noch 57 andere Alarmanlagen losgegangen

Wohl kaum. Die meisten "preiswerten" Alarmanlagen arbeiten mit primitiven Logikgattern. Da ich mehr Komfort wollte (Alarmmeldung via Handy e.t.c) war das der Grund, warum ich einen AVR verbaut habe.

PicNick
01.01.2006, 14:55
Naja. Ich denk, du solltest, bevor du hw oder sw änderst, wirklich die Startup-Sequenz nach allen Richtungen abklopfen, ob da irgendwas möglich ist. Eigentlich ist das ja die einzige Zeit, wo Seltsames geschehen kann.
Ideal wär es, du könntest den Fehler im bestehenden System irgendwie erneut erzeugen.
Störungen, die nur am Neujahrstag auftreten, sind halt ein Hund.
Wie konntest du (optisch) feststellen, daß der Pin nicht normal ausgelöst hat ?

albundy
01.01.2006, 16:46
Ideal wär es, du könntest den Fehler im bestehenden System irgendwie erneut erzeugen.

Das wäre optimal.
Ich habe das System am Anfang im Ruhezustand (ohne Alarmsimulation) ca 1 Woche laufen lassen. Erst danach habe ich verschiedene Alarmmeldungen getestet.
Alles ohne irgendwelche Probleme.

Wie konntest du (optisch) feststellen, daß der Pin nicht normal ausgelöst hat ?
Das war total eigenartig ?
In der Schleife2 wird die Variable "Zeit" auf 0 gesetzt und danach eine LED eingeschaltet (direkt, nicht als Subroutine), was aber nicht erfolgte.
Darauf folgt eine zeitliche Abfolge von Abläufen. (Select Case Zeit)
In den ersten 5 min (Zeit<3000) hätte akustischer Alarm kommen müssen, was ebenfalls nicht erfolgte.
Nach 5 min (Zeit > 3000) erfolgt der erste Anruf, und das hat funktioniert.
Da meine Nummer die erste in der Kette ist, muss die Variable Zeit schlagartig auf einen Wert zwischen 3000 und 6000 gesetzt worden sein ???

Ich habe mir überlegt, im Int0 (Alarm) zusätzlich den Watchdog zu starten, um sicher zu gehen, dass nach 2 Sek der Alarm immer noch ansteht. Das dürfte dann zumindest gegen Spannungsspitzen im Netz helfen ?

PicNick
01.01.2006, 17:02
*mmhhhh* Das ist jetzt ein bißchen zu viel Mystik (eine Mystik hätt ich ja akzeptiert).
Wenn du keine Geheimnisse drin hast, soltest du dein komplettes Programm posten, da gibt's wohl irgendwelche unerwünschte Wechselwirkungen.
Klaro, den Alarmsensor gewissermaßen zu entprellen, kann kein Fehler sein.
Mach aber erst eine Kopie, vielleicht kommen wir ja doch noch drauf. Das nächstemal weckt dich die Feuerwehr und und das Einsatzkommando.

Ratber
01.01.2006, 17:38
@Albundy

Schonmal ausgiebig die Störfestigkeit geprüft ?
Schließlich hängen ja lange Leitungen drann und das sind hervorragende Müllschlucker für jede Art von Störung.
Aber das weißte ja selber.

Deine Vermutung auf das Netzteil wäre ein ansatzpunkt.

Bei mir schaltet der Versorger so ein bis Zweimal im jahr unsauber um so das ne kräftige Störwelle durchs Netz schleudert.

Apropos Stromversorgung:

Akku fürn notlauf haste aber drinne ja ?

albundy
01.01.2006, 18:24
Das nächstemal weckt dich die Feuerwehr und und das Einsatzkommando.
Eine Aufschaltung zur Feuerwehr oder Polizei ist in Deutschland für Privathaushalte nicht möglich. (außerdem müssen solche Anlagen zertifiziert sein) Und selbst da, treten hin und wieder, nicht nachvollziehbare, Fehlalarme auf.

@Ratber

Schonmal ausgiebig die Störfestigkeit geprüft ?

Gute Frage !
Wie könnte denn eine Störfestigkeitsprüfung aussehen ? Spannungsspitzen zu simmulieren scheidet ja irgendwie aus.

Bei mir schaltet der Versorger so ein bis Zweimal im jahr unsauber um so das ne kräftige Störwelle durchs Netz schleudert.

Ich hatte vor einiger Zeit auch mal Ärger in dieser Richtung. Habe mich bei der BEWAG beschwert und bekam für 1 Woche einen Schreiber angeschlossen. Was soll ich sagen ... -> es waren keine Unregelmäßigkeit vorhanden.

Akku fürn notlauf haste aber drinne ja ?
Ich hoffe, du kannst schweigen, im Moment noch ohne Akku.

PicNick
01.01.2006, 18:34
Ich seh da zwei Richtungen: Die Technische mit Donner und Blitz und E-Werk, da kann ich nicht viel dazu sagen, was du nicht eh weißt.
Und die andere Richtung, daß die Software eigentlich nach jedem x-Beliebigen Störungschaos wieder einen definierten Zustand herstellt.
d.h ganz einfach absolut wasserdicht.

Ratber
01.01.2006, 18:41
Wie könnte denn eine Störfestigkeitsprüfung aussehen ? Spannungsspitzen zu simmulieren scheidet ja irgendwie aus.

Och da gibt es schon einiges was mit Hausmitteln zu machen ist.

Staubsauger knallen schön ins Netz sowie Halogenbeleuchtungen mit einfachem Trafo (Keine Elektronischen)
Diverse Werkzeugmaschinen lassen es auch ganz nett knacken im Radio

ansonsten kannste mit einer selbstgebastelten Luftspule und einem Trafo selber mal Sender spielen.
Ich würde bei den Alarmleitungen verzögerngen empfehlen dffalls noch nicht vorhanden



Ich hatte vor einiger Zeit auch mal Ärger in dieser Richtung. Habe mich bei der BEWAG beschwert und bekam für 1 Woche einen Schreiber angeschlossen. Was soll ich sagen ... -> es waren keine Unregelmäßigkeit vorhanden.

Bewag ?
Sind das die die demnächst zum Zweitenmal in 6 Monaten die Preise um ca. 10% anheben ?
Naja,zugeben tun die Versorgwer nie etwas (Siehe Münsterland).
Selbst wenn der Laden brennt heißte es meist "Wir sehen keine Probleme" :D:D:D




Ich hoffe, du kannst schweigen........

Mein Name ist Hase (Siehe Ohren) :mrgreen:

Nene dickerer Elko in der Versorgung und ne Drossel könnten da schon helfen

albundy
01.01.2006, 19:06
@Ratber

Staubsauger knallen schön ins Netz sowie Halogenbeleuchtungen mit einfachem Trafo (Keine Elektronischen)
Diverse Werkzeugmaschinen lassen es auch ganz nett knacken im Radio
Diese Test's habe ich in der 1 Monatigen Testphase unbewußt schon durchgeführt.

Ich würde bei den Alarmleitungen verzögerngen empfehlen dffalls noch nicht vorhanden
Das ist ja teilweise schon durch den externen Int0 gegeben. Dieser muss ja eine bestimmte Zeit anliegen, um den Prozessor aufzuwecken.
Aber wie schon gesagt, werde ich mir in dieser Richtung noch eine zusätzliche Sicherheit einfallen lassen.

Sind das die die demnächst zum Zweitenmal in 6 Monaten die Preise um ca. 10% anheben ?
Genau die sind es.
Um die Identität etwas zu verschleiern nennen die sich ab heute Wattenfall.

@Robert

Und die andere Richtung, daß die Software eigentlich nach jedem x-Beliebigen Störungschaos wieder einen definierten Zustand herstellt.
d.h ganz einfach absolut wasserdicht.
Deshalb werde ich den Watchdog noch zusätzlich scharf machen.

PS:dein vorheriges Avatar fand ich schöner ...

Ratber
01.01.2006, 19:26
Das ist ja teilweise schon durch den externen Int0 gegeben. Dieser muss ja eine bestimmte Zeit anliegen, um den Prozessor aufzuwecken.
Aber wie schon gesagt, werde ich mir in dieser Richtung noch eine zusätzliche Sicherheit einfallen lassen.

Naja,die Meldeleitung ist ja Analog also würden sich Filter anbieten und wenn es nur nen Kondensator ist.



Um die Identität etwas zu verschleiern nennen die sich ab heute Wattenfall.

Kannste auch Krankenkasse nennen.
Die haben im 2. Jahr in folge satte Gewinne eingefahren und faseln was von erhöhrungen weil die Umsätze schwinden. ](*,)

albundy
01.01.2006, 20:12
Naja,die Meldeleitung ist ja Analog also würden sich Filter anbieten und wenn es nur nen Kondensator ist.
Ist vorhanden, schon allein wegen induktiver Einflüsse auf der Leitung.

Kannste auch Krankenkasse nennen.
Lassen wir das Thema, sonst kreuseln sich mir noch die Fußnägel.
... Praxisgebühr ... dafür Beiträge senken ... ha ha ha :^o

Ratber
01.01.2006, 21:31
Jq,hehehe

Wie gesagt,wenn es kein langfristiger Programmfehler ist (zb. Stacküberlauf) dann bleibt zwangsläufig nur die Hardware.
Wart einfach mal bis zum nächsten Fehler.
Vieleicht ergibt sich ein Muster.