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:
gdzie wartość preskalera można dobrać z poniższej tabeli:
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:
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!
Jak to wyjaśnić i co jest nie tak ze wzorem z dokumentacji? Dlaczego wyszło 32 skoro chyba powinno wyjść 8?
Według dokumentacji ATmega328p wzór wygląda tak:
gdzie wartość preskalera można dobrać z poniższej tabeli:
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:
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!
Jak to wyjaśnić i co jest nie tak ze wzorem z dokumentacji? Dlaczego wyszło 32 skoro chyba powinno wyjść 8?