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:
Code:
$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 ?
Lesezeichen