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.

[Bascom 2.0.5.0][ATMEGA8] Zegar RTC-zmienna textowa TIME$ nie ulega zmianie

bipolunipol 03 Sep 2012 00:52 1710 4
  • #1
    bipolunipol
    Level 19  
    Witam.
    Stworzyłem na mikrokontrolerze ATMEGA8 zegar RTC. Do procesora został podpięty kwarc zegarkowy - timer2 pracuje w trybie asynchronicznym.
    Program powstał z wykorzystaniem instrukcji BASCOMOWEJ Config Clock = soft:

    Kod:

    Code: basic4gl
    Log in, to see the code




    Zauważyłem, że zmienna Time$ się nie zmienia, w przeciwieństwie do zmiennych _sec,
    _min , _hour
    które są odpowiednio inkrementowane (np. zmienna sec zwiększa prawidłowo swą wartość co sekundę). Dlaczego tak jest - przecież są ze sobą powiązane?
    Zmiana ręczna tych zmiennych bajtowych (_sec, _min i _hour) nie powoduje także zmiany czasu w time$ i na odwrót - ustawiam zmienną time np. na "00:01:03" - a w zmiennych bajtowych wartości nie ulegają zmianie. Dlaczego?

    Bowiem według pomocy BASCOM:
    Quote:

    "Jeśli w programie użyto instrukcji CONFIG CLOCK, kompilator automatycznie generuje specjalne zmienne nazwane: _sec , _min , _hour, _day , _month , _year.
    W ten sam sposób są definiowane specjalne zmienne TIME$ oraz DATE$. Jest w nich pamiętany zliczany czas i data, w postaci tekstowej. Zobacz opis TIME$ oraz DATE$ by poznać więcej szczegółów.
    Zmienne _sec, _min i inne definiowane przez tą instrukcje, mogą być odczytywane i modyfikowane przez program. Oczywiście zmiana jednej z nich powoduje także zmianę zmiennych specjalnych DATE$ i TIME$.

    (c) Zbigniew Gibek, 2002-2005 (c) MCS Electronics, 1999-2005"
  • #2
    cyberdar
    Level 31  
    Witam

    Przedstawiony zapis powoduje ustawienie zegara i "datownika" na wartości w tejże instrukcji czyli spowodowałeś, że zegar został ustawiony na 14:33:00 a datę na 01/01/2012. Jeśli chciałbyś widzieć zmiany używając tej dyrektywy to napisz:

    Code:

    Lcd Date$ ; "  " ; Time$                                 


    lub

    Code:

    Lcd _hour ; _min ; _sec                                 


    przy czym nie jestem teraz pewien ale, żeby czas był wyświetlany prawidłowo to należałoby go sformatować do odpowiedniej postaci.

    --
    pozdrawiam
  • #3
    bipolunipol
    Level 19  
    cyberdar wrote:
    lub

    Kod:

    Lcd _hour ; _min ; _sec


    Tylko te zmienne mają mimo nastawienia wcześniejszej wartości zegara na 14:33:00 i daty na 01/01/2012 wartość 0, 0 i 0. W trakcie pracy zegara zmieniają już swą wartość, jednak tekstowa wcześniej ustawiona się nie zmienia.
  • #5
    bipolunipol
    Level 19  
    piotrva wrote:
    Sprawdzałeś na starszej wersji BASCOM'a?

    Nie, sprawdzę.
    Ogólnie Bascomowe kompilatory zawierają dużo błędów... (wynika to z moich obserwacji).