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

[Rozwiązano] [ATmega328p] Częstotliwości taktowania zegara dla TWI (dylemat ze wzorem)

LinuksowyElektronik 11 Kwi 2019 20:26 1071 4
REKLAMA
  • #1 17900348
    LinuksowyElektronik
    Poziom 5  
    Witam ponownie. Chciałbym zapytać o obliczanie częstotliwości taktowania zegara dla interfejsu TWI, ponieważ widzę 2 sprzeczności.

    Według dokumentacji ATmega328p wzór wygląda tak:
    [ATmega328p] Częstotliwości taktowania zegara dla TWI (dylemat ze wzorem)

    gdzie wartość preskalera można dobrać z poniższej tabeli:
    [ATmega328p] Częstotliwości taktowania zegara dla TWI (dylemat ze wzorem)

    Mam jednak problem ze wzorem, ponieważ według strony: http://amforth.sourceforge.net/TG/recipes/TWI...8hOZ0igL4m7kuPbc3JpxyTQWfKGqnMOjQM2qjsIxmtSv4

    wzór wygląda inaczej (4 do potęgi preskaler) jak również można zauważyć, że skądś wziął się dodatkowy "preskaler 0", którego nie ma dla ATmega328p:
    [ATmega328p] Częstotliwości taktowania zegara dla TWI (dylemat ze wzorem)

    No i teraz mam mętlik w głowie, ponieważ nie wiem w jaki sposób wyliczyć wartość potrzebną do wpisania w rejestrze TWBR.

    Moje założenia:
    1. częstotliwość taktowania zegara TWI = 100 kHz
    2. preskaler = 1

    Według wzoru z dokumentacji (po przekształceniach):

    TWBR = ((F_cpu / F_scl) - 16) / (2 * 1) = ((8000000 / 100000) - 16) / (2 * 1) = 32

    a według wzoru ze strony/kalkulatora:

    TWBR = ((F_cpu / F_scl) - 16) / (2 * 4^1) = ((8000000 / 100000) - 16) / (2 * 4) = 8

    i wychodzi na to, że według strony/kalkulatora otrzymam częstotliwość 100 kHz dla: TWBR = 8, preskaler = 1.

    Zweryfikowałem obliczenia w drugim kalkulatorze i tam również wychodzi wartość 8!
    [ATmega328p] Częstotliwości taktowania zegara dla TWI (dylemat ze wzorem)

    Jak to wyjaśnić i co jest nie tak ze wzorem z dokumentacji? Dlaczego wyszło 32 skoro chyba powinno wyjść 8?
  • REKLAMA
  • Pomocny post
    #2 17900401
    krzysiek_krm
    Poziom 40  
    Moim zdaniem, matematycznie rzecz biorąc - nie ma sprzeczności.
    Traktujesz bity z tabelki jak liczbę: 0, 1, 2 lub 3.
    Cztery do potęgi 0, 1, 2, 3 to odpowiednio: 1, 4, 16, 64.
    Po prostu są to nieco inne formy zapisu tego samego.
  • REKLAMA
  • Pomocny post
    #3 17901061
    kaczakat
    Poziom 34  
    LinuksowyElektronik napisał:
    kądś wziął się dodatkowy "preskaler 0",

    W tabelce na stronie kalkulatora masz numery preskalerów, a nie ich wartości. Nieszczęśliwie to nazwali. Jak przyjmiesz wartość prescalera 4 to do TWBR wpisujesz 8, jak przyjmiesz wartość prescalera 1 to do TWBR wpisujesz 32. Iloczyny tych dwóch wartości to w obu przypadkach 32 i podstawione do wzoru dają to samo.
    Pomogłem? Kup mi kawę.
  • REKLAMA
  • #4 17902490
    LinuksowyElektronik
    Poziom 5  
    Już wszystko wyjaśnione. Dzięki krzysiek_krm oraz kaczakat za konkretne odpowiedzi. Po analizie waszych odpowiedzi faktycznie wszystko się zgadza.
  • #5 17902493
    LinuksowyElektronik
    Poziom 5  
    Już wszystko wyjaśnione. Dzięki krzysiek_krm oraz kaczakat za konkretne odpowiedzi. Po analizie waszych odpowiedzi faktycznie wszystko się zgadza.

    Dodano po 1 [minuty]:

    Myślę, że problem został rozwiązany z pomocą użytkowników.
REKLAMA