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:
Ich kann mir nicht erklären, wie das Programm in die 2.Schleife (Ablaufsteuerung) gelangt ist.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
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 ?







Zitieren

Lesezeichen