Clignotant, chantant, Marioman (4 / 5 étapes)

Étape 4: Créer le firmware pour Marioman

L’attiny13A a 1K de flash programmable et 64bytes de SRAM.
Le fichier ci-joint tar a le fichier source, mais aussi les progiciels compilé par téléchargement.

Trois tableaux dans le code c ont servi à produire de la musique

  • FREQ [] - fréquences de chaque note
  • [longueur] - durée de chaque note
  • [retard] - pause entre chaque note

Le tableau de fréquence n’a pas les fréquences réelles mais plutôt la valeur à mettre dans le registre TTCROB pour générer le signal carré sur la broche PB0.

Voici un bref résumé des calculs et la configuration des broches pour la génération de l’onde carrée :

  • L’attiny13A a un oscillateur interne de 9,6 MHz
  • L’horloge interne pour IO est l’oscillateur divisé par 8 ou 1,2 MHz
  • Une horloge interne est configuré dans un registre de 8 bits à compter vers le haut de chaque cycle d’horloge avec Prédiviseur de 8.
  • Il en résulte un tick d’égal à 1 / (1,2 MHz / 8) =.006667ms
  • L’attiny13A est configuré pour comparer ce qui est dans le registre TCCR0B avec la minuterie de 8 bits et activer/désactiver un NIP lorsqu’ils correspondent.
  • Par exemple, afin de générer une onde carrée à 524 Hz (une octave au-dessus du milieu C) qui dispose d’un délai de 1.908ms.

1.908ms = 286 horloge tiques (1.908/.0067)
Diviser les 286 par 2 pour activer/désactiver la code pin à t/2 (286/2 = 143)
Mettre 143 dans le registre TTCR0B pour générer cette note.

Il s’agit de tout le code qui est nécessaire pour mettre en place la minuterie, faire le comparer et sortie un signal carré :

 TCCR0A |= (1<<WGM01); // configure timer 1 for CTC mode TCCR0A |= (1<<COM0A0); // toggle OC0A on compare match TCCR0B |= (1<<CS01); // clk/8 prescale TTCR0B = 143; // generate a square wave at 524Hz 

Pour retarder les tons et les pauses entre eux une fonction de retard simple a été utilisée :

 void sleep(int ms) { int cnt; for (cnt=0; cnt<(ms); cnt++) { int i = 150; while(i--) { __asm("NOP"); } }} 

Ce compte à rebours de 150 où chaque cycle NOP est environ.006667ms.

La dernière chose que le code n’est effectuer une boucle sur les baies, générer de la musique et clignoter deux LED.

Cela se fait en continu pour les boucles avec le code suivant :

 const uint8_t freq[] PROGMEM = { ... data };const uint8_t length[] PROGMEM = { ... data };const uint8_t delay[] PROGMEM = { ... data };...while (1) { for (cnt=0; cnt<156; cnt++) { OCR0A=pgm_read_byte(&freq[cnt]); output_toggle(PORTB,PB3); output_toggle(PORTB,PB4); sleep( pgm_read_byte(&length[cnt]) ); output_toggle(PORTB,PB3); output_toggle(PORTB,PB4); // stop timer TCCR0B = 0; sleep ( pgm_read_word(&delay[cnt]) ); // start timer TCCR0B |= (1<<CS01); // clk/8 prescale }} 

Il y a 156 éléments dans les tableaux de fréquences/longueurs/retard, cette boucle traverse eux. Broche PB3 et PB4 sont chacun activé/désactivé afin qu’ils seront affichent en alternance avec chaque note le premier sommeil correspond à la longueur de la note Qu'on joue après avoir réglé le registre OCR0A la valeur appropriée. Le second sommeil est la pause entre les notes que nous jouons.

Dans le code ci-dessus, vous pourriez avoir des avis les deux fonctions pgm_read_byte() et pgm_read_word() ainsi que le mot clé PROGMEM.

Avec une puce intégrée comme l’attiny la quantité de SRAM est très limitée, dans ce cas 64bytes seul. Les tableaux que nous utilisons pour toutes les données de fréquence/retard/longueur sont beaucoup plus grandes que 64bytes et ne peuvent donc pas être chargés en mémoire. En utilisant la directive spéciale d’avr-gcc PROGMEM que ces tableaux de données volumineuses est empêchés de se charger dans la mémoire, au lieu de cela, ils sont lus de flash.

Articles Liés

Clignotante LED « Fiancée » Bachelorette Tiara

Clignotante LED « Fiancée » Bachelorette Tiara

Récemment, un de mes meilleurs amis s'est marié. Depuis que je suis obsédé par ajout twinkles à tout ce que je peux personnaliser, j'ai décidé de faire sa une tiare de clin pour sa partie de bachelorette. J'ai besoin de quelque chose qui ne serait pa
Boîtier de relais chant citrouilles/Parallel Port

Boîtier de relais chant citrouilles/Parallel Port

ce Instructable vous montrera comment créer une boîte de relais de port parallèle qui serviront à conduire une plate-forme de chant citrouille Halloween. La plate-forme de chant citrouille est essentiellement un spectacle de lumière et de la musique
Citrouilles de chant / Arduino

Citrouilles de chant / Arduino

permet de commencer par dire que je suis un noob pour des microcontrôleurs comme Arduino. Après avoir regardé à travers instructables pendant un certain temps, j'ai vu les choses qu'arduino pouvait faire. C'est quand j'ai réalisé que je devais obteni
Clignotant vélo bricolage

Clignotant vélo bricolage

Beaucoup d'entre nous utilisent des vélos pour les déplacements et les loisirs, et beaucoup d'entre nous souffrent d'hivers longs et sombres aussi bien ! Si tel est le cas, vous avez probablement une paire de lumineux avant et feux arrière, qui font
Sci Fi Style morceau de bras avec LED clignotant multicolores.

Sci Fi Style morceau de bras avec LED clignotant multicolores.

Ce point particulier est fait d'éléments, que j'ai acheté dans un magasin local de Dollar Tree. C'est un accessoire pour une future vidéo.Étape 1: Les parties. Voici les pièces : la pièce finie sur le droit et toutes les pièces à côté de lui. Le gran
Couronne de Noël le chant

Couronne de Noël le chant

Voici un excellent mod pour un reef(wreaths) qui a conduit les de là-dessus. Utilisez le Mediatek LinkIt une planche avec une carte SD pour contenir des chansons de vacances qui sont jouées lorsque quelqu'un est à la porte.Un capteur à ultrason est u
TARDIS LEGO avec clignotants LED

TARDIS LEGO avec clignotants LED

J'étais curieux de voir si je pouvais combiner un circuit LED clignotante avec le TARDIS LEGO (#21304 - http://shop.lego.com/en-US/Doctor-Who-21304). Avec un peu de perçage, j'ai pu monter une LED sous le toit TARDIS et transparaître les goujons clai
Une sphère en lévitation tourne s’allume et clignote avec Arduino

Une sphère en lévitation tourne s’allume et clignote avec Arduino

Une étoile de la mort peu lévitation de Instructables m'a invité au nouveau projet avec Arduino. Trois stratégies ont été décidés et gardés pour le différencier de l'ancêtre.Faire moi-même avec prêt-à-pas (ou moins).Garder en rotation.S'allume et cli
Circuit de clignotants avec musique

Circuit de clignotants avec musique

VUE D'ENSEMBLE :•Ces instructions vous montrera comment construire un circuit simple qui contrôle tous genres de lumières (qui se branchent dans le mur) et eux seront met à clignoter avec le rythme de la musique•Seulement compétences à souder simple
Clignotant marionnette requin

Clignotant marionnette requin

Comment faire une marionnette requin avec clignotant LED s'allume pendant ses yeux !Les deux voyants vont s'allumer quand la bouche du requin est fermé la première fois,après la première fois, que les lumières s'allument, les LEDs vont clignoter lors
Comment faire une LED clignotante en FLUIPIERRE.

Comment faire une LED clignotante en FLUIPIERRE.

Pour ceux d'entre nous qui utilisent fluipierre, module LED standard est grand mais ne clignote pas quand allumé via le logiciel. Dans les cas où une Annonciation visuelle est nécessaire pour attirer l'attention de l'exploitant, le clignotant est néc
Chants de dysfonctionnement : un jeu de chanson de Noël

Chants de dysfonctionnement : un jeu de chanson de Noël

Noël est le moment magique de l'année où famille et amis se réunissent et chaos s'ensuit.  Oncle Benny boit trop enrichi de lait de poule.  Tante Elizabeth est assis sur sa chaise et tranquillement se brise vent.  Maman et papa se chamailler sur qui
Comment faire un Bracelet en paracorde clignotant LED

Comment faire un Bracelet en paracorde clignotant LED

Apprenez à faire des bracelets de paracord LED clignotantes pour s'assurer que vous pouvez être vu !Étape 1: Vous aurez besoin...Pour faire votre bracelet en paracorde LED, vous devrez les choses suivantes :ParacordRuban à mesurerCiseauxBriquetUne ba
Simple de clignotants pour vélo

Simple de clignotants pour vélo

Si vous vous déplacez régulièrement sur votre vélo, le manque de soleil en hiver peut être un peu intimidant, surtout si votre voyage n'est pas bien éclairé. J'ai monter mon vélo à travailler toute l'année, et en novembre, une grande partie de mon tr