Arduino à 20 MHz?

9

Je me demande pourquoi Arduino ne fonctionne pas à 20 MHz, la fréquence pour laquelle l'AVR est spécifié. Maintenant, fonctionnant à 16 MHz, nous perdons 20% de performances pour rien.

Je ne pense pas qu'il y ait des implications lorsque vous remplacez le résonateur 16 MHz par un type 20 MHz, avec probablement la seule exception pour le débit en bauds dans le chargeur de démarrage. Ou y en a-t-il?

Est-ce que quelqu'un sait pourquoi les concepteurs Arduino ont choisi 16 MHz?

Joris Groosman
la source
N'oubliez pas de régler les fusibles lorsque vous faites cela
portforwardpodcast
1
@portforwardpodcast pas besoin de changer les fusibles. Ils sont déjà définis sur "Oscillateur externe à oscillation totale".
Gerben

Réponses:

6

Il n'y a aucune raison matérielle (pour autant que je sache) que vous ne pouviez pas exécuter un Arduino approprié à 20 MHz. Cependant, vous rencontriez des inexactitudes mineures de synchronisation dans le logiciel, car la configuration Arduino standard fonctionne apparemment mieux si la vitesse d'horloge est de 8 ou 16 MHz.

Je soupçonne que c'est en grande partie pour des raisons historiques. Les premières cartes Arduino étaient basées sur des puces qui ne montaient que jusqu'à 16 MHz, comme le ATmega8. En utilisant la même configuration pour toutes les puces, tout reste un peu plus simple et plus cohérent.

Vous trouverez plus d'informations ici sur les problèmes de synchronisation: http://forum.arduino.cc/index.php?topic=158223.0#msg_1186708

Peter Bloomfield
la source
1
Merci pour votre réponse. Pouvez-vous élaborer sur "la puissance exacte de 2"? La période de 1 seconde pendant laquelle les impulsions d'horloge sont comptées ne signifie rien pour un microcontrôleur, il ne connaît que les tics d'horloge. De plus, 16 MHz n'est pas une puissance exacte de 2, ce qui devrait être 16,777216 MHz.
Joris Groosman
@JorisGroosman Désolé, je n'ai pas expliqué cela correctement. Il s'agit de la façon dont le noyau Arduino calcule les microsecondes à partir des tics d'horloge. Ce sujet de forum donne une bien meilleure explication que moi.
Peter Bloomfield
4

Vous pouvez, et je le fais.

Ce n'est plus techniquement un Arduino, je suppose. J'ai fait ma propre carte, remplacer un résonateur sur une carte nécessitera une soudure fine, mais c'est certainement possible.

Il y a quelques problèmes: tout ce qui est lié au temps (par exemple millis ()) sera exécuté plus rapidement qu'il ne devrait - 25% de millis () en plus par seconde. De plus, le chargeur de démarrage attend 16 MHz, vous ne pourrez donc pas le reprogrammer à cette vitesse. J'ai acheté un programmeur USBASP - il se connecte à la grille 2x3 broches d'un côté de la carte et vous permet de le reprogrammer sans le chargeur de démarrage (c'est ainsi que le chargeur de démarrage est mis en place en premier lieu!). Vous aurez besoin d'au moins 4,5 volts à 20 mhz pour éviter les problèmes, contre 3,78 volts pour 16 mhz - cela signifie que les batteries se déchargeront un peu plus rapidement (les batteries 3x1,5 v se déchargeront assez rapidement), et si vous avez des moteurs ou autre tirez sur le piles, 3 piles 1.5v ne fonctionneront probablement pas même si elles sont fraîches.

Alternativement, en allant dans la direction opposée exacte, plus la vitesse d'horloge est faible, moins la tension est nécessaire - pour certains projets, vous pourriez ne pas avoir besoin de la vitesse d'horloge - vous pouvez descendre à 1,8 V fonctionnant à 4 MHz.

AMADANON Inc.
la source