logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

BASCOM - [ATtiny2313] Sterownik podwórkowy: Poprawa kodu dla lamp i bramy

piterek-23 10 Wrz 2015 17:52 1623 9
  • #1 14986255
    piterek-23
    Poziom 33  
    Hej,

    Potrzebuje pomocy w poprawieniu kodu. Siedzę nad nim już dość długo i nie mogę sobie z nim poradzić-brak umiejętności :(

    Założenia czyli co chcę podłączyć:
    1. wyjścia:
    a) Lampa ogrodowa nr.1
    b) Lampa ogrodowa nr.2
    c) Lampa ogrodowa nr.3
    d) lampy ogrodowe (2szt.) podłączone pod jedno wyjście uC
    e) furtka (impuls 0.5-1s)
    f) brama (impuls 0.5-1s)

    2. wejścia:
    a) czujnik zmierzchu
    b) czujnik ruchu nr.1
    c) czujnik ruchu nr.2
    d) przycisk zwierny nr.1
    e) przycisk zwierny nr.2
    d) krańcówka do skrzydła bramy, abym wiedział czy jest otwarta czy zamknięta

    3. docelowo ma być dodatkowe sterowanie poprzez RS-485 (na razie to zostawiam)

    Jak to ma działać:
    a) gdy zapada zmrok mają się włączyć lampy nr.1,2,3, ale mają się zmieniać co 5 minut czyli w jednym czasie świecą tylko dwie:
    Zapada zmrok świeci nr.1 i nr.3, mija 5 minut zaświeca się nr.1 i nr.2, mija 5 minut zaświeca się nr.2 i nr.3 i tak w kółko aż będzie jasno.
    b) gdy jest ciemno czujnik ruchu nr.1 wykryje ruch maja się zaświecić lampy ogrodowe (dwie sztuki)
    c) gdy jest ciemno czujnik ruchu nr.2 wykryje ruch maja się zaświecić lampy ogrodowe nr.1,2,3
    d) gdy nacisnę przycisk nr.1 maja się zaświecić (nieważne czy jest ciemno czy jasno) lampy ogrodowe (dwie sztuki) gdy nacisnę go drugi raz mają zgasnąć
    e) gdy przytrzymam przycisk nr.1 ma się otworzyć furtka (impuls)
    f) gdy nacisnę przycisk nr.2 maja się zaświecić (nieważne czy jest ciemno czy jasno) lampy ogrodowe nr.1,2,3 gdy nacisnę go drugi raz mają zgasnąć
    g) gdy przytrzymam przycisk nr.2 ma się otworzyć brama (impuls)

    Mój kod:
    Kod: VB.net
    Zaloguj się, aby zobaczyć kod


    Kod praktycznie mi działa, ale:
    -gdy czujnik zmierzchu już działa (lampy świecą i się przełączają) i ja przytrzymam przycisk nr.1 lub nr.2 to przestają chwile świecić-wykorzystuje "Gosub" a w nim "Waitms 500"
    -cały kod jest jakiś chaotyczny i nie wiem jak sobie z nim poradzić

    Może znajdzie się dobra dusz i pomoże mi to wszystko jakoś ogarnąć?
    Ze mnie żaden programista, ale nie ukrywam, że bardzo chciałbym to złożyć w całość.
  • Pomocny post
    #2 14986493
    Konto nie istnieje
    Konto nie istnieje  
  • #3 14986568
    piterek-23
    Poziom 33  
    Kolego @niveasoft bardzo dziękuję za kod-zabieram się za lekturę... Muszę to jakoś "przełożyć" na mój mały rozumek :)

    Bardziej spodziewałem się, że dostanę odpowiedź typu "weź to zostaw i przejdź na C", "eskimoskiego dziś już nikt nie używa"

    HA! Normalnie Św. Mikołaj mnie odwiedził we wrześniu :)
  • #4 14986618
    Konto nie istnieje
    Konto nie istnieje  
  • #5 14988321
    piterek-23
    Poziom 33  
    Kolego @niveasoft jeszcze raz bardzo dziękuję za kod. Wszystko działa bezbłędnie-tak jak chciałem :)

    Pojawia się problem kiedy chcę dorzucić RS485:
    Kod: VB.net
    Zaloguj się, aby zobaczyć kod


    Gdy karta startuje to w terminalu widzę "Karta: 22" czyli kart się uruchomiła.
    Gdy wysyłam do niej "S2211" to ustawia się "Flaga_lampa_1_2_3" i lampy się włączają-tu jest wszystko OK.

    Problem nr.1
    Problemem jest to, że wysyłam "S2212" karta zamiast odpowiadać on/off to wysyła śmieci typu "��5R�" Inne karty (ten sam kod od RS485) w sieci odpowiadają poprawnie.

    Problem nr.2
    Nie wiem jak "wystartować" furtkę i bramę. Ze światłem było proste
    tzn. chcę wysłać do karty "S2231" aby otworzyć bramę
    lub wysłać do karty "S2241" aby otworzyć furtkę
  • Pomocny post
    #6 14988506
    Konto nie istnieje
    Konto nie istnieje  
  • #7 14990012
    piterek-23
    Poziom 33  
    Drugiego kodu jeszcze mój mały rozumek za bardzo nie ogarnia, ale... również pokazuje "śmieci" przy odpowiedzi :(

    Więc zacząłem poszukiwania.
    Pierwsze co poszło pod młotek to płytka stykowa już byłem praktycznie pewny, że tam coś musi być, ale nie...
    Więc wiozłem sobie do serca słowa:
    niveasoft napisał:
    Dosyć odważnie sobie poczynasz na mikrokontrolerze mającym 2kB Flash i 128B SRAM

    Wygrzebałem z szuflady ATmega8, ale też nie...

    Okazuje się, że problemem są czasy RS485, a więc gdy korzystam ze sposobu który kiedyś mi podpowiedziałeś:
    Kod: VB.net
    Zaloguj się, aby zobaczyć kod

    to mam śmieci w odpowiedzi.

    A jak zmienię na:
    Kod: VB.net
    Zaloguj się, aby zobaczyć kod


    To nie mam żadnych śmieci i wszystko jest OK. Nawet ATtiny2313 się wyrabia, daje radę mikrus :)

    Ale jak teraz poprawnie wyliczyć te czasy?
    Jak długo może trwać wysłanie znaków "on", "off"?
    Jak długo może trwać odebranie znaków "S1234"?
    Jak to obliczyć?
  • #8 14990504
    Konto nie istnieje
    Konto nie istnieje  
  • #9 14991182
    piterek-23
    Poziom 33  
    niveasoft napisał:
    Z ta funkcją Config Print nie miałem jeszcze problemów więc problemu szukałbym gdzie indziej.
    Łatwo o błahy błąd. Czy na pewno masz wybrane zewnętrzne taktowanie?

    uC programuję programem MkAvrCalculator i oczywiście wybieram zewnętrzny kwarc.
    Wymieniałem uC i MAX485 na inny egzemplarz. Próbowałem na ATmega8. Wywaliłem z kodu wszystko poza obsługą RS485. Za każdym razem to samo-gdy robię Twoim sposobem to mam w odpowiedzi śmieci, a gdy w programie ustawiam kiedy ma się przełączać odbiór/nadawanie to mam prawidłowe odpowiedzi. Czyli albo gdzieś w kodzie siedzi jakiś chochlik, albo problemem jest mój konwerter USB-RS485.
    niveasoft napisał:
    Może spróbuj tylko na próbę dać jakiś inny rezonator i w kodzie zmień na jego prędkość.

    Jutro popróbuję jeszcze podziałać tak jak mówisz.
    niveasoft napisał:
    Co do dobrania opóźnień czasowych to naucz się czegoś takiego jak robię ja. Na górze, na początku kodu określasz stałe które sa ważne w całym kodzie. Zobacz jak łatwo można zmienić czasy Furtki i Bramy. Są na górze i nie trzeba ich szukać w kodzie

    Chodziło mi o czasy przy przełączaniu odbiór/nadawanie RS485.

    Dziękuję za podpowiedzi :)

    Dodano po 3 [godziny] 29 [minuty]:

    Jednak to będzie wina konwertera-kombinuje, kombinuje i co bym nie zrobił to są śmieci w odpowiedzi.
    Wyszło, że musi być opóźnienie. Zrobiłem Twoim sposobem i dodałem opóźnienie i wszystko działa jak należy.
    tzn.:
    Kod: VB.net
    Zaloguj się, aby zobaczyć kod
REKLAMA