Nie umiem wróżyć z fusów

Próbowałem wczoraj ugryźć wreszcie dekodowanie RC5 z użyciem timera w ATtiny2313. Miałem jednak spore problemy z wyliczeniem czasów, przede wszystkim dlatego, że wcześniej pracowałem na AT90S2313, który przyzwyczaił mnie do tego, że domyślnie taktowany jest przez zewnętrzny oscylator. Z nowymi AVR-ami rzecz ma się nieco inaczej, bowiem chociażby w takim ATtiny2313 mamy do wyboru całkiem sporo wewnętrznych oscylatorów RC. Wyboru dokonuje się przez młodsze fuse bity (Fuse Low Byte). W szczególności interesują nas bity CKSEL3..0 (Select Clock source) i bit CKDIV8 (Divide clock by 8). W dokumentacji jasno stoi, iż domyślnie bity CKSEL3..0 ustawione są na 0100 tak, że pracuje wewnętrzny oscylator 8MHz. CKDIV8 jest zaś ustawiony na 0, byłem więc przekonany, że dzielnik zegara systemowego jest wyłączony.

Niestety, ciągle coś mi nie grało — wartości w rejestrze timera znacząco odbiegały od moich przewidywań. W końcu postanowiłem uruchomić USART, żeby móc na bieżąco wysyłać mierzone czasy (dotąd kilka diod informowało mnie, czy czasy mieszczą się w zadanych granicach). Po uruchomieniu GtkTerma, okazało się, że transmisja przebiega poprawnie ale nie przy 9600bps, jak ustawiłem, lecz przy 1200bps. Odczytałem więc fusy

$ uisp -dprog=stk200 -dlpt=/dev/parport0 --rd_fuses

otrzymując

Fuse Low Byte      = 0x64

Wyglądało na to, że najstarszy bit (CKDIV8) jest wyzerowany. Więc skąd ośmiokrotnie niższe taktowanie? Po głębszej analizie dokumentacji i chwili googlowania w końcu zrozumiałem — wartość 0 oznacza programmed, czyli ustawienie fuse bita.

Poprawiłem więc F_CPU w Makefile z 8000000 na 1000000 i… transmisja oszalała. Rzut oka na tabelę błędów USART (jakiś dobry człowiek zamieścił ją w dokumentacji) — aha, przy takim taktowaniu dla 9600bps mamy błąd zegara -7,0%. Zmieniłem więc bitrate na 4800bps i teraz wszystko zdaje się być w porządku.

Komentarzy: 1 do „Nie umiem wróżyć z fusów“

  1. cactus komentuje:

    W nastepnych wersjach kontrolerlab ma byc mozliwosc wygodnego wyboru fusow
    z konkretnym opisem.

    Teraz pracuje na wersji 0.8.0-beta1 :)

    Pozdrawiam
    Bartłomiej Zimoń

Dodawanie komentarzy

XHTML: Możesz używać tagów: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">