Witam! Kolejna modyfikacja softu ze znieczuleniem kontroli prądu na 3 cykle programu po starcie. Odnośnie zatrzymania to oczywiście sprawdzę ale obsługa jednoczesności czyli wciśnięcie otwierania po zamykaniu lub odwrotnie powinna zatrzymać cykl. Proszę to przetestować i ewentualnie zgłosić uwagi. Postaram się je uwzględnić w kolejnej wersji jeśli będzie konieczna.
'Program sterowania bram¹ dwuskrzyd³ow¹ z zak³adk¹ + obs³uga krañcówek + fotokomórka
'------------------------------------------------------------------------------------
$regfile = " m8def.dat " 'korzystam z AMTEGA8
$crystal = 1000000
Set Pinb.6 'w³¹czenie wewnêtrznych rezystorów podci¹gaj¹cych
Set Pinb.7
Set Pind.4
Set Pind.5
Set Pind.6
Set Pind.7
Set Pinc.1
Set Pinc.3
Set Pinb.1
Set Pinb.2
'taktowanie wewnêtrznym oscylatorem 1MHz
Config Pinb.6 = Input 'In otwieranie bramy
Config Pinb.7 = Input 'In zamykanie bramy
Config Pind.4 = Input 'In krañcówka LZ - si³ownik lewy pozycja zamkniêty
Config Pind.5 = Input 'In krañcówka LO - si³ownik lewy pozycja otwarty
Config Pind.6 = Input 'In krañcówka PZ - si³ownik prawy pozycja zamkniêty
Config Pind.7 = Input 'In krañcówka PO - si³ownik prawy pozycja otwarty
Config Pinb.1 = Input 'In fotokomórka FOTO
Config Portd.0 = Output 'Out przekanik PKZL
Config Portd.1 = Output 'Out przekanik PKOL
Config Portb.0 = Output 'Out przekanik PKU
Config Portd.2 = Output 'Out przekanik PKZP
Config Portd.3 = Output 'Out przekanik PKOP
Config Portc.1 = Output 'Out ustawienie nieu¿ywanych pinów jako wyjcia
Config Portc.3 = Output ' -||-
Config Portb.2 = Output ' -||-
Config Adc = Single , Prescaler = Auto , Reference = Avcc 'konfiguracja wewnêtrznego przetwornika A/c
Start Adc 'uruchomienie wewnêtrznego przetwornika A/C
Lz Alias Pind.4 'przypisanie aliasów
Lo Alias Pind.5
Pz Alias Pind.6
Po Alias Pind.7
Foto Alias Pinb.1
Pkzl Alias Portd.0
Pkol Alias Portd.1
Pku Alias Portb.0
Pkzp Alias Portd.2
Pkop Alias Portd.3
In_otw Alias Pinb.6
In_zam Alias Pinb.7
'deklaracja zmiennych
Dim Rezl As Integer 'napiêcia z rezystorów i potencjometrów itd...
Dim Rezp As Integer
Dim Potl_max As Integer
Dim Potp_max As Integer
Dim Otw As Bit
Dim Zam As Bit
Dim Jazda_o As Bit
Dim Jazda_z As Bit
Dim Stop_ol As Bit
Dim Stop_zl As Bit
Dim Stop_op As Bit
Dim Stop_zp As Bit
Dim Stop_otw As Bit
Dim Stop_zam As Bit
Dim Czas As Integer
Dim Lc_p As Integer
Dim Lc_l As Integer
Reset Pkzl 'Inicjalizacja zmiennych
Reset Pkol
Reset Pkop
Reset Pkzl
Reset Pkzp
Reset Pku
Reset Zam
Reset Otw
Reset Jazda_o
Reset Jazda_z
Reset Stop_otw
Reset Stop_otw
Reset Stop_ol
Reset Stop_op
Reset Stop_zl
Reset Stop_zp
Czas = 0
Lc_p = 0
Lc_l = 0
Do 'pocz¹tek nieskoñczonej pêtli
If Pkol = 1 Or Pkzl = 1 Then
Incr Lc_l
If Lc_l & lt; = 3 Then 'przeskok odczytu pr¹du w czasie 3 cykli dla skrzyd³a lewego
Goto I_jump_l
End If
End If
Rezl = Getadc(5) 'przechwycenie wartoci napiêæ na wejciach ADC _lewe
Potl_max = Getadc(4)
I_jump_l:
If Pkop = 1 Or Pkzp = 1 Then
Incr Lc_p
If Lc_p & lt; = 3 Then 'przeskok odczytu pr¹du w czasie 3 cykli dla skrzyd³a prawego
Goto I_jump_p
End If
End If
Rezp = Getadc(0)
Potp_max = Getadc(2) 'przechwycenie wartoci napiêæ na wejciach ADC _prawe
I_jump_p:
If Rezl & gt; Potl_max Or Rezp & gt; Potp_max Then 'wykrywanie przeci¹¿enia
Waitms 500
Gosub Res1
End If
If Foto = 0 Then 'sprawdzenie stanu wejcia FOTO
Gosub Res1
End If
Debounce In_zam , 0 , Zam1 , Sub 'sprawdzenie stanu wejæ z modu³u radio
Debounce In_otw , 0 , Otw1 , Sub
If Otw = 1 And Zam = 0 Then
If Stop_otw = 0 Then 'otwieranie skrzyd³o lewe
Set Pku
Reset Pkzl
Reset Pkzp
Waitms 500
Set Pkol
Reset Otw
Set Jazda_o
End If
End If
'po czasie - otwieranie skrzyd³o prawe
If Pkol = 1 Then
Incr Czas
If Czas = 60 Then
Set Pkop
End If
End If
If Zam = 1 And Otw = 0 Then 'zamykanie skrzyd³o prawe
If Stop_zam = 0 And Foto = 1 Then
Set Pku
Reset Pkol
Reset Pkop
Waitms 500
Set Pkzp
Reset Zam
Set Jazda_z
End If
End If
If Pkzp = 1 Then 'po czasie - zamykanie skrzyd³o lewe
Incr Czas
If Czas = 60 Then
Set Pkzl
End If
End If
If Jazda_o = 1 And Lo = 0 Then 'obs³uga krañcówek otwarcia
Reset Pkol
Set Stop_ol
End If
If Jazda_o = 1 And Po = 0 Then
Reset Pkop
Set Stop_op
End If
If Stop_ol = 1 And Stop_op = 1 Then 'stop po otwieraniu
Reset Jazda_o
Waitms 500
Reset Pku
Reset Stop_ol
Reset Stop_op
Set Stop_otw
Czas = 0
Lc_p = 0
Lc_l = 0
End If
If Jazda_z = 1 And Lz = 0 Then 'obs³uga krañcówek zamkniêcia
Reset Pkzl
Set Stop_zl
End If
If Jazda_z = 1 And Pz = 0 Then
Reset Pkzp
Set Stop_zp
End If
If Stop_zl = 1 And Stop_zp = 1 Then 'stop po zamykaniu
Reset Jazda_z
Waitms 500
Reset Pku
Reset Stop_zl
Reset Stop_zp
Set Stop_zam
Czas = 0
Lc_p = 0
Lc_l = 0
End If
If Jazda_o = 1 And Jazda_z = 1 Then 'blokada jednoczesnoci rozkazów
Goto Res1
End If
Waitms 50 'opónienie g³ówne
Loop
End 'koniec programu
Otw1: 'po ururomieniu otwierania
Toggle Otw
Waitms 100
Reset Stop_zam
Return
Zam1: 'po uruchomieniu zamykania
Toggle Zam
Waitms 100
Reset Stop_otw
Return
'po resecie
Res1:
Reset Pkzl
Reset Pkol
Reset Pkop
Reset Pkzp
Reset Zam
Reset Otw
Reset Jazda_o
Reset Jazda_z
Czas = 0
Lc_p = 0
Lc_l = 0
Return