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

[Bascom] Czy ATMega32A obsługuje tryb asynchroniczny dla instrukcji Clock w Bascom?

RAPELC 12 Cze 2016 19:03 1914 7
  • #1 15738143
    RAPELC
    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: VB.net
    Zaloguj się, aby zobaczyć kod

    Czy muszę dla tego procka sam napisać ten zegar?
    Gdzie mam błąd?
    Może gdzieś jest gotowy kod.
  • #2 15738161
    Konto nie istnieje
    Konto nie istnieje  
  • #3 15738184
    Konto nie istnieje
    Konto nie istnieje  
  • #4 15738687
    RAPELC
    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
    #5 15738731
    Konto nie istnieje
    Konto nie istnieje  
  • #6 15738781
    RAPELC
    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: VB.net
    Zaloguj się, aby zobaczyć kod

    Teraz można z nim poeksperymentować.
    Bardzo dziękuję za kod.
  • #7 15739155
    Konto nie istnieje
    Konto nie istnieje  
  • #8 15739582
    RAPELC
    Poziom 17  
    Dyskusja schodzi z tematu więc założyłem nowy temat do wygadania się:
    https://www.elektroda.pl/rtvforum/topic3214825.html

    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: VB.net
    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: VB.net
    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.
REKLAMA