To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
-
katomasz
- -
- Posty: 7
- Rejestracja: 10 maja 2010, 7:13
- Lokalizacja: łódź
Post
autor: katomasz » 10 maja 2010, 7:22
Na początek wyjaśnienie działania programu.
Sterowanie odbywa się poprzez dwie prędkości silnika. Jest to wolne otwieranie, otwieranie oraz zamykanie i domykanie na wolnych obrotach. Pozycja ustalana jest poprzez zmienną pozycja, i tak pozycja 11 to brama zamknięta, pozycja 12 to brama uchylona gotowa do otwierania, pozycja 22 brama otwarta oraz pozycja 21 brama gotowa do domknięcia.
Sterowanie poprzez alias switch, który zmienia zmienną stan. Jeżeli zmienna stan ma wartość 0 możliwe jest sterowanie, jeżeli ma wartość 1 nie jest możliwe sterowanie. W przypadku zadziałania bariery oraz jednocześnie ruchu bramy w pozycji zamykanie, brama ma zacząć się otwierać. Dodatkowo jeżeli zadziała przeciążenie silnika następuje zatrzymanie programu ze zmianą kierunku pozycji.
Oto kod:
Kod: Zaznacz cały
Wolne_otwieranie Alias Pind.0
Wolne_zamykanie Alias Pind.1
otwieranie Alias Pind.2
Zamykanie Alias Pind.3
Kran_close Alias Pinb.0
Kran_middle Alias Pinb.1
Kran_open Alias Pinb.2
Switch Alias Pinb.3
Bariera Alias Pinb.4
Przeciazenie Alias Pinb.5
$regfile = "Attiny2313.dat"
$crystal = 1000000
Config Portb = Input
Portb = &B00000000
Config Portd = Output
Portd = &B0000000
Pinb.5 = 1
Dim Pozycja As Integer
Dim Stan As Bit
Pozycja = 11
Stan = 0
Do
If Switch = 1 And Stan = 0 And Przeciazenie = 1 Then
Stan = 1
If Pozycja = 21 And Wolne_zamykanie = 1 Then
Wolne_zamykanie = 0
Pozycja = 11
Elseif Pozycja = 21 And Wolne_zamykanie = 0 Then
Wolne_zamykanie = 1
Cls
Elseif Pozycja = 11 And Wolne_otwieranie = 1 Then
Wolne_otwieranie = 0
Pozycja = 21
Elseif Pozycja = 11 And Wolne_otwieranie = 0 Then
Wolne_otwieranie = 1
Elseif Pozycja = 12 And Otwieranie = 1 Then
Otwieranie = 0
Pozycja = 22
Elseif Pozycja = 12 And Otwieranie = 0 Then
Otwieranie = 1
Elseif Pozycja = 22 And Zamykanie = 1 Then
Zamykanie = 0
Pozycja = 12
Elseif Pozycja = 22 And Zamykanie = 0 Then
Zamykanie = 1
End If
Elseif Kran_close = 1 And Wolne_zamykanie = 1 Then
Wolne_zamykanie = 0
Pozycja = 11
Elseif Kran_open = 1 And Otwieranie = 1 Then
Otwieranie = 0
Pozycja = 22
Elseif Pozycja = 11 And Kran_middle = 1 And Wolne_otwieranie = 1 Then
Wolne_otwieranie = 0
Waitms 500
Otwieranie = 1
Pozycja = 12
Elseif Pozycja = 22 And Kran_middle = 1 And Zamykanie = 1 Then
Zamykanie = 0
Waitms 500
Wolne_zamykanie = 1
Pozycja = 21
Elseif Bariera = 1 And Pozycja = 22 And Zamykanie = 1 Then
Zamykanie = 0
Waitms 500
Otwieranie = 1
Pozycja = 12
End If
If Switch = 0 Then
Stan = 0
End If
If Przeciazenie = 0 Then
If Pozycja = 11 And Wolne_otwieranie = 1 Then
Wolne_otwieranie = 0
Pozycja = 21
Elseif Pozycja = 12 And Otwieranie = 1 Then
Otwieranie = 0
Pozycja = 22
Elseif Pozycja = 21 And Wolne_zamykanie = 1 Then
Wolne_zamykanie = 0
Pozycja = 11
Elseif Pozycja = 22 And Zamykanie = 1 Then
Zamykanie = 0
Pozycja = 12
End If
End If
Loop
End
-
Robert0409
- -
- Posty: 18
- Rejestracja: 03 kwie 2009, 9:33
- Lokalizacja: Włwa
Post
autor: Robert0409 » 10 maja 2010, 19:40
Kolego, napisałeś sobie programik to go sprawdź sam jak działa. Jeśli będziesz miał problem z jego działaniem to wtedy opisz objawy, a na pewno uzyskasz pomoc. Zrobiłeś chociaż płytkę do tego sterownika? Będziesz miał "żywy organizm" i schemat będzie łatwiej i Tobie i innym na tym Forum.
-
Pikczu
- Użytkownik
- Posty: 754
- Rejestracja: 18 lip 2005, 18:33
- Lokalizacja: Dublin
-
Kontakt:
Post
autor: Pikczu » 10 maja 2010, 22:51
Witam.
Masz tu sporo błędów nie sprawdzałem całego ale już w pierwszych liniach widać.
Wejścia powinny być na odwrót czyli stan wysoki normalnie i zwieranie do masy ty masz wyłączone Pull upy.
Pinb.5=1 to jest źle pin sprawdza stan końcówki portu.
Wszystkie te ify i else ify, hm nie widzę tego, np Krańcówki powinny być na przerwaniach a nie na stanie pinu i to jeszcze z opóźnieniami typu waitms.
Robert0409, nie wnosisz nic do tematu.
-
katomasz
- -
- Posty: 7
- Rejestracja: 10 maja 2010, 7:13
- Lokalizacja: łódź
Post
autor: katomasz » 11 maja 2010, 12:07
OK, dzięki
Pikczu.
Więc początek wyglądałby tak?
Kod: Zaznacz cały
Wolne_otwieranie Alias Portd.0
Wolne_zamykanie Alias Portd.1
otwieranie Alias Portd.2
Zamykanie Alias Portd.3
Kran_close Alias Pinb.0
Kran_middle Alias Pinb.1
Kran_open Alias Pinb.2
Switch Alias Pinb.3
Bariera Alias Pinb.4
Przeciazenie Alias Pinb.5
$regfile = "Attiny2313.dat"
$crystal = 1000000
Config Portb = Input
Portb = &B11111111
Config Portd = Output
Portd = &B0000000
Dim Pozycja As Integer
Dim Stan As Bit
Pozycja = 11
Stan = 0
I sprawa pinb.5, jak w takim razie sprawdzić zadziałanie bezpiecznika?
I jeszcze obługa przerwań dla krańcówek. Mógłbym prosić o przykład jak to obsłużyć?
-
Pikczu
- Użytkownik
- Posty: 754
- Rejestracja: 18 lip 2005, 18:33
- Lokalizacja: Dublin
-
Kontakt:
Post
autor: Pikczu » 11 maja 2010, 18:09
Witam.
Postaram się skrobnąć coś ale później.
Dopiero co z pracy wróciłem.
----------------------------------------------- 22:15--------------------------
Witam ponownie.
Dziś już nic raczej nie wymyśle, jeśli możesz narysuj jakiś schemat
rozmieszczenia tych krańcówek.
Będzie łatwiej.
druga sprawa w jaki sposób będziesz miał wykonany układ wykrywania przeciążenia???
czy wystarczy jak procek będzie reagował na zmianę stanu ?
-
katomasz
- -
- Posty: 7
- Rejestracja: 10 maja 2010, 7:13
- Lokalizacja: łódź
Post
autor: katomasz » 12 maja 2010, 5:59
Najpierw druga sprawa. Będzie założony bezpiecznik C8, który, gdy już nastąpi przeciążenie, zostanie rozłączony i trzeba będzie ręcznie go załączyć (pozwoli to sprawdzić, co jest przyczyną).
A teraz pełny schemat.
Złącza X4 to zasilanie linią 12V. Złącza X3 to wyjście na silnik. X1 - zasilanie procesora, X3 - zasilanie przekaźników. Złącza X2 to wyjścia na krańcówki, barierę, bezpiecznik oraz switch - docelowo ma być tam podłączony układ zdalnego sterowania.
I do tego pytanie - czy w związku ze zmianą stanów pinb X2-7 podłączamy do masy?
-
Załączniki
-

-
kayron
- Użytkownik
- Posty: 2088
- Rejestracja: 21 wrz 2008, 12:53
- Lokalizacja: Poland
-
Kontakt:
Post
autor: kayron » 12 maja 2010, 12:26
A możesz powiedzieć jakim konkretnie silnikiem chcesz sterować?? Bo zabezpieczenie w postaci popularnego eSa C8 (8A) sugerowało by że będzie to sporej mocy silnik. Wtedy raczej nie przełączał bym go zwykłymi przekaźnikami lutowanymi na PCB, tylko stycznikami z cewką 24V.
-
katomasz
- -
- Posty: 7
- Rejestracja: 10 maja 2010, 7:13
- Lokalizacja: łódź
Post
autor: katomasz » 12 maja 2010, 13:31
Będzie to najzwyklejszy silnik od wycieraczek samochodowych 12v z dwoma prędkościami. A bezpiecznik jest taki, ponieważ przy starcie prąd dochodzi do 8A, w trakcie pracy jest ok 1A, ale przy zablokowaniu przekracza 8A, dlatego bezpiecznik typu C.
-
haterkmp
- Użytkownik
- Posty: 652
- Rejestracja: 08 sie 2008, 11:47
- Lokalizacja: Wałbrzych
Post
autor: haterkmp » 12 maja 2010, 15:51
pamiętaj tylko żeby ścieżki na pcb były grube. możesz nawet "wzmocnić" je lutując do ścieżek kawałki drutu 0,75-1,25mm.
a zastanawiałeś się nad użyciem transoptorów? dodatkowe zabezpieczenie kontrolera i możliwość zastosowania odrębnego obwodu sterowania silnikiem i przekaźnikami.
[ Dodano: 2010-05-12, 16:54 ]
a ten kondensatorek 100nF daj jak najbliżej procka a nawet od strony druku pcb bezpośrednio do nóżek procesora.
[ Dodano: 2010-05-12, 16:58 ]
a przy ledach zamiast tych kondensatorków nie powinny być rezystorki? myslę że świecidełka szybko pójdą z dymem przy pierwszym rozłączaniu cewki przekaźnika. gdybyś zastosował transoptory to mogłyby być wpięte w szereg i wtedy mały rezystor ograniczający prąd dwóch diod i po problemie. bo jak rozumiem służą optycznej identyfikacji włączonego przekaźnika.
-
katomasz
- -
- Posty: 7
- Rejestracja: 10 maja 2010, 7:13
- Lokalizacja: łódź
Post
autor: katomasz » 12 maja 2010, 17:25
Ścieżki są grube - tam gdzie dało radę są 0.5, a reszta do silnika to 0.4. obód do sterowania silnikiem tak naprawdę jest osobny. Kondensator jest ok 2 mm od procka. Przy ledach tak naprawdę będą rezystory, ale schemat robiłem na szyko i potrzebowałem tak naprawdę odpowiedni odstęp na pinach 10mm, a to było pod ręką. Eagle mam w takiej starej wersji i żeby coś tam znaleźć, to trzeba wszystko przejrzeć.
-
haterkmp
- Użytkownik
- Posty: 652
- Rejestracja: 08 sie 2008, 11:47
- Lokalizacja: Wałbrzych
Post
autor: haterkmp » 12 maja 2010, 17:35
aha
no to nie powinno być problemów które sygnalizowałem.
ściągnij sobie bibliotekę special2 do eagla najlepeiej ze strony. tam masz dość duzo popularnych standardowych elementów.
-
Pikczu
- Użytkownik
- Posty: 754
- Rejestracja: 18 lip 2005, 18:33
- Lokalizacja: Dublin
-
Kontakt:
Post
autor: Pikczu » 12 maja 2010, 20:32
Witam właśnie wróciłem z pracy i mam chwile żeby coś wydumać.
Pasuje wszytko przerobić zamienić porty miejscami bo potrzebne będą wejścia PD.2 i PD.3
do przerwań i jakieś z portu B jako PCINT (PIN change interrupt) ale to wyjdzie w praniu.
Na Pewno barierę trzeba dać na jedno z przerwań proponuję INT0 portd.2
Można wykorzystać port szeregowy czy to do testów a może i nawet do zdalnego sterowania.
Czy zmiana prędkości będzie wyzwalana krańcówką gdzieś pod koniec drogi ?
Jak to wygląda czy wolne zamykanie to włączenie od dzielnego uzwojenia w silniku tym od wycieraczek czy dwóch uzwojeń jednocześnie???
-
matrix
- Użytkownik
- Posty: 1796
- Rejestracja: 15 mar 2006, 5:21
- Lokalizacja: Sochaczew
-
Kontakt:
Post
autor: matrix » 12 maja 2010, 22:48
to i ja się przyłączę. kiedyś w czasach gdy nie miałem programatora popełniłem taki sterownikm że tak powiem na sucho. nie był sprawdzany z płytką tylko w symulacji gdzie działał. oto kod. trzeba to przerobić bo wiele jest niepotrzebne.
poza tym pisane to było jak jeszcze mało się na tym rozumiełem i do wszystkiego używałem IF...THEN.
Kod: Zaznacz cały
'$sim
'sterownik bramy na tiny 2313
$regfile = "2313def.dat"
$crystal = 8000000
dim x as byte
dim wspza as Bit 'zmienne pomocnicze zapisu stanu silnikow
dim wslza as Bit
dim wspot as Bit
dim wslot as Bit
config INT0 = FALLING
config int1 = falling
Enable Interrupts
Enable Int0
enable INT1
on int0 czujka
on int1 brama_stop
Config pind.0 = input
config pind.1 = input
config pind.2 = input
config pind.3 = input
config pinb.2 = input
config pinb.3 = input
config pinb.6 = input
config pinb.7 = input
config portb.0 = output
config portb.1 = output
config portb.4 = output
config portb.5 = output
spot Alias portb.0 'silnik prawy otwiera
spza Alias portb.1 'silnik prawy zamykla
cpot Alias pinb.2 'wejscie czujka prawa otwarta brama
cpza Alias pinb.3 'wejscie czujka prawa zamknieta brama
slot Alias portb.4 'silnik lewy otwiera
slza Alias portb.5 'silnik lewy zamyka
clot Alias pinb.6 'wejscie czujka prawa otwarta brama
clza Alias pinb.7 'wejscie czujka prawa zamknieta brama
licznik alias pind.0
czujnik alias pind.1
portb = 255
portd = 255
x = 0 'zmienna pomocnicza ustawiona na zero
licznik = 1
czujnik = 1
set pinb.2
set pinb.3
set pinb.6
set pinb.7
gosub zamykam
do
if licznik = 0 then
waitms 50
gosub wybor
end if
loop
wybor: 'zlicza ile razy nacisnieto przycisk na pilocie
incr x
if x = 1 then 'jesli raz to wezwij program do zamykania bramy
gosub otwieram
end if
if x = 2 then 'jesli drugi raz nacisnieto to zatrzymuje brame
gosub stopuje
end if
if x = 3 then 'jesli nacisnieto trzeci raz to wzywam podprogram zamykania beamy
gosub zamykam
end if
if x = 4 then 'jesli przycisk nacisniety poraz czwarty to zatrzymuje brame
set spza
set slza
x = 0
end if
return
otwieram: 'poprogram otwierania bramy
do
if clot = 0 then 'sprawdzam czy lewa połowa bramy otworzyla sie
set slot 'wylaczam otwieranie lewej polowy
else
set slza
reset slot 'w przeciwnym razie zalaczam go
end if
if cpot = 0 then 'sprawdzam czy prawa polowa otworzyla sie
set spot 'i wylaczam otwieranie prawej polowy
else
wait 1
set spza
reset spot 'w przeciwnym razie zalaczam otwieranie
end if
if licznik = 0 then 'jesli nacisnieto przycisk nr1 na pilocie
gosub wybor 'licz ile razy?
exit do
end if
set clza 'ustawiam czujki zamknietej bramy do odczytu
set cpza
if clot = 0 and cpot = 0 then 'jesli obie polowy bramy otworzyly sie to
set slot 'wylaczam silniki otwierania
set spot
incr x
exit do 'wychodze z petli
end if
loop
return
zamykam: 'podprogram zamykania bramy
do
if clza = 0 then 'sprawdzam czy lewa połowa bramy zamknela sie
set slza 'wylaczam zamykanie lewej polowy
else
reset slza 'w przeciwnym razie zalaczamgo
end if
if cpza = 0 then 'sprawdzam czy prawa polowa zamknela sie
set spza 'i wylaczam zamykanie prawej polowy
else
wait 1
reset spza 'w przeciwnym razie zalaczam zamykanie
end if
set clot 'ustawiam czujki otwarcia bramy do odczytu
set cpot
if licznik = 0 then 'jesli nacisnieto przycisk nr1 na pilocie
gosub wybor 'licz ile razy?
exit do
end if
if clza = 0 then 'jesli obie polowy bramy zamknely sie to
if cpza = 0 then
set slza 'ustawiam czujki zamknietej bramy do odczytu
set spza
exit do 'i wychodze z petli
end if
end if
loop
x = 0
return
stopuje: 'podprogram zatrzymywania silnikow
wait 1
if slot = 0 then 'sprawdzam czy silnik lewej polowy dziala i jesli tak
set slot 'to zatrzymuje go
wait 1
end if
if spot = 0 then 'i tak kolejno sprawdzam wszystkie silniki
set spot
wait 1
end if
if slza = 0 then
set slza
wait 1
end if
if spza = 0 then
set spza
wait 1
end if
set licznik
return
brama_stop: 'podprogram zatrzymywania bramy na zyczenie
set licznik
wspza = spza 'zapamietuje stany poszczegolnych silnikow
wslza = slza
wslot = slot
wspot = spot
if spza = 0 then 'jesli silnik prawej polowy zamyka sie
set spza 'to go zatrzymuje
end if
if slza = 0 then 'jesli silnik lewej polowy zamyka sie
set slza 'to zatrzymuje go
end if
if slot = 0 then 'jesli silnik lewej polowy otwiera sie
set slot 'to zatrzymuje go
end if
if spot = 0 then 'kesli silnik prawej polowy otwiera sie
set spot 'to zatrzymuje go
end if
do
if licznik = 0 then 'jesli uzytkownik chce wlaczyc ponownie brame
spza = wspza 'to odczytuje wartosci silnikow ktore wczesniej zapisalem
spot = wspot 'i wartosci te nadaje ospowiednim silnikom
slza = wslza
slot = wslot
set licznik
exit do
end if
loop
return
czujka: 'czujka przedmiotu znajdujacego sie w bramie
disable INT0 'zatrzymuje zezwolenie na przerwania w tym INT0
disable INTERRUPTS
if clza <> 0 then 'jesli przedmiot znajduje sie w bramie
if cpza <> 0 then 'a polowki bramy jeszcze nie zamkneły sie to
set slza 'wylaczam silniki zamykajace brame
wait 1
set spza
end if
end if
do
if licznik = 0 then 'sprawdzam czy nacisnieto przycisk nr1 na pilocie
wait 1
reset slot
reset spot
end if
if clot = 0 then 'sprawdzam czy lewa połowa bramy otworzyla sie
set slot 'wylaczam otwieranie lewej polowy
end if
if cpot = 0 then 'sprawdzam czy prawa polowa otworzyla sie
set spot 'i wylaczam otwieranie prawej polowy
end if
if czujnik <> 0 then 'jesli przedmiotu nie ma juz w bramie to
if clot = 0 then
if cpot = 0 then
set czujnik
wait 4
exit do 'wychodze z petli
end if
end if
end if
loop
enable INTERRUPTS 'zezwalam na przerwanie w tym INT0
enable INT0
x = 2
return
-
katomasz
- -
- Posty: 7
- Rejestracja: 10 maja 2010, 7:13
- Lokalizacja: łódź
Post
autor: katomasz » 18 maja 2010, 7:12
OK. Wracam do tematu.
Na chwilę obecną tak to wygląda.
Kod: Zaznacz cały
$regfile = "attiny2313.dat"
$crystal = 1000000
Config Portd.0 = Output ' portd.0 dla wolnego otwierania
Config Portd.1 = Output ' portd.1 dla wolnego zamykania
Config Portd.4 = Output ' portd.4 dla otwierania
Config Portd.5 = Output ' portd.5 dla zamykania
Config Pinb.0 = Input ' pinb.0 dla krancówki zamknięcia
Config Pinb.1 = Input ' pinb.1 dla krancówki pośredniej
Config Pinb.2 = Input ' pinb.2 dla krancówki otwarcia
Config Pinb.3 = Input ' pinb.3 dla przycisku
Config Pinb.5 = Input ' pinb.5 dla bezpiecznika
Dim Pozycja As Integer ' pozycja do określenia aktualnej pozycji 'bramy, jeżeli
'do wolnego otwierania to 11, jeżeli do otwierania to 12,
'jeżeli do zamykania to 22, jeżeli do wolnego zamykania to 21
Dim Stan As Bit ' stan dla określenia stanu przycisku, jeżeli 'wciśnięty
' stan=1, jeżeli puszczony stan=0
Dim Silnik As Bit ' silnik dla określenia stanu silnika, jeżeli 'pracuje
' to stan=1, jeżeli stoi to stan=0
Pozycja = 11 ' określenie pozycji do wolnego otwierania
Stan = 0 ' przycisk nie wciśnięty
Silnik = 0 ' silnik stoi
Wolne_otwieranie Alias Portd.0 ' przypisywania aliasów
Wolne_zamykanie Alias Portd.1
Otwieranie Alias Portd.4
Zamykanie Alias Portd.5
Kran_close Alias Pinb.0
Kran_middle Alias Pinb.1
Kran_open Alias Pinb.2
Switch Alias Pinb.3
Przeciazenie Alias Pinb.5
Set Portb.0 ' ustawienie stanów linii
Set Portb.1
Set Portb.2
Set Portb.3
Set Portb.5
Do ' początek nieskończonej pętli
If Switch = 0 And Stan = 0 And Przeciazenie = 0 Then ' jeżeli wciśnięto przycisk,
'a nie był wciśnięty wcześniej
'oraz bezpiecznik załączony
Stan = 1 ' stan przycisku - przycisk jest włączony, 'jeżeli nic się nie
'zmieni w następnej pętli nie wchodź w ten warunek
If Pozycja = 11 And Silnik = 0 Then ' jeżeli pozycja do wolnego otwierania i silnik stoi
Set Wolne_otwieranie ' uruchom wolne_otwieranie
Silnik = 1 ' ustaw stan silnika na pracuje
Elseif Pozycja = 11 And Silnik = 1 Then ' jeżeli pozycja do wolnego otwierania i silnik pracuje
Reset Wolne_otwieranie ' wyłącz wolne otwieranie
Silnik = 0 ' ustaw stan silnika na stoi
Pozycja = 21 ' przełącz pozycję do wolnego zamykania
Elseif Pozycja = 21 And Silnik = 0 Then ' jeżeli pozycja do wolnego zamykania i silnik stoi
Set Wolne_zamykanie ' uruchom wolne zamykanie
Silnik = 1 ' ustaw stan silnika na pracuje
Elseif Pozycja = 21 And Silnik = 1 Then ' jeżeli pozycja do wolnego zamykania i silnik pracuje
Reset Wolne_zamykanie ' wyłącz wolne zamykanie
Silnik = 0 ' ustaw stan silnika na stoi
Pozycja = 11 ' przełącz pozycję do wolnego otwierania
Elseif Pozycja = 12 And Silnik = 0 Then ' jeżeli pozycja do otwierania i silnik stoi
Set Otwieranie ' włącz otwierania
Silnik = 1 ' ustaw stan silnika na pracuje
Elseif Pozycja = 12 And Silnik = 1 Then ' jeżeli pozycja do otwierania i silnik 'pracuje
Reset Otwieranie ' wyłącz otwieranie
Silnik = 0 ' ustaw stan silnika na stoi
Pozycja = 22 ' przełącz pozycję do zamykanie
Elseif Pozycja = 22 And Silnik = 0 Then ' jeżeli pozycja do zamykania i silnik 'stoi
Set Zamykanie ' włącz zamykanie
Silnik = 1 ' ustaw stan silnika na pracuje
Elseif Pozycja = 22 And Silnik = 1 Then ' jeżeli pozycja do zamykania i silnik 'pracuje
Reset Zamykanie ' wyłącz zamykanie
Silnik = 0 ' ustaw stan silnika na stoi
Pozycja = 12 ' przełącz pozycję do otwierania
End If
End If ' koniec operacji przełączania stanu silnika 'przyciskiem
If Kran_close = 0 And Silnik = 1 Then ' jeżeli zadziałała krańcówka zamknięcia, a silnik pracuje
' (co oznacza, że jest wolne zamykanie)
Reset Wolne_zamykanie ' wyłącz wolne zamykanie
Silnik = 0 ' ustaw stan silnika na stoi
Pozycja = 11 ' przełącz pozycję do wolnego otwierania
Elseif Kran_open = 0 And Silnik = 1 Then ' jeżeli zadziałała krańcówka otwarcia, a silnik pracuje
' (co oznacza, że jest otwieranie)
Reset Otwieranie ' wyłącz otwieranie
Silnik = 0 ' ustaw stan silnika na stoi
Pozycja = 22 ' przełącz pozycję do zamykania
Elseif Kran_middle = 0 And Silnik = 1 Then ' jeżeli zadziałała krańcówka pośrednia,
'a silnik pracuje (co oznacza, że jest
'albo wolne otwieranie, albo zamykanie)
If Wolne_otwieranie = 1 Then ' jeżeli jest wolne otwieranie
Reset Wolne_otwieranie ' wyłącz wolne otwieranie
Waitms 200 ' poczekaj 200 ms
Set Otwieranie ' uruchom otwieranie
Pozycja = 12 ' przełącz pozycję na otwieranie
Elseif Zamykanie = 1 Then ' jeżeli jest zamykanie
Reset Zamykanie ' wyłącz zamykanie
Waitms 200 ' poczekaj 200 ms
Set Wolne_zamykanie ' uruchom wolne zamykanie
Pozycja = 21 ' przełącz pozycję na wolne zamykanie
End If
End If
If Switch = 1 Then ' jeżeli puszczony przycisk
Stan = 0 ' ustaw stan przycisku na wyłączony
End If
If Przeciazenie = 1 And Silnik = 1 Then ' jeżeli zadziałało przeciążenie -
'wyłączony bezpiecznik i silnik pracuje
Silnik = 0 ' ustaw stan silnika na stoi
If Pozycja = 11 Then ' jeżeli pozycja do wolnego otwierania
Reset Wolne_otwieranie ' wyłącz wolne_otwieranie
Pozycja = 21 ' przełącz pozycję do wolnego zamykania
Elseif Pozycja = 12 Then ' jeżeli pozycja do otwierania
Reset Otwieranie ' wyłącz otwieranie
Pozycja = 22 ' przełącz pozycję do zamykania
Elseif Pozycja = 22 Then ' jeżeli pozycja do zamykania
Reset Zamykanie ' wyłącz zamykanie
Pozycja = 12 ' przełącz pozycję do otwierania
Elseif Pozycja = 21 Then ' jeżeli pozycja do wolnego zamykania
Reset Wolne_zamykanie ' wyłącz wolne zamykanie
Pozycja = 11 ' przełącz pozycję do wolnego otwierania
End If
End If
Loop
End
Teraz jak dodać portd.2 do bariery? Czy wywołuje się to tak jak podałeś - int0 portd.2?
Zmiana prędkości będzie pod sam koniec drogi. Będzie to zarówno dociągnięcie bramy do zamknięcia jak i odciągnięcie, kiedy jest mały ruch bramy przy tym samym posuwie. W silniku wycieraczek chyba nie ma osobnego uzwojenia, lecz jest układ obniżający obroty - teoretycznie można by to uzyskać przez obniżenie napięcia w układzie z prockiem, lecz skoro jest to już zrealizowane w silniku, to chcę to wykorzystać.[/b]
-
marcing
- Użytkownik
- Posty: 868
- Rejestracja: 14 lut 2006, 14:13
- Lokalizacja: z pociągu...
-
Kontakt:
Post
autor: marcing » 18 maja 2010, 15:12
Taka "drobna" prośba moderatora:
Proszę umieszczać długie listingi w formie załączników - zwiększy to czytelność tematu, a dodatkowo od razu można wczytać program do odpowiedniego kompilatora.
W formie listingów pomiędzy znacznikami [code] oraz [/code] proszę zamieszczać krótkie przykłady, rozwiązania problemu itp.