J'ai un projet qui je pense serait le mieux adapté pour un ATMega328P. Cependant, dans chaque projet simple que j'ai vu, les gens connectent toujours un oscillateur externe à 16 MHz. D'après ce que je peux voir, il devrait avoir un oscillateur interne à 8 MHz. Mon projet ne nécessite pas beaucoup de puissance de traitement, et le timing n'a pas besoin d'être très précis (sauf pour un UART et I2C). J'ai également un programmeur, donc je n'ai pas besoin de me soucier des chargeurs de démarrage.
Y a-t-il une raison pour moi d'utiliser un oscillateur externe?
la source
Comme vous utilisez un UART, un oscillateur à cristal serait conseillé. Sinon, vous pourriez utiliser l'oscillateur interne. Certains MCU ont des oscillateurs internes ajustés en usine, qui peuvent convenir au fonctionnement UART.
la source
"Pas sensible au temps". L'UART est très sensible au temps. Vous obtiendrez des ordures complètes s'il n'est pas synchronisé correctement.
Option 1: utilisez un cristal normal. Changer le fusible de sélection d'horloge de manière appropriée. La sélection des cristaux dépend du baud que vous souhaitez utiliser / de la vitesse à laquelle vous voulez que cette chose aille. Il y a des "cristaux magiques" qui vous donneront une erreur de 0% pour les taux standard (s'ils sont parfaitement fabriqués). Voir les tableaux de la section 20 [USART0] pour plus d'informations (vous avez lu la fiche technique .... à droite ???) :).
Option 2: vous pouvez calibrer l'oscillateur interne à l'aide d'un cristal de 32 kHz si la puissance est un problème. Avec 32 kHz, vous pouvez obtenir des courants uA en mode veille (je les ai réduits à ~ 2uA). Vous devez cependant configurer une routine d'étalonnage qui implique le démarrage / l'arrêt des minuteries et l'alternance de timer2 en mode asynchrone.
Le code 328P peut différer ... cette fonction fonctionne actuellement sur 48/88 (avec les définitions F_CPU / baud appropriées. C'est un peu moche / pas complètement refactorisé mais j'ai mieux appris que de déconner avec des choses qui fonctionnent quand vous êtes sur une date limite. Rechercher sur le forum AVRFreaks pour "tune 32khz crystal" quelque chose comme ça. C'est juste un avant-goût de ce que vous allez entrer ... Pas nécessairement ce qui va fonctionner.
la source
Il convient également de noter qu'un cristal prend beaucoup de temps pour démarrer. C'est en fait à cause de sa précision: il ne prend de l'énergie que dans une bande de fréquences très étroite. Cela peut être un fardeau pour les trucs alimentés par batterie où vous réveillez le MCU pendant très peu de temps en temps: attendre un ms à pleine puissance pour que le cristal démarre est une perte nette. Les résonateurs en céramique sont plus précis que l'oscillateur RC interne mais moins qu'un cristal, et démarrent en conséquence.
Bien sûr, un atmega de 16 MHz boit beaucoup plus de jus et a besoin d'une tension plus élevée qu'un 8 MHz, mais des cristaux de 8 MHz (ou moins, jusqu'à 32 kHz) sont disponibles; ce simple choix peut également être un économiseur d'énergie.
la source
Si vous n'avez pas besoin de beaucoup ou de synchronisation précise, il n'est pas nécessaire d'avoir un oscillateur externe. Lors du démontage de certaines anciennes imprimantes, il se trouve que je vois beaucoup de circuits intégrés, mais pas un seul oscillateur à bord.
la source
Je suppose que vous avez déjà vu cette note d'application: AVR053: Calibration de l'oscillateur RC interne .
J'imagine, et la note d'application du commentaire de @drxzcl ci-dessus, que vous devriez être en mesure de décider théoriquement ce qui est juste.
la source