Używam poniższego kodu do inicjalizacji połączenia z komputerem samochodu (według protokołu kw2000). Używam tam komunikacji USART 10400baud 8n1.
Chciałem zwiększyć taktowanie do 8MHz i usunąłem programowo dzielnik fusebita CLKDIV8 zmieniając na początku funkcji main() rejestr CLKPR w ten sposób:
CLKPR|= _BV(CLKPCE); CLKPR&=~ _BV(CLKPS1); CLKPR&=~ _BV(CLKPS0);
i zmieniając F_CPU w Makefile na 8MHz.
Jednak diody wciąż mrugają 8 razy wolniej niż powinny według _delay_ms()
Naczytałem się mnóstwo o poprawnym definiowaniu F_CPU i timingu avrów jednak nie mogę zrozumieć co się dzieje. Otrzymuję poprawne timingi jedynie dla F_CPU = 1MHz w Makefile. Oczywiście brak warningów przy kompilacji.
Czy do komunikacji z prędkością 10400 baud i zachowaniu dokładności +-1ms przy 25ms delayu (wymagania WAKE_UP pattern) wystarczy mi wewnętrzny oscylator 1MHz (lub 8MHz jeśli rozwiążę ten problem) czy konieczny będzie zewnetrzny kwarc (czego chciałem uniknąć)
Chciałem zwiększyć taktowanie do 8MHz i usunąłem programowo dzielnik fusebita CLKDIV8 zmieniając na początku funkcji main() rejestr CLKPR w ten sposób:
CLKPR|= _BV(CLKPCE); CLKPR&=~ _BV(CLKPS1); CLKPR&=~ _BV(CLKPS0);
i zmieniając F_CPU w Makefile na 8MHz.
Kod: C / C++
Jednak diody wciąż mrugają 8 razy wolniej niż powinny według _delay_ms()
Naczytałem się mnóstwo o poprawnym definiowaniu F_CPU i timingu avrów jednak nie mogę zrozumieć co się dzieje. Otrzymuję poprawne timingi jedynie dla F_CPU = 1MHz w Makefile. Oczywiście brak warningów przy kompilacji.
Czy do komunikacji z prędkością 10400 baud i zachowaniu dokładności +-1ms przy 25ms delayu (wymagania WAKE_UP pattern) wystarczy mi wewnętrzny oscylator 1MHz (lub 8MHz jeśli rozwiążę ten problem) czy konieczny będzie zewnetrzny kwarc (czego chciałem uniknąć)