Witam, w ramach pracy mgr tworze automatyke do bramy.
Napęd itd to jest rzecz malo istotna, ale sterowanie zrobiłem na atmedze 16, program napisłem w bascom, wydaje mi sie z reszta bardzo prosty, ale jakieś cuda sie robią
mianowicie. brama po otwarciu czeka sobie pewien czas i sie zamyka. W trakcie czekania aktualny czas wyświetlany jest na lcd. I gdy tak sobie brama pracuje w naturalnych cyklach, to w trakcie już 6 cyklu na wyświetlaczu oprucz tego co ma sie wyświetlać to przebijają sie jakieś krzaki, ale program cały czas działa ok. Natomiast w trakcie 9 cyklu licznik zlicza do 100 i procesor wpada z powrotem w główną pętle programu, gdzie czeka na sygnał z pilota, a przecież brama jest otwarta i powinna sie zacząc zamykać.... poniżej kod programu. Wszelkie propozycje mile widziane.
Napęd itd to jest rzecz malo istotna, ale sterowanie zrobiłem na atmedze 16, program napisłem w bascom, wydaje mi sie z reszta bardzo prosty, ale jakieś cuda sie robią
$regfile = "m16def.dat"
'zadeklarowanie procesora
Ddra = &B11111111
Ddrd = &B00000000
'zadeklarowanie portów(wejsc, wyjsc)
Porta = &B00100000
Portd = &B00000000
'zadeklarowanie stanow portow(niskie, wysokie)
Enable Interrupts
'odblokowanie globalnego ukladu przerwan
Config Timer0 = Timer , Prescale = 1024
Timer0 = 255
On Timer0 Falownik
Enable Timer0
Config Lcd = 24 * 2
Config Lcdpin = Pin , Db4 = Porta.0 , Db5 = Portb.2 , Db6 = Porta.1 , Db7 = Portb.3 , E = Portb.1 , Rs = Portb.0
'zadeklarowanie wyswietlacza lcd
Pilot Alias Pind.7
Bariera1 Alias Pind.6
Bariera2 Alias Pind.5
Kranp Alias Pind.4
Kranl Alias Pind.3
Zwalniaczl Alias Pind.2
Zwalniaczp Alias Pind.1
Blad_falownik Alias Pind.0
Lampa Alias Porta.0
Silnik Alias Porta.1
Kierunek Alias Porta.2
Preset Alias Porta.3
Lampa_falownik Alias Porta.4
'zadelkarowanie nazw portow
Dim Licznik1 As Word
Dim Licznik2 As Word
Dim Licznik3 As Word
'zadeklarowanie zmiennych
Licznik1 = 0
Licznik2 = 0
Licznik3 = 0
'przypisanie wartosci domyslnej lub zerowej zmiennym, wejsciom oraz wyjsciom
Poczatek:
Do
Cls
Cursor Off
Lcd "czekam na pilot"
Waitms 30
If Pilot = 1 Then
Gosub Otwieranie
End If
Loop
End
'glowna petla programu
'###############################################################################
Otwieranie:
Lampa = 1
Kierunek = 0
Cls
Cursor Off
Lcd "otwieranie"
Waitms 1500
Silnik = 1
Do
If Pilot = 1 Then
Gosub Zamykanie
End If
If Zwalniaczl = 0 Then
Preset = 1
End If
If Kranl = 0 Then
Silnik = 0
Preset = 0
Gosub Czekanie
End If
Waitms 30
Loop
End
Return
'###############################################################################
Zamykanie:
Silnik = 0
Kierunek = 1
Preset = 0
Cls
Cursor Off
Lcd "zamykanie"
Waitms 1500
Silnik = 1
Do
'If Bariera1 = 0 Or Bariera2 = 0 Then
'Gosub Otwieranie1
'End If
If Pilot = 1 Then
Silnik = 0
Kierunek = 0
Gosub Otwieranie
End If
If Zwalniaczp = 0 Then
Preset = 1
End If
If Kranp = 0 Then
Silnik = 0
Preset = 0
Kierunek = 0
Waitms 500
Lampa = 0
Goto Poczatek '
End If
Waitms 30
Loop
End
Return
'###############################################################################
Czekanie:
Do
Incr Licznik1
If Licznik1 = 1200 Then
Licznik1 = 0
Gosub Zamykanie
End If
If Pilot = 1 Then
Licznik1 = 0
Waitms 1500
Do
Waitms 200
Incr Licznik2
Cls
Lcd Licznik2
If Licznik2 = 20 Then
Licznik2 = 0
Gosub Zamykanie
End If
If Pilot = 1 Then
Gosub Czekanie1
End If
Loop
End If
Cls
Cursor Off
Lcd "czekanie"
Lowerline
Licznik3 = Licznik1 / 20
Lcd Licznik3 ; " s (60s)"
Waitms 50
Loop
End
Return
'###############################################################################
Otwieranie1:
Silnik = 0
Cls
Cursor Off
Lcd "otwieranie 1"
Kierunek = 0
Waitms 1000
Silnik = 1
Do
If Bariera1 = 1 And Bariera2 = 1 Then
Silnik = 0
Waitms 500
Goto Zamykanie
End If
If Zwalniaczl = 0 Then
Preset = 1
End If
If Kranl = 0 Then
Silnik = 0
Preset = 1
Do
Waitms 50
Cls
Lcd "zaslonieta"
Lowerline
Lcd "bariera"
Loop Until Bariera1 = 1 And Bariera2 = 1
Gosub Zamykanie
End If
Waitms 30
Loop
End
Return
'###############################################################################
Falownik:
If Blad_falownik = 1 Then
Lampa_falownik = 1
Do
Waitms 50
Cls
Cursor Off
Lcd "blad"
Loop Until Blad_falownik = 0
Else
Lampa_falownik = 0
End If
Lampa_falownik = 0
Return
'###############################################################################
Czekanie1:
Cls
Cursor Off
Lcd "dlugie czekanie"
Wait 2
Do
Waitms 50
If Pilot = 1 Then
Gosub Zamykanie
End If
Loop
End
Return
