Je suis en train de suivre ce tutoriel , de programmer l'ATtiny85 avec un Arduino, de l'utiliser pour jouer quelques sons (via un haut-parleur piézo). J'ai du mal à obtenir les tons à la bonne hauteur (je crée les formes d'onde manuellement, car la fonction tone () n'est pas prise en charge sur l'ATtiny85).
Je crois que le problème peut être dû à des vitesses d'horloge différentes sur l'Arduino et ATtiny. Je comprends que la vitesse d'horloge peut être modifiée sur ATtiny, comment puis-je accomplir cela en utilisant l'environnement Arduino?
arduino
attiny
fuse-bits
clock-speed
peuroffours
la source
la source
Réponses:
Je crois que le logiciel Arduino (bibliothèques et tous) suppose que vous travaillez à 16 MHz. Si vous appliquez cette hypothèse à l'horloge à laquelle vous exécutez réellement ... les choses devraient s'arranger. En supposant que vous exécutez le Tiny85 sur son oscillateur interne, je pense qu'il fonctionne à 1 MHz, alors multipliez simplement toutes vos déclarations de retard (et autres notions de temps) par 16.
Si vous avez besoin d'une meilleure précision que celle fournie par l'oscillateur interne, vous devriez penser à utiliser un cristal externe ou un résonateur, mais vous devrez modifier les paramètres de fusible de l'AVR pour que cela fonctionne, et je pense que vous aurez besoin d'un programmeur comme l'AVRISP mkII pour le faire avec AVR Studio (ma recommandation).
Je ne sais pas grand-chose sur l'esquisse ArduinoISP, mais pour moi, il semble que le protocole ISP frappe un peu pour télécharger un programme sur la puce cible (pas le Mega328 intégré), pas sûr qu'il soit équipé pour manipuler des fusibles. ArduinoISP est documenté ici http://arduino.cc/en/Tutorial/ArduinoISP , fwiw. Notez que vous ne pouvez pas utiliser un UNO actuellement pour exécuter l'esquisse ArduinoISP. Il ne me semble pas que vous puissiez utiliser l'esquisse pour faire de l'Arduino une interface viable pour l'utilisation des outils GUI d'AVR Studio.
EDIT : Il semble que les choses se soient rattrapées et un UNO est viable pour ArduinoISP maintenant - merci pour les commentaires tous
la source
delay(20)
installerdelay(40)
dans sa définition devoid heartbeat()
.)J'utilise Arduino UNO + ArduinoISP avec succès.
Ajoutez des
-U
indicateurs à votreavrdude
commande pour définir l'un ou l'ensemble des trois fusibles ATtiny.La sélection de l'horloge se fait en bits [3: 0] sur le troisième fusible ('Fuse Low Byte'). Réglez-les comme suit pour utiliser un cristal externe (de 8 MHz ou plus rapide):
Sa définition (je déduis) doit être quelque chose comme: [Fuse Low Byte]: [écriture]: [valeur hexadécimale]: [définie manuellement]
La valeur par défaut pour les quatre bits de poids fort de cet octet est
0110
, alors laissez le6
in0x6f
tel quel et ne changez que le deuxième chiffre, lef
(sa valeur par défaut est2
).NB: Si vos processus prennent plus ou moins de temps que prévu, vérifiez votre prédécaleur d'horloge et votre définition de F _ CPU.
la source
-U lfuse:w:0x6f:m
option avrdude ci-dessus . Je vais devoir le réinitialiser à l'aide d'une configuration haute tension. Donc, un mot d'avertissement aux gens (comme moi) qui essaient de réinitialiser les fusibles sans savoir ce qu'ils font.Essayez d'utiliser le didacticiel correspondant du même groupe (High-Low Tech du MIT) intitulé Programmation d'un ATtiny avec Arduino 1.0 .
Un résumé rapide: Dans le menu Outils-> Carte dans l'IDE Arduino, sélectionnez l'ATtiny85 et la fréquence à laquelle vous souhaitez fonctionner (horloge interne de 1 ou 8 Mhz, ou cristal externe de 20 Mhz), puis utilisez Outils -> Graver Bootloader " Je crois que la sélection de la carte de vitesse souhaitée modifie la façon dont le retard () et d'autres fonctions Arduino liées au temps fonctionnent afin de se synchroniser avec la vitesse d'horloge.
J'ai moi-même réussi cette approche en utilisant des puces ATtiny84. Le programme de clignotement simple est fixe, ainsi que la synchronisation plus sensible requise pour contrôler manuellement les impulsions envoyées à un servo à l'aide de delayMicroseconds ().
la source
Il semble que vous utilisez ArduinoISP, essayez d'utiliser AVR Studio ou les options de ligne de commande pour
avrdude
. Selon la façon dont l'ArduinoISP a été écrit, il peut fonctionner comme un Atmel AVRISP mkII ou similaire.la source
Les paramètres de fusible par défaut pour l'ATtiny85 sont: lfuse 0x62, hfuse 0xdf, efuse 0xff. Celui-ci utilise l'oscillateur RC (8 MHz) interne avec "division par 8", l'horloge est donc de 1 MHz.
Voir http://www.engbedded.com/fusecalc pour plus de paramètres de fusible.
Vous pouvez toujours utiliser avrdude directement pour modifier les paramètres de fusible de votre ATtiny85 même lorsque vous utilisez un ArduinoISP comme programmeur.
Si vous
attiny85.build.f_cpu
finissez par changer manuellement le fusible pour modifier l'horloge, veillez à modifier la ligne de votre fichier [arduino_folder] \ hardware \ attiny45_85 \ boards.txt.la source
Je pense que vous pouvez définir les fusibles avec l'ArduinoISP, mais pas avec l'IDE Arduino mais avec avrdude, vérifiez ce lien . Je ne l'ai jamais testé moi-même.
Le tutoriel dit explicitement que vous pouvez utiliser Arduino UNO et je l'ai testé et travaillé, donc je peux le confirmer, donc la page ArduinoISP est obsolète et l'avertissement UNO doit être ignoré. Si votre UNO faisait partie du premier lot, vous avez probablement un chargeur de démarrage défectueux, vous devrez reflasher le chargeur de démarrage. Consultez cette page pour plus d'informations (ignorez les numéros de série, tous mes UNO n'étaient pas de cette série et avaient des problèmes).
Les bibliothèques de base portées que vous avez téléchargées à partir du didacticiel sont écrites pour utiliser l'oscillateur interne de 1 MHz (confirmé à partir du fichier boards.txt), donc peut-être que le problème de synchronisation peut être dans les bibliothèques de base portées ou dans votre code.
Sincères amitiés
la source
Choisissez une carte ATTiny dans le "gestionnaire de cartes" qui inclut l'ATTiny85. C'est dans le menu "Outils". Je pense que cela inclut maintenant "PLL interne 16 MHz". (Vous pouvez en installer un sur http://drazzy.com/package_drazzy.com_index.json )
Sélectionnez ATTiny85 explicitement si nécessaire.
Choisissez une horloge. Jusqu'à ce que vous en sachiez plus, choisissez une horloge interne .
Cliquez sur "Graver Bootloader" comme élément de menu.
Attention, vous ne pourrez peut-être plus programmer le MCU si vous choisissez des valeurs très basses. Si c'est votre intention, faites-le en dernier, sauf si vous avez des pièces de rechange ou un programmateur haute tension pour réinitialiser les fusibles.
la source