Voilà, je me demandais si il y avais une raison pour que les cartes arduino (Uno et autre Atmega368) tournent à 16Mhz alors que l'Atmega368 est prévu pour 20Mhz (et supporte en pratique bien plus) ?
Du coup, outre les fonctions/lib utilisant des timers (PWM, delay()...) est ce que ça pose un problème (notamment pour les téléversements et l'utilisation du moniteur série) d'overclocké une arduino ?
Voilà, je me demandais si il y avais une raison pour que les cartes arduino (Uno et autre Atmega368) tournent à 16Mhz alors que l'Atmega368 est prévu pour 20Mhz (et supporte en pratique bien plus) ?
Du coup, outre les fonctions/lib utilisant des timers (PWM, delay()...) est ce que ça pose un problème (notamment pour les téléversements et l'utilisation du moniteur série) d'overclocké une arduino ?
En vous remerciant.
bonsoir
le choix du 16MHz à été fait pour des raisons de stabilité.
sous l'environnement arduino tout ce qui est "time dependant" sera affecté par un changement d'horloge et donc vitesse du moniteur serie et du bootloader
La principal modif à faire est d'éditer le board.txt pour spécifier la fréquence, qui est ensuite reprise par un certains nombre de fonctions. Par contre c'est pas garanti pour toute ... Faudra surement recompilé le bootloader.
Mouais c'est pas non plus la mère à boire, 90% des codes Arduino pourrait tourner à 1 Mhz sans problème ... Si t'es à 4 Mhz près c'est que déjà faut songer à changer de plateforme.
De plus 16, dans une architecture 8 bits ça simplifie certaines choses, comme les quartz en 32768 Hz
Comme l'a expliqué B@tto un peu plus haut, libre à toi de faire tourner ta carte à 20MHz.
Il suffit d'échanger le quartz
Editer le fichier board.txt et y décrire une carte arduino avec une horloge à 20MHz
Recompiler le bootloader et le claquer dans le processeur.
Ensuite tu auras une carte arduino à 20MHz.
Ne t'attend pas à un énorme gain de performances.
Et attend-toi, par contre, à quelques déboire avec des librairies mal codées qui supposent que l'horloge est à 16MHz.
Je posais la question car je m'arrachais les cheveux sur des problèmes d'incrustation dans un signal vidéo analogique. Pour se faire, je dois intercepter le tic de début de ligne, et déclencher une action sur l'un des pins au bout d'un temps très précis après ce tic... Et pour ce genre d'application, plus j'ai de cycles par secondes, mieux c'est.
Vous allez me dire que c'est plus vraiment de l'arduino, qu'il faut le faire en assembleur et que l'AVR n'est peut être pas le plus adapté, mais justement, une Arduino, c'est ce que tout le monde a, et je voudrais que ça fonctionne avec ce que tout le monde a.
Au final, je ne vais pas faire la modif, ça perdrait tout son sens si je ne peux plus distribuer mon sketch. C'était surtout par curiosité que je posais la question.
Il existe une autre communauté sur un autre site avec des micros plus performants (mais le seront-ils assez pour ce que tu veut faire?) je pense au projet MBED.
Ce projet créé à l'initiative d'ARM rassemble la plus part des sociètés qui développent des micro-controleurs à partir de cœurs ARM (NXP,Freescale, Nordic, ST, etc). Pour le moment il manque Texas et la position d'Atmel est floue.
Texas semble misé sur Energia même s'il mériterait de pousser un peu plus, notamment sur la prise en charge de l'usb natif ... Sinon y'a les Teensy qui poutrent
68tjs:
Dans les cartes que j'évoquais il en a qui tournent à 100 MHz : en est-il de même avec les Teensy ?
72 Mhz maxi pour la 3.1. Après ce qui est bien chez les teensy c'est le core qui est un exemple d'optimisation. Parce qu'avoir 100 Mhz c'est bien mais si ça prend deux fois plus de temps de tout faire ... Vu que mBed y'en a une palanquée de cartes, ça implique du code polyvalent et donc des ralentissements. Après j'ai jamais testé donc si ça se trouve elles sont meilleures que les teensy xD