Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Funkcja furtki w napędzie do bramy FORCE 760

koczis_ws 07 Nov 2021 13:11 3063 44
Fluke Kamera Termowizyjna
  • Witam forumowiczów,

    Swego czasu mojej znajomej zainstalowano bramę przesuwną z napędem. Na pytanie o opcję częściowego otwierania, czyli tzw. opcję furtki powiedzieli, że się nie da. . . . . Hłe, hłe nie da :)
    Pomyslałem, przeanalizowałem i zrobiłem. Działa bezbłędnie.
    Teraz znowu powtórka z rozrywki. Szwagier postanowił zmienić stary, wysłużony i niestety awaryjny napęd bramy przesuwnej na nowy. On się na tym nie zna (lekarz) , więc mnie ubrał w temat.
    Poszukałem i znalazłem odpowiedni napęd. Padło na FORCE 760, który miał odpowiednie parametry. Wg specyfikacji ma funkcję furtki. Niestety okazało się, że ta funkcja to chiński "hłyt ! ... martetindowy" :D
    Dostawca tłumaczył się , że dostali partię napędów bez tej funkcji . . . . . Hmmmmmm. Tylko dlaczego w dostarczonej instrukcji oraz w tej dostępnej w sieci nie ma słowa na temat tej funkcji ?
    Po pertraktacjach udało się uzyskać pewną rekompensatę za to ale problem pozostał. Ta funkcja jest konieczna gdyż z domu nie widać bramy bo jest za winklem.
    Nie dało się zastosować takiego rozwiązania jak poprzednio ze względu na odmienny układ sterowania, więc trzeba było zrobić inaczej.
    Niby można by zmienić oprogramowanie w mikrokontrolerze, ale bez schematu i tekstu źródłowego to bardzo trudne, dla mnie praktycznie niewykonalne. Nowy mikrokontroler ze swoim oprogramowaniem też.
    Założenie było takie żeby nie ingerować w układ sterowania (gwarancja) i wykorzystać tylko dostępne na listwach sygnały. I po przeanalizowaniu sygnałów i sposobu działania powstało to dzieło. :)
    Po tym przydługim wstępie (miałem wenę :) ) przystępuję do opisu rozwiązania.
    Działanie polega na dobraniu czasu otwierania bramy tak żeby otworzyła się częściowo na ok. 1 m, a następnie po odpowiednim czasie potrzebnym na przejście, się zamknęła. Problem trywialny, dwie czasówki i gotowe.
    No ale nie do końca. Gdyby klient chciał sobie sam ustawić te parametry (przypominam lekarz) to co? I jeszcze żeby nie zakłócić normalnej pracy bramy. No.

    Tak więc założenie było takie:

    - Częściowe otwarcie przyciskiem z domu.
    - Gdy brama jest w ruchu to ten przycisk nie działa.
    - Gdy brama nie jest zamknięta to ten przycisk nie działa.
    - Maksymalnie uproszczone i intuicyjne programowanie czasów.
    - Możliwość przywrócenia ustawień domyślnych (jak się coś popieprzy).
    - Dane zapisane w EEPROM mikrokontrolera wiadomo po co.

    Do sterowania wybrałem mój ulubiony do takich prostych układów mikrokontroler ATINY 13.
    Schemat ideowy poniżej.

    Funkcja furtki w napędzie do bramy FORCE 760

    Funkcja furtki w napędzie do bramy FORCE 760

    Wybrałem montaż przewlekany i ATINY w obudowie DIL8 w podstawce żeby w razie czego łatwiej zmienić oprogramowanie i nie łazić z laptopem w deszczu lub mrozie do bramy, bo wtedy przy moim pechu najczęściej coś się dzieje :D.
    Miejsca jest dosyć, więc nie musiałem się wysilać z miniaturyzacją.
    Zasilanie układu +12V pochodzi z zasilania fotokomórki sterownika FORCE.

    Program w BASCOM.

    Code: vbnet
    Log in, to see the code


    Wykorzystane jest 100% pamięci.

    Działanie jest następujące:
    Po wciśnięciu przycisku "FURTKA" w domu, podawany jest impuls na wejście sekwencyjne "ONE" w napędzie. Brama zaczyna się otwierać i po zaprogramowanym czasie podawany jest kolejny impuls na wejście "ONE" co zatrzymuje bramę.
    Po upłynięciu czasu oczekiwania wysyłany jest kolejny impuls na "ONE" i brama się zamyka. Koniec cyklu.

    Teraz programowanie czasów, które notabene zajmuje ponad 90% kodu :) ale co się nie robi dla ambicji i rodziny :D.
    Brama musi być zamknięta i nie być wysterowana do ruchu. Jeśli tak nie jest to wciśnięcie "PROG" spowoduje 2 sek. impuls LED i nic się poza tym nie dzieje.
    Wciskamy przycisk "PROG" na module i po spełnieniu ww. warunków, LED zaczyna pulsować. Od tego momentu mamy ok. 30 sek. ma rozpoczęcie programowania. Gdy tego nie zrobimy to tryb programowania się kończy, program wraca do oczekiwania na cykl co jest zasygnalizowane 2 sek. impulsem LED.
    Aby zaprogramować szerokość otwarcia to w trybie programowania należy otworzyć bramę dowolnym urządzeniem (przyciskiem w domu , pilotem) i po otwarciu na wymaganą szerokość należy zatrzymać bramę (przyciskiem "STOP" lub przyciskiem sekwencyjnym).
    Teraz należy czekać tyle ile potrzebujemy na bezpieczne przejście przez częściowo otwartą bramę i gdy to minie należy zamknąć bramę. Po zamknięciu nastąpi zapalenie LED na dwa jednosekundowe impulsy co potwierdza przyjęcie parametrów.
    Jeśli z jakiegoś powodu trzeba przywrócić ustawienia domyślne (5 sek. otwierania i 15 sek. oczekiwania) to należy wcisnąc przycisk "PROG" i następnie w czasie pulsowania LED ponownie go wcisnąć. Dwa jednosekundowe impulsy potwierdzają przyjecie parametrów.
    LED jest zasilane z wejścia ATTINY, które normalnie jest skonfigurowane jako wejście i się lekko świeci sygnalizując zasilanie i oczekiwanie na akcję, a w trakcie programowania jest konfigurowane jako wyjście i pulsuje jaśniej.
    Takie rozwiązanie wybrałem ze względu na za małą ilość wyjść w mikrokontrolerze w stosunku do potrzeb a nie chciałem zastosować większego, np ATMEGA.
    Przekaźnik z cewką na 230V AC separuje układ od wyjścia zasilającego lampę ostrzegawczą bramy i służy do synchronizacji procesu programowania czasów, a podczas normalnej pracy blokuje przycisk "FURTKA" przy ruchu bramy gdyż na programową blokadę brakło pamięci mikrokontrolera.
    Z tego też powodu, bo ATTINY 13 ma tylko 1 kBAJT RAM, nie zastosowałem przerwania timera do programowania czasów. Ale zastosowane WAITMS w pętli spokojnie dało radę. Zastosowałem opóźnienie 0.25 sek. co przy prędkości bramy 12 m/min daje dokładność programowania szerokości co 5 cm.
    Napęd jest zrealizowany silnikiem indukcyjnym i jego prędkość niewiele się zmienia przy małej zmianie obciążenia co daje wystarczającą dokładność i powtarzalność szerokości otwarcia.
    W trakcie uruchamiania okazało się, że napięcie zasilania lampy na początku "wariuje" co objawia się krótkim brzęczeniem styków przekaźnika. Podejrzewam, że jest to spowodowane lampą, która jest ledowa i ma na zasilaniu przetwornicę zakłócającą napięcie przy rozruchu. Stąd taki długi, sekundowy czas opóźnienia w programie. Inaczej programowanie czasów "przeleciało" jak wicher dając zerowe wartości, czyli nie dało się zmieniać czasów. Ale dzięki kontroli prawidłowości czasów na początku programu, ustawiały się czasy domyślne.

    Cool? Ranking DIY
    Can you write similar article? Send message to me and you will get SD card 64GB.
    About Author
    koczis_ws
    Level 27  
    Offline 
    Has specialization in: urządzenia technologiczne, automatyka
    koczis_ws wrote 1537 posts with rating 296, helped 38 times. Live in city Kraków. Been with us since 2009 year.
  • Fluke Kamera Termowizyjna
  • #3
    koczis_ws
    Level 27  
    A jaka precyzja jest potrzenba żeby przejść przez bramę? Czy +/- 10 cm do dużo?
    Jeszcze za wcześnie na konkrety ale będę dokonywał pomiarów w różnych warunkach i się podzielę wynikami.
  • #4
    andrzejek23
    Level 19  
    Pomysłowe rozwiązanie, w zupełności wystarczające. No i Bascom - aż mi się łezka w oku zakręciła :)
  • Fluke Kamera Termowizyjna
  • #5
    koczis_ws
    Level 27  
    andrzejek23 wrote:
    No i Bascom - aż mi się łezka w oku zakręciła

    Wiele było dyskusji na ten temat na forum i nie tylko , ale ja uważam, że BASCOM jest dla ludzi. Do C podchodziłem kilka razy ale nie mogłem sie przemóc. Niby jest bardziej efektywny ale jak to mówią "pieniądze to nie wszystko". :)
  • #6
    SylwekK
    Level 31  
    Też lubię ulepszać coś czemu brakuje funkcjonalności :)
    Dziwi jednak fakt, że oryginalny ster podczas ruchu silnika wciśnięcie przycisku po prostu nie zatrzyma tego otwierania/zamykania choćby dla bezpieczeństwa. Czy może czegoś nie zrozumiałem...?
  • #7
    koczis_ws
    Level 27  
    SylwekK wrote:
    Też lubię ulepszać coś czemu brakuje funkcjonalności :)
    Dziwi jednak fakt, że oryginalny ster podczas ruchu silnika wciśnięcie przycisku po prostu nie zatrzyma tego otwierania/zamykania choćby dla bezpieczeństwa. Czy może czegoś nie zrozumiałem...?

    Oryginalny sterownik zatrzymuje bramę po wciśnięciu przycisku "STOP" lub przycisku sterowania sekwencyjnego. Dla bezpieczeństwa jest jeszcze fotokomórka i ogranicznik siły napedu bramy.
    W moim rozwiązaniu jest dodatkowe automatyczne zatrzymanie po częściowym otwarciu bramy.
  • #8
    Janusz_kk
    Level 32  
    koczis_ws wrote:
    , ale ja uważam, że BASCOM jest dla ludzi. Do C podchodziłem kilka razy ale nie mogłem sie przemóc.

    Ja się na nim (baskomie) przewiozłem jakiś czas temu jak jeszcze '51 były popularne, program chodził albo nie w zależności od np procedury obsługi wyświetlacza lcd gdzie była wywoływana, koszmar.
    Może teraz jest lepiej ale widać po twoim programie jak słabą optymalizację ma baskom, w C pewnie by ci połowa pamięci została.
  • #9
    koczis_ws
    Level 27  
    Janusz_kk wrote:
    w C pewnie by ci połowa pamięci została.


    No nie wiem, Może się przemogę i spróbuję napisać to w C, ot tak z ciekawości :)
    A faktem jest, że coś w BASCOmie jest, przynajmniej w tej wersji której używam. Np. czasem nie przyjmuje aliasa tylko trzeba wpisywać numer portu i to widać w tym powyższym programie.
  • #10
    Janusz_kk
    Level 32  
    Będę miał chwilę to Ci to przepiszę tak z czystej ciekawości ile to zajmie.
  • #12
    SylwekK
    Level 31  
    koczis_ws wrote:
    Oooo, to byłbym wdzięczny i może by mnie to zdpingowało do nauki C :)

    C jest dziwny i zakrzaczony! Tak mi się wydawało za czasów bascoma, w którym to "wszystko" można było zrobić ...się wydawało. Gdy bliżej poznałem C dopiero wtedy mi się oczy otworzyły - duuużo mniejszy kod wynikowy, duuużo szybszy i choćby taki drobiazg jak litania działań matematycznych w jednej linii bez rozbijania na drobne to tylko część zalet :)
  • #13
    koczis_ws
    Level 27  
    Zabrałem się do nauki C i walnąłem w ścianę :(
    Zainstalowałem WinAVR i d..a. Jak to się uruchamia? Nie wiem czy ja jestem taki ciemny czy to jest jakieś nieporozumienie.
    Niestety zawiłości składni C to jedno ale środowisko programistyczne to już jakiś kosmos.
  • #14
    koczis_ws
    Level 27  
    Zachęcony przez Kolegów zabrałem się za C. Nawet coś tam mi wychodzi, ale żeby przerobić ten program z Bascomu na C muszę opanować więcej wiedzy.
    Na początek mam pytanie , jak uruchomić opóźnienie (Delay) parametrycznie a nie przez podanie konkretnej wartośći jak w funkcji " _delay_ms(wartość_opóźnienia_w_ms);" ?
    Próbowałem oszukać tworząc pętlę w funkcji:

    void Opoznij(long Czas)
    {
    while(Czas>0)
    {
    Czas=Czas-1;
    _delay_ms(1);
    }
    }
    ale to nie działa :(
    Funkcja "for(i=0;i<Czas;i++)" też nie działa
  • #15
    Pavlik71
    Level 15  
    Witam.

    Nie pomogę, ale się pochwalę :)
    Gdy na rynku nie było jeszcze sterowników bram przesuwnych (albo były drogie) zrobiliśmy z bratem własny oparty na ATTiny26 - dla siebie. Później robiliśmy sterowniki i bramy dla znajomych. Po paru latach zrobiliśmy "profesjonalny" sterownik na ATmega16 (układ na zapas - dla dodatkowych funkcji, gdyby ktoś coś chciał dołożyć).
    Płytka jest zaprojektowana dla silników 1 i 3 trzech fazowych
    Powstało takie coś.
    Funkcja furtki w napędzie do bramy FORCE 760

    Płytka na dole jest już zmodyfikowana i oryginalnie nie posiada tych przewodów.
    Do złącz po lewej stronie dołącza się:
    - krańcówkę otwarcia
    - krańcówkę zamknięcia
    - bariera optyczna
    - przycisk w domu
    - przycisk przy bramie w słupku
    - sygnał z pilota
    - lampa/ kogut sygnalizujący ruch bramy

    Dalej na prawo są układy transoptorów, aby oddzielić długie linie od procesora.
    Nad transoptorami są dwa opory, które dostarczają sygnał do procesora, że na dwóch pozostałych fazach jest napięcie(bo trzecia faza zasila całą płytkę).
    Następnie na prawo jest procesor, a dalej jest:
    5 kondensatorów, 10 diod, 5 kondensatorów, 5 oporników, 5 diod i na koniec 5 tranzystorów sterującymi przekaźnikami (przekaźniki to te białe).
    Zadaniem tej sekcji jest wyłączenie się przekaźników, gdyby procesor się zawiesi.
    Działa to tak, że kiedy brama jest otwierana, a tym bardziej zamykana, a procesor by się "zwiesił", to ruch bramy nadal by był kontynuowany.
    Sygnały do tej sekcji z procesora są przebiegiem prostokątnym dużej częstotliwości, gdy ich zabraknie - przekaźniki puszczają.
    Bariera optyczna jest zrealizowana na podczerwieni 36 kHz i jest impulsowana częstotliwością 10 Hz, przez co można wykryć nieprawidłowości w jej działaniu, i nie da się jej oszukać przez podświetlenie innymi źródłami podczerwieni (np. piloty do telewizorów).
    5 przekaźników służy do uruchomienia silnika. Jeden włącza 1 fazę (tą która zasila cały układ), a 4 pozostałe zamieniają fazę, chyba, że stosujemy silnik 1-fazowy to zamienia uzwojenia, albo kondensatora.
    W pracy zawsze biorą 3 przekaźniki.
    Powyżej przekaźników jest trafo zasilające płytkę sterownika. Obok powinny być widoczne 3 gniazda bezpieczników (2 nie wlutowane), które "wystrzelą", gdy na jedna z faz coś było by nie tak. Na lewo od trafa są 2 stabilizatory 12 i 5 wolt, na potrzeby płytki i przekaźników.

    Złącza po prawej stronie są złączami o napięciu sieci. Górne złącze jest zasilaniem 3 fazowym + N lub 1 fazowego + N, a dolne dla silnika 3 - fazowego lub 1 fazowego.

    Program napisany w BASCOM :)

    I czego nie zrobiłem w programie:
    Zabezpieczenia przed sklejeniem się styków przekaźników.
    Wyobraźmy sobie, że brama się zamyka, a coś w bramie stoi (człowiek, pies, samochód!). Cała elektronika działa prawidłowo, ale styki przekaźników się zespawały. Co wtedy?
    Po programowym zatrzymaniu bramy, powinno nastąpić chwilowa zmiana kierunku (tak myślę ok 0,3 sek), wtedy nastąpiło by zwarcie faz na przekaźnikach i "wystrzelenie" bezpieczników.

    To wszystko. Pozdrawiam.
  • #16
    koczis_ws
    Level 27  
    Pavlik71 wrote:
    Nie pomogę, ale się pochwalę

    Chwalipięta :D Szkoda, że nie pomożesz w C bo widzę BASCOM (mój ulubiony nadal). Ale funkcji furtki u Ciebie nie widzę:)
    Chcę, naprawdę chcę się tego p.......o C nauczyć, ale jak na razie to porażka. Nic poważniejszego nie działa.
    Prosty przykład, zapis i odczyt EEPROM:
    Funkcje read i write pobrałem z tego: https://www.elektroda.pl/rtvforum/topic248625.html

    //Funkcja sprawdzenia danych wejściowych
    void Ustawienia (void)
    {
    Otwarcie=EEPROM_read((uint8_t*)1);
    Zamkniecie=EEPROM_read((uint8_t*)2);
    if(Otwarcie=0 | Otwarcie>72)
    {
    Otwarcie=20;
    EEPROM_write((uint8_t*)1, Otwarcie);
    }
    _delay_ms(10);
    if(Zamkniecie=0 | Zamkniecie>250)
    {
    Zamkniecie=60;
    EEPROM_write((uint8_t*)2, Zamkniecie);
    }
    }

    Sypie błądami przy kompilacji. Jak zaremuję odczyt to błędów już nie ma, ale nie zapisuje danych do EEPROM.
    Jeśli zrezygnuję z funkcji If to zapisuje podane wartości.
    ???????????????
    I jeszcze inne kwiatki. Nie wiem jak Wam to się udaje i tak chwalicie to C ?
    BASCOM może mniej wydajny ale prosty i wszystko mi działa jak trzeba.
  • #17
    Janusz_kk
    Level 32  
    koczis_ws wrote:
    I jeszcze inne kwiatki. Nie wiem jak Wam to się udaje i tak chwalicie to C ?
    BASCOM może mniej wydajny ale prosty i wszystko mi działa jak trzeba.

    Na razie nie mam czasu, ale namieszam ci w głowie :) spróbuj w arduino, avrstudio umie w nim robić projekty, trzeba zrobić po prostu nowy, albo zainstalować arduino.
    Zalety ma takie że to jakby połączenie C a dokładniej C++ czyli języka i prostoty dostępu do I/O jak w bascomie.
    Tu masz funkcje https://www.arduino.cc/reference/en/
    Poza tym w sieci jest kupa przykładów.
  • #18
    koczis_ws
    Level 27  
    Akurat I/O w C opanowałem, ale inne rzeczy to jak narazie kosmos.
    Teraz utknąłem na czytaniu z EEPROM. Funkcję ściągnąłem gdzie podobno działa, ale u mnie przy kompilacji pojawia się błąd: "conflicting types for 'EEPROM_read' ". Natomiast EEPROM_write działa dobrze.
  • #19
    SylwekK
    Level 31  
    koczis_ws wrote:
    Sypie błądami przy kompilacji. Jak zaremuję odczyt to błędów już nie ma, ale nie zapisuje danych do EEPROM.

    Z eepromu fajnie korzysta się w połączeniu ze strukturami, ale to dla większej ilości danych. Jak potrzeba 2-3 zmienne to robię coś takiego:

    Code: c
    Log in, to see the code

    Można te zmienne w tablicy umieścić i też będzie grało.
    Masz tu wszystko co niezbędne aby zapamiętać kilka x-ów.
    Nie musisz tu ustalać i pamiętać żadnych adresów (tak jak to było w bascomie) - kompilator sam się tym zajmie.
    Pamiętaj, że wskazane jest włączyć BOD jeśli korzystasz z EEPROM i zapewniam, że nie będzie problemu ze znikającymi danymi.
    Powodzenia ;)
  • #20
    koczis_ws
    Level 27  
    Dzięki SylwekK, przyda się. Ale w międzyczasie nie poddałem się i zacząłem głębić temat na różnych forach i znalazłem błąd. Te ściągnięte funkcje, o których pisałem wyżej okazały się błędne a raczej ta EEPROM_read bo EEPROM_write działało. Ale dopisałem ponownie w nagłówku #include <avr/eeprom.h> , sprawdziłem wywołanie i .... olśnienie. Cały czas zapominam, że małe/wielkie litery mają znaczenie (zaszłości). Jak wpisałem eeprom_read_byte zamiast EEPROM_read_byte to wwszystko zaczęło hulać :)
    No to idę dalej z tym programem do furtki w C++.
  • #21
    mpier
    Level 26  
    Witam,
    czy Ty zainstalowałeś to WinAVR sprzed piętnastu lat? Nie próbowałeś czegokolwiek aktualnego?

    Pomysł ciekawy. Co się stanie, jeśli ktoś zamknie bramę ręcznie chwilę po otwarciu furtki? Odliczy się czas na przejście i brama zostanie otwarta? Podobnie jeśli ktoś bramę otworzy do końca, to ona się nagle zamknie.

    Program trudny nie będzie, jeśli wcześniej ułożysz algorytm, tak żebyś nie musiał wymyślać programu w trakcie pisania w C.

    Pozdrawiam.
  • #22
    koczis_ws
    Level 27  
    Najpierw zainstalowałem WinAVR ale szybko go odinstalowałem. Teraz używam AVR Studio 5.1.
    Tego pierwszego zabezpieczenia nie zrobiłem bo w BASCOM brakło pamięci. To drugie jest, bo po wciśnięciu przycisku FURTKA sprawdzane jest czy brama jest zamknięta i czy nie jest w ruchu.
    Teraz wymordowałem program w C++ i on zajął trochę mniej miejsca ale szału nie ma (990 bajtów C++ vs 1024 BASCOM).
    Dzięki za sugestię bo w szale nauki C i walki z programem zapomniałem o tym. To faktycznie jest proste ale bez przerwania timera nie będzie działać, a tego jeszcze nie opanowałem w C i nie wiem czy wystarczy pamięci.
    Narazie publikuję program w C++:
    Code: c
    Log in, to see the code

    Zmienił sie też trochę schemat ideowy.

    Funkcja furtki w napędzie do bramy FORCE 760

    PS.
    Zaktualizowałem program. Teraz jest zabezpieczenie przed zakłóceniem cyklu furtki. Jeśli ktoś uruchomi bramę w trakcie ruchu lub oczekiwania to cykl się kończy.
  • #23
    mpier
    Level 26  
    Można bez przerwań, ale po co? 990 bajtów to jest dużo. Twój program ma trzy zadania: nic nie robić, otworzyć furtkę, odczytać i zaprogramować czas otwarcia. Teraz masz sporo zbędnego kodu typu "delay" (czekaj, opóźnij), który do niczego nie służy, a miejsce zajmuje.

    Czy przekaźnik zdąży zadziałać (lampa ostrzegawcza zgaśnie), jeśli podczas otwierania furtki (w trakcie ruchu) brama zostanie zatrzymana i od razu włączone zostanie zamykanie albo otwieranie? Może dałoby się odczytać stan z ONE?
  • #24
    koczis_ws
    Level 27  
    Można bez przerwań i tak zrobiłem. Delay jest w wielu miejscach niezbędne, np. przerwy między błyskami, opóźnienia przy obsłudze EEPROM i inne. Tak jak napisałem w pierwszym poście, programowanie czasów zajmuje większą część kodu, ake to jest spowodowane wygodą i elegancją tej operacji. Przekaźnik zdąży ale trzeba stan jego odczytywać z opóźnieniem ze względu na oscylacje, które wcześniej opisałem. W tym napędzie zasilanie lampy jest ciągłe, generator błysków jest w lampie. Jeśli w trakcie ruchu albo oczekiwania ktoś wysteruje bramę to cykl furtki się kończy i sterowanie napędu jest przekazane do człowieka. W dołączonym programie jeszcze tego nie ma w całości ale podmienię po dopracowaniu. ONE to wejście, a ja nim steruję wyjściem mikrokontrolera. Pozatym sterowanie bramą jest dwojakie: sekwencyjne przez ONE i trzyprzyciskowe OTWÓRZ - STOP - ZAMKNIJ i oba te sposoby są tu używane, więc za dużo było by tego czytania. Ale stan lampy informuje o ruchu / zatrzymaniu bramy.

    PS.
    W poście #22 jest aktualny program z zabezpieczeniami.
  • #25
    Janusz_kk
    Level 32  
    mpier wrote:
    Teraz masz sporo zbędnego kodu typu "delay" (czekaj, opóźnij), który do niczego nie służy, a miejsce zajmuje.

    Zdziwił byś się, kompilator bardzo dobrze optymalizuje te delay-e, nie ma powtórzeń kodu, każdy delay to zładowanie dwóch rejestrów i call do delaya.
    Po prostu logika programu zajmuje tyle kodu, rozwiązaniem jest większy procek, w attiny wybór jest bogaty.
  • #26
    koczis_ws
    Level 27  
    mpier wrote:
    "delay" (czekaj, opóźnij), który do niczego nie służy, a miejsce zajmuje

    Oj służy, służy. Bez tego program by nie działał.
    Ostateczna wersja zajmuje 1022 bajty. Być może dało by się mniej stosując jakieć optymalizacje, albo wprowadzić jakieś siermiężne programowanie czasów wymagające wiedzy i umiejętności, ale po co? Co zrobić z pozostałą pamięcią? Przenieść do innego sterownika, a może zapakować do słoików i zapasteryzować :D . Oszczędzanie pamięci jest potrzebne w komputerach, smarfonach czy tabletach żeby umieścić więcej aplikacji i zapisać więcej danych. Mikrokontroler wykonuje tylko jedno zadanie i nie potrzebuje więcej pamięci niż ta, która zostałe wykorzystana.
    Program w BASCOM zajął 1024 bajty, ale ten w C ma trochę więcej funkcjonalności. Taki o podobnej funkcjonalności zajął 900 bajtów a więc szału nie ma i nie połowę jak ktoś napisał.
  • #27
    Janusz_kk
    Level 32  
    koczis_ws wrote:
    aki o podobnej funkcjonalności zajął 900 bajtów a więc szału nie ma i nie połowę jak ktoś napisał.

    Po prostu się od tamtego czas gdy w nim pisałem mocno poprawił. Co nie zmienia faktu że inny kompilator (C) jeszcze dał radę bardziej zoptymalizowac, a nie tyle kompilator co moje funkcje które ci wstawiłem, bez nich jak ci pisałem program ten podstawowy zajmował 998bajtów.
  • #29
    koczis_ws
    Level 27  
    SylwekK wrote:
    Tak się zastanawiam, aje w tym wypadku maszyna stanów by się chyba najlepiej sprawdziła pod względem ekonomicznym - łatwo zapanować nad biegiem programu :)

    Mógłbyś rozwinąć myśl?