Mam prośbę do kogoś kto zna Bascom'a lub przerabiał program z kitu AVT5341 do współpracy z drugim skrzydłem bramy.
Nie znam się na programowaniu a potrzebuję zmodyfikowaną wersję wsadu do procesora.
Wg autora:
...no i problem polega na tym zrealizowaniu obsługi dodatkowych przekaźników.Modyfikacje
programu ograniczą się do:
– zmiany konfiguracji pinów PC0…PC2 z wyjść na wejścia A/C;
– nadania pinom PD2 i PD3 poziomu niskiego zamiast wysokiego,
– dodaniu zmiennych, analogicznych do istniejących,
– zrealizowaniu obsługi dodatkowych dwóch przekaźników,
– dodaniu odpowiednich opóźnień, zgodnie z potrzebami.
Dodatkową modyfikacją jakiej potrzebuje to żeby 1 skrzydło działało niezależnie od drugiego czyli zabezpieczenie przeciążeniowe pierwszego nie wyłączało drugiego. Po prostu nie mam krańcówek i wyłączanie silników chce wykonać za pomocą tego zabezpieczenia przeciwprzeciążeniowego.
A to kod programu:
Kod: Zaznacz cały
$regfile = "m8def.dat" 'korzystamy z AMTEGA8
$crystal = 1000000 'taktowanie wewnętrznym oscylatorem 1MHz
Config Pinb.6 = Input 'otwieranie bramy
Config Pinb.7 = Input 'zamykanie bramy
Config Pind.0 = Output 'przekaźnik PK1
Config Pind.1 = Output 'przekaźnik PK2
Config Pinb.0 = Output 'przekaźnik PK3
Config Pinc.0 = Output 'ustawienie nieużywanych pinów jako wyjścia
Config Pinc.1 = Output
Config Pinc.2 = Output
Config Pind.2 = Output
Config Pind.3 = Output
Config Pind.4 = Output
Config Pind.5 = Output
Config Pind.6 = Output
Config Pind.7 = Output
Config Pinb.1 = Output
Config Pinb.2 = Output
'
Config Adc = Single , Prescaler = Auto , Reference = Avcc 'konfiguracja wewnętrznego przetwornika A/c
Start Adc 'uruchomienie wewnętrznego przetwornika A/C
Reset Portd.0 'wyłączenie PK1
Reset Portd.1 'wyłączenie PK2
Reset Portb.0 'wyłączenie PK3
Set Portb.6 'włączenie wewnętrznych rezystorów podciągających
Set Portb.7
Set Portc.0
Set Portc.1
Set Portc.2
Set Portd.2
Set Portd.3
Set Portd.4
Set Portd.5
Set Portd.6
Set Portd.7
Set Portb.1
Set Portb.2
Dim Rez As Integer 'napięcie z rezystora R8
Dim Pot_min As Integer 'napięcie z potencjometru P1
Dim Pot_max As Integer 'napięcie z potencjometru P2
Dim Otw As Bit 'flaga otwierania
Dim Zam As Bit 'flaga zamykania
Dim Czas As Integer 'zmienna odliczająca czas do samozamknięcia
Dim Czas_pom As Bit 'flaga uaktywniająca odliczanie do samozamknięcia
Reset Otw 'wygaszenie flag
Reset Zam
Reset Czas_pom
Do 'początek nieskończonej pętli
Rez = Getadc(5) 'przechwycenie wartości napięć na wejściach ADC
Pot_max = Getadc(4)
Pot_min = Getadc(3)
If Rez >= Pot_max Then 'wykrywanie przeciążenia
Reset Portd.0 'wyłączenie silnika
Reset Portd.1
Waitms 100
Reset Portb.0 'wyłączenie zasilacza
Reset Otw 'wygaszenie flag otwierania/zamykania
Reset Zam
End If
If Rez <= Pot_min Then 'wykrywanie zakończenia pracy siłownika
Reset Portd.0 'wyłączenie silnika
Reset Portd.1
Waitms 100
Reset Portb.0 'wyłączenie zasilacza
Reset Otw 'wygaszenie flag otwierania/zamykania
Reset Zam
End If
Debounce Pinb.6 , 0 , Otw , Sub 'sprawdzenie stanu wejść z modułu radiowego
Debounce Pinb.7 , 0 , Zam , Sub 'jeżeli stan niski -> przeskocz
If Otw = 1 And Czas_pom = 0 Then 'po otwarciu uaktywniamy odliczanie do zamknięcia
Set Czas_pom
End If
If Czas_pom = 1 Then 'jeżeli flaga autozamykania jest aktywna,
Czas = Czas + 1 'z kadym obiegiem pętli dodajemy 1
End If
If Czas_pom = 1 And Czas >= 2500 Then 'po upływie czasu (kilku minut) uruchamiamy zamykanie
Czas_pom = 0
Czas = 0
Reset Zam 'ustawienie odpowiednich flag
Set Otw
Waitms 100
End If
If Otw = 0 And Zam = 0 Then
Reset Portd.0 'jeżeli zmienne są wyzerowane
Reset Portd.1 'pozostań w tym stanie
Reset Portb.0 'tj. silnik i zasilacz wyłączone
End If
If Otw = 1 And Zam = 0 Then 'jeżeli aktywne jest otwieranie bramy
Set Portb.0 'uruchom zasilacz
Waitms 100
Reset Portd.0 'włącz tylko PK2
Set Portd.1
End If
If Otw = 0 And Zam = 1 Then 'jeżeli aktywne jest zamykanie bramy
Set Portb.0 'uruchom zasilacz
Waitms 100
Set Portd.0 'włącz tylko PK1
Reset Portd.1
End If
If Otw = 1 And Zam = 1 Then 'jeżeli wystąpi taka sytuacja
Reset Portd.0 'wyłącz wszystko i wygaś flagi
Reset Portd.1
Reset Portb.0
Reset Otw
Reset Zam
Waitms 100
End If
Waitms 50 'opóźnienie główne
Loop
End 'koniec programu
Otw: 'po ururomieniu otwierania
Toggle Otw 'zmień stan flagi Otw na przeciwny
Waitms 100
Return
Zam: 'po uruchomieniu zamykania
Reset Czas_pom 'bezwarunkowo wygaś flagę autozamykania
Toggle Zam 'zmień stan flagi Zam na przeciwny
Waitms 100
Return