Barama2Sk_fotoV1_2.txt

[ATmega8][Bascom] - AVT5341 sterownik bramy - 2 skrzydła

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 przekaźnik PKZL
Config Portd.1 = Output 'Out przekaźnik PKOL
Config Portb.0 = Output 'Out przekaźnik PKU
Config Portd.2 = Output 'Out przekaźnik PKZP
Config Portd.3 = Output 'Out przekaźnik PKOP
Config Portc.1 = Output 'Out ustawienie nieu?ywanych pinów jako wyjścia
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 wartości napi?ae na wejściach 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 wartości napi?ae na wejściach 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 wejścia FOTO
Gosub Res1
End If

Debounce In_zam , 0 , Zam1 , Sub 'sprawdzenie stanu wejśae 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 jednoczesności 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


Download file - link to post