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

Czy ktoś wie jak w Atmega8535 uruchomić RTC ???

dudus1 14 Maj 2004 23:35 1714 6
  • #1 14 Maj 2004 23:35
    dudus1
    Poziom 10  

    Doczytałem w dokumentacji, że trzeba podłączyc kwarca i odpowiednio skonfigurowac licznik. Mógłby mi ktoś to w miarę dokładnie opisać. Ewetualnie posłać jakąś procedurke w C.
    Z góry dziękuję !

    0 6
  • #2 15 Maj 2004 11:20
    juntom
    Poziom 18  

    Aby korzystac z rtc musisz podlaczyc kwarc 32,768 kHz do pinow PORTC 6 i 7. Ustawiasz timer2 na prace asynchroniczna i dobierajac prescaler na podzial przez 128 otrzymujesz przerwania co 1 s bez koniecznosci ladowania timera przy kazdym przerwaniu.
    Ponizej przedstawiam fragment kodu dla at90s8535 . Atmega8535 tez powinno dzialac. Sprawdz tylko czy nie zmienily sie nazwy rejestrow.
    pozdr.

    static struct RTC
    { unsigned char sek;
    unsigned char min;
    unsigned char hour;
    } time;

    void timer2init (void) // inicjalizacja licznika-czasomierza T2
    {
    cbi(TIMSK,TOIE2);
    outp (0x08,ASSR); // tryb pracy asynchronicznej
    outp (0x05,TCCR2);
    outp (0x00,TCNT2);
    while (inp(ASSR)&0x07);
    outp (inp(TIMSK)|0x40,TIMSK); // zezwolenie na przerwania
    }

    INTERRUPT (SIG_OVERFLOW2) // przerwanie od timera T2 - zegar RTC
    {
    time[0].sek++;
    time_delay++;
    if (time.sek== 60)
    {
    time.sek=0;
    time.min++;
    }
    if (time.min== 60)
    {
    time.min = 0;
    time.hour++;
    }
    if (time.hour== 24)
    time.hour= 0;
    }

    int main (void)
    {
    ..
    sei();
    disp_time ();
    ...
    }

    0
  • #3 15 Maj 2004 15:00
    dudus1
    Poziom 10  

    Bardzo dziękuję !!
    Pozdrawiam

    0
  • #4 15 Maj 2004 22:51
    dudus1
    Poziom 10  

    Mógłbyś mi jeszcze powiedzieć po co jest ta linika w programie?

    time_delay++;

    0
  • #5 25 Maj 2004 17:06
    juntom
    Poziom 18  

    W zasadzie zmiennej time_delay byc tutaj nie powinno. Wykorzystywalem ja do innych celow w programie. Sorrki ,ze tak pozno odpowiedzialem .

    pozdr.

    0
  • #6 18 Cze 2004 10:48
    JarGol
    Poziom 14  

    Dołączę się do tematu! Nigdy jeszcze nie korzystałem z RTC, a właśnie muszę to zrobić, postanowiłem wykorzystać AT90LS8535... mój problem jest taki, że muszę zrobić układ, który użytkownik będzie mógł zaprogramować tzn. w jakich godzinach i w jakich dniach tygodnia (w cyklu tygodniowym: pon, wt. itd.) uP ma uruchamiać podłączone urządzenia... Pytania:
    1. Czy da się to zrobić wykorzystując wbudowany RTC procesora czy raczej należało by zastosować zewnętrzny....
    2. O ile dobrze zrozumiałem poprzednie posty to wewnętrzny RTC działa w ten sposób, że w zależności od ustawienia preskalera, co określony czas (np. 1 sek.) generuje przerwanie i w procedurze obsługi przerwania zwiększam sobie zmienną np. sekunda=sekunda+1? A co jeśli w międzyczasie obsługuję inne przerwanie? i np. wejście do procedury obsługi przerwań od TIMERA opóźni się np. o 2s, wtedy wartość zmiennej zostanie zwiększona o 2s zbyt późno i po upływie np. 4s zmienna sekunda będzie miała wartość 2?
    Acha, nie programowałem jeszcze w C... moje doświadczenia to głownie ASEMBLER i BASCOM dla '51... dopiero zaczynam działać na AVR'ach... więc jeśli miał by ktoś podobne procedury w BASCOM AVR to będę wdzięczny, również za ewentualne linki stron traktujących o programowaniu AVR'ow w C (tylko raczej od podstaw... bo naprawde jestem w temacie nieco zielony)

    Pozdrawiam JarGol

    0
  • #7 18 Cze 2004 11:44
    juntom
    Poziom 18  

    Z wbudowanym rtc oczywiscie sie da.Wystarczy troszke zmodyfikowac program. np.
    static struct RTC
    { unsigned char sek;
    unsigned char min;
    unsigned char hour;
    } time[8];
    time[0] - czas mierzony
    time[1] - czas alarmu poniedzialek
    ..
    time [8] - czas alarmu niedziela
    itd.
    Co do ewentualnego opoznienia to wystarczy ,ze bedziesz dysponowal odpowiednio duzym stosem i po wejsciu do przerwania wlaczycz globalne przerwania sei.
    co do nauki c polecam www.avrfreaks.net

    0