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

[ATmega8L] - Ustawienie fusebitów dla 32.768

Milek79 26 Mar 2013 15:04 1305 4
  • #1 26 Mar 2013 15:04
    Milek79
    Poziom 14  

    Witam.
    Robię zegar na ATmedze8L. Chciałbym go taktować kwarcem zegarkowym (tak, nie chcę podłączać pod timera tylko chcę taktować tym cały układ). Szukałem ale nie znalazłem nigdzie jednoznacznych opisów dla takiego kwarca. W nocie jest napisane:

    Cytat:
    To use a 32.768kHz watch crystal as the clock source for the device, the Low-frequency Crystal
    Oscillator must be selected by setting the CKSEL Fuses to “1001”

    Dobrze rozumuję że mam ustawić w ISP Programmer:
    CKSEL3=1
    CKSEL2=0
    CKSEL1=0
    CKSEL0=1
    ?
    Wyczytałem też że mam załączyć CKOPT(tylko mam dać 1 czy 0?).
    I jeszcze nigdzie nie wyczytałem co mam ustawić w fusebitach SUT..
    No więc jak to wszystko poustawiać, bo nie chcę sobie zblokować układu

    0 4
  • Adex Agregaty
  • #2 26 Mar 2013 18:42
    emarcus
    Poziom 34  

    Milek79 napisał:
    Witam.
    Robię zegar na ATmedze8L. Chciałbym go taktować kwarcem zegarkowym (tak, nie chcę podłączać pod timera tylko chcę taktować tym cały układ). Szukałem ale nie znalazłem nigdzie jednoznacznych opisów dla takiego kwarca. W nocie jest napisane:
    Cytat:
    To use a 32.768kHz watch crystal as the clock source for the device, the Low-frequency Crystal
    Oscillator must be selected by setting the CKSEL Fuses to “1001”

    Dobrze rozumuję że mam ustawić w ISP Programmer:
    CKSEL3=1
    CKSEL2=0
    CKSEL1=0
    CKSEL0=1
    ?
    Wyczytałem też że mam załączyć CKOPT(tylko mam dać 1 czy 0?).
    I jeszcze nigdzie nie wyczytałem co mam ustawić w fusebitach SUT..
    No więc jak to wszystko poustawiać, bo nie chcę sobie zblokować układu


    Po co ci te kombinacje z tak niskim oscylatorem?
    W takich experymentach "zegarkowych" normalnie processor 'taktuje sie' z wewnetrznego oscylatora RC (8 MHz), a pod piny TOSC1 oraz TOSC2 podpina się ten kwarc zegarkowy (32.768 kHz), który będzie taktował asynchronicznie Timer2 w trybie normal z prescalerem= 128, co da ci impuls dokładnie co 1 sekundę.
    Jeżeli wszystko taktujesz 32 KHz to dosłownie wszystko jest bardzo wolne, włącznie z programowaniem (pierwsze będzie troche szybciej, ale może byc problem z następnymi poprawkami kodu).

    Niemniej jednak odpowiadając na pytaje:
    Wszystkie fusebity niezaprogramowane oznacza sie 1, zaprogramowane są 0.
    Należy pamiętac że niektóre są fabrycznie zaprogramowane.
    SUT - znaczy 'Start-Up-Time' - przymuje sie go zwykle ten najdłuższy (default); tu nie potrzebujesz nic zmieniac.
    CKOPT -normalnie nie jest zaprogramowany (1), programując go, załączasz wbudowane capacitory 36pF do pracy z kwarcem, wtedy ten kwarc zegarkowy podłączasz bez dodatkowych zewnętrznych pokaznych na Fig.11.
    O fusebitach poczytaj w Datasheet rozdział "Memory Programming" - tam wszystko jest opisane. Trzeba to przeczytac kilka razy; - za każdym razem coś więcej zostaje w pamięci.

    e marcus

    0
  • Adex Agregaty
  • #3 26 Mar 2013 18:53
    Milek79
    Poziom 14  

    emarcus napisał:
    Po co ci te kombinacje z tak niskim oscylatorem?

    Chcę uzyskać jak najmniejsze zużycie prądu - będzie to zegarek z zasilaniem bateryjnym. Co do szybkości nie mam wygórowanych wymagań, wystarczy obsługa LCD(chociaż jak to teraz przemyślałem to mam co do tego wątpliwości :/ ) Chociaż może lepiej dać wewnętrzny 1MHz, tylko nie wiem co zużyje mniej prądu?

    0
  • Pomocny post
    #4 26 Mar 2013 19:27
    dondu
    Moderator Mikrokontrolery Projektowanie

    Specyfika tego mikrokontrolera, zmusza Ciebie do zastosowania Timera2 w trybie asynchronicznym, a mikrokontroler powinien być taktowany wewnętrznym generatorem RC, czyli tak jak radzi kol. wyżej. Przy takim rozwiązaniu korzystać możesz ze specjalnego trybu oszczędzania energii: POWER SAVE.

    Niestety nie da się w tym mikrokontrolerze taktować kwarcem 32kHz jednocześnie timer2 (w trybie asynchronicznym) oraz mikrokontroler, ponieważ:

    Datasheet napisał:
    The Asynchronous Timer/Counter uses the same XTAL pins as the CPU main clock but requires a CPU main clock frequency of more than four times the Oscillator frequency.

    czyli zegar mikrokontrolera musi być co najmniej 4x szybszy. Szkoda, bo to byłoby najlepsze rozwiązanie pod kątem oszczędzania energii.

    Dlaczego?

    Ponieważ rozpatrywanie oszczędzania energii tylko i wyłącznie z punktu widzenia mikrokontrolera, prowadzi do błędnych wniosków. W takim przypadku należy rozpatrywać układ (mikrokontroler + zasilanie) jako jedną nierozerwalną, wzajemnie zależną całość.

    Ten mikrokontroler w stanie aktywnym pobiera działając z wewnętrznego generatora RC (5V) :
    - 11mA dla 8MHz
    - 2,5mA dla 1MHz

    Nagle więc okazuje się, że lepiej jest zwolnić mikrokontroler z 8MHz do 1MHz, by nie zetknąć się z sytuacją, iż bateria (pod koniec okresu swojego żywota) nie "trzyma napięcia" z powodu pobierania 4,5 krotnie większego prądu niż mógłby być przy 1MHz, co powoduje w konsekwencji reset mikrokontrolera.

    Testowanie i kombinowanie jest oczywiście wskazane :)

    Więcej na ten temat w trzyczęściowym artykule:
    http://mikrokontrolery.blogspot.com/2011/01/bateria-zasila-mikrokontroler-czesc-1.html


    Reasumując ustaw bity konfiguracyjne następująco:
    low: E1
    high: C9
    co ustawi wewnętrzny generator 1MHz oraz włączoną opcję CKOPT.

    0
  • #5 26 Mar 2013 19:49
    Milek79
    Poziom 14  

    Dzięki dondu, uświadomiłeś mi że nie mogę korzystać jednocześnie z timera2 i kwarcu zegarkowego taktującego cały układ. 1MHz już ustawiony od dawna. Czytałem też już kiedyś podany przez Ciebie artykuł (jak i duzo innych materiałów z bloga). Podłączyłem kwarc zegarkowy pod TOSC1 i z timerem w trybie asynchronicznym działa :)

    0