'-------------------------------------------------------------------------------
' 11/2020 ,OE3FHA Hubert
'-------------------------------------------------------------------------------
' Auschaltverzögerung für Ventilator mit Betriebsstunden-Erfassung und
' Einschaltzähler für Kompressor
'-------------------------------------------------------------------------------
'
' FuseBits: Teiler 8:1 deaktivieren, BODLEVEL = 4,3V
'
'Portbelegung:
' PORTB.0 = Relais
' PORTB.1 = LED rot
' PORTB.2 = LED grün
' PORTB.3 = Service Reset (Hall Sensor mit externem Dauermagnet)
' PORTB.4 = Sensoreingang (EIN vom Motor)
'
' Byte 1-2 im ERAM = Anzahl der Einschaltvorgänge (Kann mit Tool ausgelesen werden)
' Byte 3-6 im ERAM = Betriebszeit in Sekunden (Zeit für Ölwechsel, muss zurückgesetz werden)
' Byte 7-10 im ERAM = Gesamtzeit (Kann mit Tool ausgelesen werden)
' Byte 11-16 im ERAM = OE3FHA (Der Entwickler)
'===============================================================================
$regfile = "attiny13.dat" 'verwendeter Prozessor
$crystal = 9600000 'Definition des Takt 9,6 MHz
'Eram mit Daten füllen =========================================================
$eeprom
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 79 , 69 , 51 , 70 , 72 , 65
$data
'Variable erstellen ============================================================
Stop Adc 'Stop Power of ADC
Stop Ac 'Switch off the power to the Analog Comparator
Reset Acsr. Acbg 'Disable Analog Comparator Bandgap Select
Config Debounce = 100 'Entprellen 100ms
Dim A As Dword 'Zähler (4 Byte)
Dim Schaltzahl As Word 'Einschaltvorgänge (2 Byte)
Dim Schaltzahl_eram As Eram Word 'Eeprom (2 Byte)
Dim Deltazeit As Dword 'Deltazeit (4 Byte)
Dim Deltazeit_eram As Eram Dword 'Eeprom (4 Byte)
Dim Gesamtzeit as Dword 'Zähler (4 Byte)
Dim Gesamtzeit_eram As Eram Dword 'Eeprom (4 Byte)
'Konfiguration Ports ===========================================================
Ddrb = &B0000_0111 'konf Port's B auf > 0=Eingabe 1=Ausgabe
Portb = &B0000_0100 'setze Port's B auf 0/1
Pinb = &B0001_1000 'Pullup-Widerstand setzen
'Prolog ========================================================================
Schaltzahl = Schaltzahl_eram 'Lese Wert aus Eeprom
Deltazeit = Deltazeit_eram 'Lese Wert aus Eeprom
Gesamtzeit = Gesamtzeit_eram 'Lese Wert aus Eeprom
If Deltazeit > 36000 Then '36000 entspricht 10 Stunden
Portb.2 = 0 'LED grün ist aus
Portb.1 = 1 'LED rot ist ein
End If
'Hauptprogramm Betriebzeiterfassung / Einschaltvorgänge ========================
Begin:
A = 0 'Zähler auf 0
Portb.0 = 1 'Relais on
Schaltzahl = Schaltzahl + 1 'Anzahl Einschaltvorgänge
Do 'Warten auf ausschalten
A = A + 1 'Sammle Betriebszeit
Wait 1
Loop Until Pinb.4 = 1 'gehe weiter wenn PIN.B4=1
Schaltzahl_eram = Schaltzahl 'Einschaltvorgänge speichern
Deltazeit = Deltazeit + A 'Anzahl Betriebsstunden
Deltazeit_eram = Deltazeit 'Betriebsstunden speichern
Gesamtzeit = Gesamtzeit + A 'Gesamtzahl Betriebsstunden
Gesamtzeit_eram = Gesamtzeit 'Gesamtzahl speichern
If Deltazeit > 36000 Then '36000 entspricht 10 Stunden
Portb.2 = 0 'LED grün ist aus
Portb.1 = 1 'LED rot ist ein
End If
'Unterroutine Lüfter Nachlauf / Servicereset in dieser Zeit möglich ============
Nachlauf:
For A = 1 To 900 '~15 Minuten Nachlauf
Wait 1
If Pinb.4 = 0 Then Goto Begin 'Wenn im Nachlauf eingeschaltet wird
Debounce Pinb.3 , 0 , Service , Sub 'Reset nach Service
Next A
Portb.0 = 0 'Relais off
Do
Loop Until Pinb.4 = 0 'gehe weiter wenn PIN.B4=0
Goto Begin
'Unterroutine Servicereset =====================================================
Service:
Deltazeit = 0
Deltazeit_eram = Deltazeit 'Schreibe Wert 0 in Eeprom
Portb.1 = 0 'LED rot aus
For A = 1 To 20 'Led grün blinken
Waitms 500
Toggle Portb.2
Next A
Portb.2 = 1 'LED grün ein
Return