Aktyw Forum

Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.

Sprawdź punkty Zarejestruj się

Prosty program do napisania brama wjazdowa...Bascom

cooki13
-
-
Posty: 4
Rejestracja: 29 gru 2007, o 18:59
Lokalizacja: Polska

Prosty program do napisania brama wjazdowa...Bascom

Postautor: cooki13 » 18 mar 2008, o 07:39

Witam nie jestem programistą jednak musze zrobić układ do bramy wjazdowej.Idea jest prosta.Mam moduł radiowy(odbiorczy firmy Benica) który ma niestety jeden przekaźnik naciśnięcie przycisku na pilocie powoduje jego załączenie.I chciałem go wykorzystać do bramy która posiada dwie krańcówki.
Pinb.0 = krańcówka
Pind.7 = krańcówka
Pind.6 = przekaźnik z modułu radiowego
Pinb.5 =przekaźnik do silnika
Pinc.0 = przekaźnik do silnika
Płytke już wytrawiłem dla mikrokontrolera Atmega8 działająca na wewnętrznym kwarcu.Silnik jest prądu stałego.w zależności od stanu pinu do przekaźników silnik kręci sie w lewo lub w prawo
Program wygląda następująco
Po zwarciu chwilowym styków przekaźnika z modułu radiowego mikrokontroler załacza jeden z przekaźników i utrzymuje ten stan dopóki nie zostanie załączona jedna z krańcówek lub przekaźnik z modułu radiowego sie jeszcze raz nie załączy (w tym wypadku nie ma znaczenia która krańcówka zadziała).Ponowne załączenie przekaźnika z modułu radiowego jeżeli brama stoi powoduje zadziałanie drugiego przekaźnika w celu zmiany kierunku obrotu silnika i tak jak poprzednio dopóki nie załączy sie któraś z krańcówek lub nie zostanie załączony przekaźnik z modułu radiowego
mój program wygląda tak
$regfile = "m8def.dat"
Config Pinb.0 = Input
Config Pind.7 = Input
Config Pind.6 = Input
Config Pinb.5 = Output
Config Pinc.0 = Output
Declare Sub Beep
Beep:
Sound Portd.1 , 3800 , 10
Wait 1
Sound Portd.1 , 5000 , 10
Wait 1
End


Przekaznik1 Alias Portb.5
Przekaznik2 Alias Portc.0
Krancowka1 Alias Pinb.0
Krancowka2 Alias Pind.7
Radio Alias Pind.6
Do

Debounce Radio , 0 , Ruch1
Debounce Radio , 0 , Ruch2

Loop

End

Ruch1:
Przekaznik1 = 1
If Krancowka1 = 0 Then
Przekaznik1 = 0
Call Beep
Else
Przekaznik1 = 1
End If
If Krancowka2 = 0 Then
Przekaznik1 = 0
Call Beep
Else
Przekaznik1 = 1
End If
If Radio = 0 Then
Przekaznik1 = 0
Call Beep
Else
Przekaznik1 = 1
End If

Ruch2:
Przekaznik2 = 1
If Krancowka1 = 0 Then
Przekaznik2 = 0
Call Beep
Else
Przekaznik2 = 1
End If
If Krancowka2 = 0 Then
Przekaznik2 = 0
Call Beep
Else
Przekaznik2 = 1
End If
If Radio = 0 Then
Przekaznik2 = 0
Call Beep
Else
Przekaznik2 = 1
End If
Bascoma ucze sie od wczoraj i tylko po to aby zrobić ten sterownik.Układ zaprogramowałem poprzez ponyprog ustawiając rezonator na wew 8mhz wg takiej tabelki
CKSEL3 - ptaszek
CKSEL2 - bez ptaszka
CKSEL1 - ptaszek
CKSEL0 - ptaszek
Niestety układ nie działa:/
Napięcie zasilające do mikrokontrolera jest i na inne układy problem tkwi w programie będe wdzięczy za pomoc

Awatar użytkownika
Lemur
-
-
Posty: 17
Rejestracja: 27 lip 2004, o 08:30
Lokalizacja: Pruszków

Postautor: Lemur » 18 mar 2008, o 15:51

$regfile = "m8def.dat"
Config Pinb.0 = Input
Config Pind.7 = Input
Config Pind.6 = Input
Config Pinb.5 = Output
Config Pinc.0 = Output
Declare Sub Beep
Beep:
Sound Portd.1 , 3800 , 10
Wait 1
Sound Portd.1 , 5000 , 10
Wait 1
End <<< program kończy pracę w tym miejscu i nie idzie już dalej
.....
Powinieneś napisać END SUB a rozpocząć procedurę SUB Beep a nie >> Beep:

Pozdrawiam
Ostatnio zmieniony 19 mar 2008, o 00:37 przez Lemur, łącznie zmieniany 1 raz.

gavi
-
-
Posty: 218
Rejestracja: 14 kwie 2003, o 15:03
Lokalizacja: Warszawa
Kontaktowanie:

Postautor: gavi » 18 mar 2008, o 19:33

Jeżeli to ma być urządzenie praktyczne to przede wszystkim proponowałbym udoskonalić algorytm.
1. Należy przewidzieć co się będzie działo jeśli brama nie osiągnie krańcówki (kamień, patyk na jej torze zamykania lub otwierania). Urządzenie powinno albo się wyłączyć po czasie albo dokonać paru prób zamknięcia i też się wyłączyć wywołując alarm
2.Proponowałbym dodanie fotokomórki która nie pozwoli na zqamknięcie bramy gdy w jej prześwicie jest przeszkoda . Wierz mi , zamknięcie się bramy na samochodzie to bardzo niemiłe doświadczenie lecz gorzej jak będzie tam małe dziecko...
3.należy przewidzieć sytuację samoczynnego włączenia się bramy w połowie otwartej. Załóżmy ,ze w trakcie jej ruchu zaniknie na jakiś czas zasilanie. Co ma zrobić brama gdy zosytanie ono przywrócone ? zamknąć się, pozostać w połowie zamkniętą czy otworzyć, a może wywołać alarm?
4. No i na koniec całkowicie nieprzemyślane wydaje mi się sterowanie zmianą kierunku ruchu przez kolejne przyciskanie przycisku an pilocie. Po pierwsze niepotrzebnie forsuje to silnik a po drugie gorzej będzie gdy bram będzie o wółos od przeszkody i należy ją cofnąc a tymczasem pierwsze przyciśniećie może wywołać ruch do przodu. Określić kierunek ruchu można przez np. czas przyciskania przycisku na pilocie - krótkie to ruch do przodu a długie to ruch do tyłu. No i sterownik startuje z niewielkim opóźnieniem potrzebnym na określenie czy jest to impuls długi czy krótki.
Miłej zabawy

cooki13
-
-
Posty: 4
Rejestracja: 29 gru 2007, o 18:59
Lokalizacja: Polska

Postautor: cooki13 » 21 mar 2008, o 17:31

Fotokomórka jest zbędna ponieważ jest to brama wjazdowa do garażu.

Czy ktoś mógłby mi pomóc w napisaniu tego programu?

Kod: Zaznacz cały

$regfile = "m8def.dat" ' specify the used micro $crystal = 8000000 ' used crystal frequency Config Pind.6 = Input Config Pind.7 = Input Config Pinb.0 = Input Config Pinc.0 = Output Config Pinb.5 = Output Radio Alias Pind.6 Krancowka1 Alias Pind.7 Krancowka2 Alias Pinb.0 Set Portd.6 Set Portd.7 Set Portb.0 Reset Pinc.0 Reset Pinb.5 Do Debounce Radio , 0 , Ruch , Sub
I co dalej dopisać?Jak zrobić program aby spełniał założenia?

cooki13
-
-
Posty: 4
Rejestracja: 29 gru 2007, o 18:59
Lokalizacja: Polska

Postautor: cooki13 » 22 mar 2008, o 18:55

Powoli staram sie pisać program krok po kroczku i jednak dzieje sie coś nieprzewidzianego a mianowicie czy jest coś złego w pracy tego programu?

Kod: Zaznacz cały

$regfile = "m8def.dat" ' specify the used micro $crystal = 8000000 ' used crystal frequency Config Pind.6 = Input Config Pind.7 = Input Config Pinb.0 = Input Config Pinc.0 = Output Config Pinb.5 = Output Radio Alias Pind.6 Krancowka1 Alias Pind.7 Krancowka2 Alias Pinb.0 Set Portd.6 Set Portd.7 Set Portb.0 Reset Pinc.0 Reset Pinb.5 Do Debounce Radio , 0 , Ruch , Sub Loop Ruch: While Pind.7 <> 0 Or Pinb.0 <> 0 Portc.0 = 1 Wend
a dokładnie o podprogram


Ruch:
While Pind.7 <> 0 Or Pinb.0 <> 0
Portc.0 = 1
Wend

czyli dopóki krańcówki(PD7 lub PB0) nie są zwarte niech przekaźnik (PC0 będzie w stanie aktywnym
.I program nie działa na płytce

Awatar użytkownika
Lemur
-
-
Posty: 17
Rejestracja: 27 lip 2004, o 08:30
Lokalizacja: Pruszków

Postautor: Lemur » 25 mar 2008, o 10:33

Podejrzewam,że ze względu na małe doświadczenie nie wziąłeś przy projektowaniu płytki pod uwagę zagadnień związanych z zakłóceniami od przekaźników(szczególnie mocno iskrzących na stykach).Procki Atmela AVR są wyjątkowo na nie wrażliwe i należy bardzo sumiennie przemyśleć kostrukcję urządzenia.Ja bardzo długo borykałem się z resetami procka i jego dziwnej pracy w monencie zmiany stanu przekaźników.Odzielenia zasilań ,odpowiednie prowadzenie mas a przede wszystkim oddalenie iskrzących przekaźników od procka i stosowanie układów gasikowych to klucz do sukcesu.Jeśli stwierdzasz, że układ dziwnie pracuje to do testów zamiast przekaźników użyj LEDów-przekonasz sie czy przekaźnik nie zaburza pracy procka.Nie licz,że na forum ktoś za Ciebie napisze program ,bo nie miałoby to sensu jeśli już zdecydowałeś sie na samodzielną konstrukcję.Wiem z doświadczenia, że samodzielna konstrukcja wymaga wielokrotnych poprawek,których nie potrafiłbyś wprowadzić gdybys samodzielnie nie napisał oprogramowania.A ogromną zaletą własnej konstrukcji jest możliwość dostosowania do własnych potrzeb-ja już kilkadziesiąt poprawek wprowadziłem do swojego sterownika w ciągu wielu lat jego działania.
Wracając do Twojej konstrukcji to sprawdź systematycznie wszystkie obwody(czy dochodzą sygnały z krańcówek,czy wychodzi z procka sterowanie przekaźnikami)-nie pisz programu od razu całego ,tylko testuj pojedyńcze elementy n.p.:sprawdź czy zmiana stanu krańcówki zapala i gasi testową LEDę podpiętą gdzieś do procka.

Wróć do „Projektowanie PCB, programy EDA, CAD, narzędziowe”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 22 gości