Mam projekt, który moim zdaniem najlepiej pasuje do ATMega328P. Jednak w każdym prostym projekcie, który widziałem, ludzie zawsze podłączają zewnętrzny oscylator 16 MHz. Z tego, co widzę, powinien mieć wewnętrzny oscylator 8 MHz. Mój projekt nie wymaga dużej mocy obliczeniowej, taktowanie nie musi być bardzo precyzyjne (inne niż dla UART i I2C). Mam również programistę, więc nie muszę się martwić o programy ładujące.
Czy jest jakiś powód, dla którego używam zewnętrznego oscylatora?
źródło
Podczas korzystania z UART wskazany byłby oscylator kwarcowy. Gdyby tak nie było, można użyć wewnętrznego oscylatora. Niektóre MCU mają fabrycznie przycięte wewnętrzne oscylatory, które mogą być odpowiednie do pracy UART.
źródło
„Niewrażliwy na czas”. UART jest bardzo wrażliwy na czas. Dostaniesz pełne śmieci, jeśli nie zostaną odpowiednio zsynchronizowane.
Opcja 1: Użyj normalnego kryształu. Zmień odpowiednio bezpiecznik wyboru zegara. Wybór kryształów zależy od tego, jakiej prędkości transmisji chcesz użyć / od tego, jak szybko chcesz to zrobić. Są „magiczne kryształy”, które dadzą ci 0% błędu dla standardowych stawek (jeśli są wyprodukowane idealnie). Aby uzyskać więcej informacji, zobacz tabele w sekcji 20 [USART0] (przeczytałeś arkusz danych .... prawda ???) :).
Opcja 2: Możesz skalibrować wewnętrzny oscylator za pomocą kryształu 32 khz, jeśli występuje problem z mocą. Przy 32kHz możesz uzyskać prądy UA w trybie uśpienia (zredukowałem je do ~ 2uA). Musisz jednak skonfigurować procedurę kalibracji, która obejmuje uruchamianie / zatrzymywanie timerów i przełączanie timera 2 w tryb asynchroniczny.
Kod 328P może się różnić ... ta funkcja działa obecnie na 48/88 (z odpowiednimi definicjami F_CPU / baud. Jest trochę brzydka / nie została całkowicie zrefaktoryzowana, ale nauczyłem się lepiej, niż błądzić z rzeczami, które działają, gdy jesteś w wyznaczonym terminie. Wyszukaj na forum AVRFreaks „dostroić kryształ 32kHz” coś takiego. To tylko smak tego, w co się pakujesz ... Niekoniecznie to, co zadziała.
źródło
Należy również zauważyć, że uruchomienie kryształu zajmuje dużo czasu. Wynika to z jego precyzji: pobiera energię tylko z bardzo wąskiego pasma częstotliwości. Może to stanowić obciążenie dla urządzeń zasilanych bateryjnie, w których od czasu do czasu budzisz MCU: czekanie na ms przy pełnym poborze mocy do uruchomienia kryształu jest stratą netto. Rezonatory ceramiczne są dokładniejsze niż wewnętrzny oscylator RC, ale mniej niż kryształ, i zaczynają odpowiednio.
Oczywiście atmega 16 MHz pije dużo więcej soku i potrzebuje wyższego napięcia niż 8 MHz, ale dostępne są kryształy 8 MHz (lub niższe, aż do 32 kHz); ten sam wybór może być również oszczędnością energii.
źródło
Jeśli nie potrzebujesz dużo lub precyzyjnego pomiaru czasu, nie potrzebujesz zewnętrznego oscylatora. Podczas demontażu starych drukarek zdarza mi się widzieć wiele układów scalonych, ale nie ma na nich ani jednego oscylatora.
źródło
Chyba już widziałeś tę notatkę aplikacji: AVR053: Kalibracja wewnętrznego oscylatora RC .
Myślę, że z tego, a notatka aplikacji z komentarza @drxzcl powyżej, powinieneś być w stanie teoretycznie zdecydować, co jest właściwe.
źródło