Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[Bascom][ATMega32A] - Zegar - instrukcja Clock

12 Cze 2016 19:03 1341 7
  • Poziom 17  
    Napisałem kod według Help-a. Zegar się wyświetla, kompilator nie zgłasza błędów, ale nie chodzi. W pomocy jest podane kilka procesorów z którymi ta instrukcja jest aktywna, jest tam też Mega32(3). Co oznacza te 3 w nawiasie to nie wiem. Jasno jest napisane że Timer uC musi posiadać tryb asynchroniczny. Czy ATMega32A go ma? W pdf-ie nie udało mi się nic na ten temat doczytać.
    Gdy w Bascomie włączyłem symulacje to ten zegar pracował.
    Oto cały kod tego zegara:
    Kod: vbnet
    Zaloguj się, aby zobaczyć kod

    Czy muszę dla tego procka sam napisać ten zegar?
    Gdzie mam błąd?
    Może gdzieś jest gotowy kod.
  • Użytkownik usunął konto  
  • Użytkownik usunął konto  
  • Poziom 17  
    @niveasoft
    Coś tam właśnie pisało o kwarcu zegarkowym. Ale domyślam się że chodziło o wersję ze sprzętowym RTC, bo taka opcja też istnieje.
    Zresztą jeżeli mam zamontowany kwarc ponad 11MHz to ten zegarek, w takim razie, powinien wariować a nie stać w miejscu. Dlatego podałem cały kod programu zegarka.

    Nie jestem na etapie projektowania sprzętu, lecz ten sprzęt już jest (kilkanaście szt.) i niewykonalna jest zmiana, mogę tylko programowo. I to w dodatku (w tym przypadku i sytuacji) tylko w Bascomie. Żeby było "weselej" to najpierw się robiło a później myślało (jak to bywa na budowie "sypko..sypko bo to już ma być"). Ale nie w tym rzecz. Jest tak jak jest, tak jak w temacie, trzeba z tego jakoś wybrnąć. Wskazane jest zaimplementować rejestr zdarzeń w systemie i jeszcze skoordynować w czasie sterowanie z innymi niezależnymi i obcymi obiektami.
    Dlatego ten zegar, gdzie mogę załatwić to wszystko kilkoma instrukcjami, jest prawie idealny. Ale to tak na uboczu jako info o co tu chodzi.

    Jak uruchomić ten zegarek używając Timer1 to się nie domyślam. Podaj coś na ten temat.
    Napisać zegarek można, ale to wymaga sporo czasu (a tego nie mam) z kalendarzem. Dlatego pisałem czy ktoś ma, lub wie gdzie są, jakieś niezależne kody na zegar w Bascomie.
  • Pomocny post
    Użytkownik usunął konto  
  • Poziom 17  
    Nie obrażaj się tak od razu. Gdybym miał pełną znajomość zagadnienia to bym nie zakładał tego tematu.
    Tak naprawdę to przeczytałem co się da.
    Lecz czytając różne instrukcję w projekcie budowlanym, a później uruchamiając to urządzenie to różnie bywa. W praktyce projektanci sterowań w ten sposób dość często wstawiają jakieś urządzenie które tylko w części, a nieraz w ogóle, nie pasuje do tego czemu ma służyć. Projektant ma mało czasu, więc wstawia to co mu Google wskazało na 1-szej stronie, a o resztę niech się martwi wykonawca. Inwestor mówi: zaprojektuj własne bo z tych projektantów już więcej nie wyciśniemy. Ale to jest praktyka, a o tym tu nie dyskutujemy, tylko o konkretnym problemie technicznym. Że piszę prawdę to nie powód do obrażania się.

    Przepraszam.

    Albo nie zauważyłem kodu który napisałeś, albo za szybko zacząłem pisać.

    Zegar z kodem który podałeś pracuje. Musiałem zmienić w linii:
    Config Timer1 parametr Compare, zamiast podkreślenia ma być spacja.
    Kod: vbnet
    Zaloguj się, aby zobaczyć kod

    Teraz można z nim poeksperymentować.
    Bardzo dziękuję za kod.
  • Użytkownik usunął konto  
  • Poziom 17  
    Dyskusja schodzi z tematu więc założyłem nowy temat do wygadania się:
    https://www.elektroda.pl/rtvforum/viewtopic.php?t=3214825&highlight=

    A teraz jeszcze na temat.
    Zegar wskazuje czas prawidłowo ale nie przerzuca daty przy zmianie doby czyli po minięciu godz. 23:59:59
    Funkcja Secofday() przybiera o godz. 00:00:00 wartość 0. Chciałem więc to wykorzystać do zwiększenia zmiennej _day lecz nic z tego. Można do niej przypisać jawnie jakąś wartość. Ale instrukcja if Secofday()=0 then ... nie działa.
    Wartość bieżąca Secofday() wyświetla się prawidłowo na LCD lecz próba (dla testu) przypisania jej pod jakąś zmienną np. B nie udaje się
    B = secofday()
    na wyświetlaczu pojawiają się jakieś przypadkowe liczby. Delaracja B jako Long kompilator przyjmuje, natomiast gdy próbuje zadeklarować B jako String pisze że to niewłaściwy typ. Przy próbie instrukcji
    B = Val(secofday())
    też oczywiście błąd.

    Zdurniałem już całkiem, nie wiem o co tu chodzi.
    -----------------------

    Wreszcie ten nieszczęsny zegarek chodzi. Oto cały kod.
    Kod: vbnet
    Zaloguj się, aby zobaczyć kod

    Dlaczego instrukcja
    If Secofday() = 0 then ...
    działa dopiero 1 minutę po północy chyba nie zostanie już rozszyfrowane. Chyba że ktoś jest bardzo uparty i znajdzie błąd w bibliotece a może gdzie indziej.
    Na razie tak zostawiam bo działa.

    Czy parametr
    Compare1a = 43199 '1s @11MHz/256
    nie ma mieć wartość 43200 bo 11059200/256=43200

    --------------------------
    Do niczego to wszystko.
    Nie odróżnia długości miesięcy, liczy ciurkiem, z 31 przechodzi na 32 a nie na 01 itp.
    Mam wersję Bascoma 1.11.9.5 spróbuję na nowej 2.0.7.5 może jest bardziej uniwersalna.
    --------------------------

    Wszystko w porządku. To nie wina kompilatora tylko kodu. Poprawiłem go i zmieniłem w okienku wyżej na prawidłowy. Chcę dorobić jeszcze zmianę czasu letni/zimowy tylko nie wiem czy teraz czy nieco później.

    Dodałem zmianę czasu letni/zimowy. Poniżej pełny działający kod. Można go wykorzystać bezpośrednio, ale lepiej by było zrobić co nieco porządku ze zmiennymi bo powstało trochę bałaganu który żżera niepotrzebnie pamięć.
    Kod: vbnet
    Zaloguj się, aby zobaczyć kod

    Jeśli komuś nie odpowiada wyświetlanie dnia i miesiąca bez zer na początku to może skorzystać z instrukcji Date a nie z _day i _month.