Witam
Dla swoich potrzeb skonstruowałem sterownik za pomocą którego kontroluje stan wody która na wiosnę odwiedza moją piwnicę.
Sterownik za pomocą czujnika poziomu mierzy mi ilość wody i jeżeli jej poziom przekroczy wartość 2,10 to informuje mnie LEDem oraz 10 sekundowym popiskiwaniem (1Hz) buzera.
Ja natomiast ręcznie mogę ustawić czas od 1 do 40 minut i włączyć pompę.
Po ustalonym czasie pompa się wyłacza.
Buzer ma za zadanie uruchomić się tylko raz po osiągnięciu poziomu wody 2,10
Kolejne jego załączenie jest możliwe dopiero po wybraniu wody.
Taki warunek sobie wymyśliłem aby czasem w nocy mnie nie udręczył.
Jest jeszcze jeden warunek aby buzer i LED nie załaczyły się powyżej poziomu 2,20
Mój czujnik poziomu wody jest na bazie czujnika paliwa od Żuka ale nie ma z drutu potencjometru tylko z laminatu płytkę i na niej drabinka rezystorowa.
Czujnik ma 5 poziomów i zdarza się że pomiedzy kolejnymi poziomami dostaje rozwarcia i wystepuje wtedy fałszywy poziom 4,09
Sterownik działa już jakiś czas i jestem z niego zadowolony.
Nie muszę wreszcie zaglądać do piwnicy aby wiedzieć czy jest woda i ile jej jest.
Wracając do mojego problemu to jest nim polecenie "wait = 10" które w sumie działa ale jak każdy wie nie jest zalecane ani poprawne politycznie
Jak inaczej można by załączyć buzer (Pwm1a) na czas ok. 10 sekund ????
timer0 mam już zajęty do odmierzania czasu działania pompy
Zamieszam kod programu, instrukcja wait = 10 o której pisze jest w podprogramie Dioda:
Dla swoich potrzeb skonstruowałem sterownik za pomocą którego kontroluje stan wody która na wiosnę odwiedza moją piwnicę.
Sterownik za pomocą czujnika poziomu mierzy mi ilość wody i jeżeli jej poziom przekroczy wartość 2,10 to informuje mnie LEDem oraz 10 sekundowym popiskiwaniem (1Hz) buzera.
Ja natomiast ręcznie mogę ustawić czas od 1 do 40 minut i włączyć pompę.
Po ustalonym czasie pompa się wyłacza.
Buzer ma za zadanie uruchomić się tylko raz po osiągnięciu poziomu wody 2,10
Kolejne jego załączenie jest możliwe dopiero po wybraniu wody.
Taki warunek sobie wymyśliłem aby czasem w nocy mnie nie udręczył.
Jest jeszcze jeden warunek aby buzer i LED nie załaczyły się powyżej poziomu 2,20
Mój czujnik poziomu wody jest na bazie czujnika paliwa od Żuka ale nie ma z drutu potencjometru tylko z laminatu płytkę i na niej drabinka rezystorowa.
Czujnik ma 5 poziomów i zdarza się że pomiedzy kolejnymi poziomami dostaje rozwarcia i wystepuje wtedy fałszywy poziom 4,09
Sterownik działa już jakiś czas i jestem z niego zadowolony.
Nie muszę wreszcie zaglądać do piwnicy aby wiedzieć czy jest woda i ile jej jest.
Wracając do mojego problemu to jest nim polecenie "wait = 10" które w sumie działa ale jak każdy wie nie jest zalecane ani poprawne politycznie
Jak inaczej można by załączyć buzer (Pwm1a) na czas ok. 10 sekund ????
timer0 mam już zajęty do odmierzania czasu działania pompy
Zamieszam kod programu, instrukcja wait = 10 o której pisze jest w podprogramie Dioda:
'Sterowanie pompą i pomiar ilości wody
$regfile = "m8def.dat"
$crystal = 8000000
$hwstack = 32
$swstack = 10
$framesize = 40
Config Pinb.1 = Output
Config Pind.5 = Output
Config Pind.6 = Output
Config Pind.2 = Input
Config Pind.3 = Input
Set Portd.2
Set Portd.3
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portd.0 , E = Portc.4 , Rs = Portc.5
Config Timer1 = Timer , Compare A = Toggle , Compare B = Disconnect , Prescale = 256 , Clear Timer = 1
Config Timer0 = Timer , Prescale = 256
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Portd.6 = 1
Pwm1a = 15625
Enable Interrupts
Enable Int0
Enable Int1
On Int0 Pompa
On Int1 Czas
On Timer0 Odmierz_1s
Enable Timer0
Disable Oc1a
Load Timer0 = 250
Stop Timer0
Stop Timer1
Dim Licz_8ms As Byte , Sekunda As Byte , Minuta As Byte
Dim B As Bit , C As Bit , A As Bit ' zmienne pomocnicze
Dim Wart_ac As Word
Dim V As Single
Dim Wart_nap As String * 3
Minuta = 0
A = 1
Start Adc
'--------------------------------------- program --------------------------------------------
Do
Wart_ac = Getadc(0)
Cls
Locate 1 , 1 : Lcd "Pompa"
If Portd.5 = 1 Then
Locate 1 , 7 : Lcd "ON"
Start Timer0
Else
Locate 1 , 7 : Lcd "OFF"
Stop Timer0
End If
Locate 1 , 11 : Lcd Minuta
Lowerline
V = Wart_ac * 0.0041
Wart_nap = Fusing(v , "#.$$")
Lcd "Poziom Wody "
Locate 2 , 13 : Lcd Wart_nap
Waitms 400
If V > 2.10 Then 'jeżeli poziom przekroczy 2,10 to zapali się dioda
Gosub Dioda
Else
Portd.6 = 1
Stop Timer1
If V < 1 Then 'jeżeli woda zostanie wybrana to zmienna A = 1 ,możliwe ponowne zadziałanie buzera
A = 1
End If
End If
Loop
End
'--------------------------------------------------
Czas: 'Tutaj ustalam ile ma pracować pompa
Waitms 25
If Pind.3 = 0 Then
If C = 1 Then
Minuta = Minuta + 1
C = 0
If Minuta > 40 Then 'maksymalny czas pracy to 40 minut
Minuta = 1
C = 0
End If
End If
Else
C = 1
End If
Return
'--------------------------------------------------------
Pompa: ' Załaczanie i wyłaczanie pompy
If Pind.2 = 0 Then
If B = 1 Then
Toggle Portd.5
B = 0
If Minuta = 0 Then
Portd.5 = 0
B = 0
End If
End If
Else
B = 1
End If
Return
'--------------------------------------------------------------
Odmierz_1s: ' tutaj odmierzamy minuty
Load Timer0 = 250
Incr Licz_8ms
If Licz_8ms = 125 Then
Licz_8ms = 0
Incr Sekunda
If Sekunda = 60 Then
Sekunda = 0
Decr Minuta
If Minuta = 0 Then
Portd.5 = 0
Stop Timer0
End If
End If
End If
Return
'------------------------------------------------------------------
Dioda: 'tutaj załaczamy diodę
If V > 2.20 Then 'jeżeli czujnik dostanie rozwarcia to dioda się nie zapali
Portd.6 = 1
Stop Timer1
Else
Portd.6 = 0
If A = 1 Then 'sprawdza czy buzer może być załączony jeżeli A = 1 to buzer działa 10sekund i się wyłącza '
Start Timer1
Wait 10
Stop Timer1
A = 0 'Zmienna A = 0 aby buzer po raz kolejny się nie załączył
End If
End If
Return