Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit Powerdown Modus
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 ?
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
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.
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 ?
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 ?
*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.
@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 ?
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.
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.
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
@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 ...
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. ](*,)
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
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.
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.