Étape 18 : Conception de logiciels
Le code de source du projet final est également fourni ci-dessous. Toutefois, le fichier de code de commande IR est vide et doit être rempli en utilisant les mêmes données que vous avez obtenu à l’étape « Capture IR Remote Control Data ». Une fois que vous remplissez dans, vous devriez être capable de compiler-téléchargement-exécuter il.Le code va jouer tous les fichiers sur le répertoire racine de votre carte SD. Les fichiers sont triés par ordre alphabétique. Mon code source possède quelques fonctionnalités supplémentaires telles que l’affichage de volume lorsqu’il modifie et affiche le nom du fichier actif, longueur de la chanson et l’heure actuelle dans la chanson. S’il vous plaît suivez le code source pour comprendre le fonctionne de chaque fonctionnalité.
Le lecteur de musique ne sera pas en mesure de jouer de la musique alors qu’il est branché à un ordinateur comme un périphérique de stockage de masse USB. C’est parce que SCSI (souvenez-vous j’ai mentionné avant) fonctionne sur des blocs de données brutes sur la carte SD directement mais le GAFI module, nous avons utilisé met en cache les données dans la mémoire vive, ce qui change quoi que ce soit via un port USB provoquera les données utilisées par le GAFI pour être out-of-sync avec les données réelles.
Bien que j’ai voulu utiliser USB connecter et déconnecter les événements afin de détecter automatiquement ou non permettre l’accès du GAFI sur la carte SD, je ne peux pas à cause de la façon que le Teensy ++ est conçue. Il y aura toujours une tension à VBUS, ce qui rend les événements inutilisables. Alors pour permettre l’accès de l’USB, vous devez aller dans le menu de l’horloge pour lui permettre.
Il y a une seule horloge appelée le « un shot timer », qui déclenche un événement qu’une seule fois après un certain laps de temps. Cela sert à afficher l’heure actuelle sur l’écran LCD après que quelque chose d’autre a été affiché sur l’écran LCD. Donc si vous changez le volume, il montrera le volume et au bout de 3 secondes, il va retourner à vous indiquant l’heure.
Un autre timer minuterie 0, qui est programmée pour déclencher un événement toutes les secondes, cela assure le suivi des temps en interne donc nous n’avons pas d’interroger le DS1307 fréquemment. Cela déclenche également l’alarme lorsque correspond à la fois.
J’ai un court appendice sur minuteries, vérifiez-le dehors.
Tous l’impression LCD est faite avec la chaîne stockée dans la mémoire flash, c’est sorte de lente par rapport à l’aide de RAM. J’ai structuré le déroulement du programme pour mettre à jour uniquement l’écran LCD pendant les périodes de temps lorsque le décodeur est occupé. Les chaînes sont enregistrées en flash, parce que la mémoire RAM est plus précieuse, que c’est une bonne habitude à toujours enregistrer les chaînes non variable dans flash.
Tous les paramètres sont enregistrés soit à l’utilisateur de DS1307 RAM (ce qui est sauvegarde sur batterie), ou EEPROM interne de l’AVR (Voir l’annexe pour plus de détails). Ces paramètres sont chargés et validées lors du démarrage et enregistrées lorsque le décodeur est occupé.
Si vous creusez bien que les fichiers, vous pouvez trouver les fonctions de test dont je me sers pour tester les différents composants individuels du système.
Tous les fichiers qui sont purement écrite par moi sont dans le dossier de projet du haut. APUL est stocké dans le dossier de l’APPUL et « Lib » stocke différentes composantes ne écrits pas par moi (il peut y avoir de modifications).
C programmeurs peuvent trouver que je me suis cassé plusieurs règles. Pour le. C les fichiers qui sont inclus au lieu de mise à jour, mon excuse est qu’ils sont séparés de modulariser sans avoir à concevoir des API qui éliminent. Pour les autres erreurs, mon excuse est la quantité limitée de temps, j’ai dû construire, programme de test et documenter ce projet.
Il y a certains mécanismes utilisés dans le code qui permet le même code à compiler pour puces ATmega644 et ATmega644P, ainsi que le Teensy ++, le brochage est différent (et donc le circuit doit être mineur refaisant l’installation électrique). Le code de transfert n’a pas été testé. Évidemment il n’a aucune fonctionnalité USB dans la version ATmega644/ATmega644P puisque ce microcontrôleur n’a pas d’USB.
Les fusibles pour la AT90USB1286 ne devraient pas être modifiés si vous utilisez le Teensy ++.
Les fusibles pour la ATmega644 doivent être : LFUSE : 0xE2, HFUSE : 0x9F, l’importance de ces paramètres est que l’oscillateur interne RC sert à 8 MHz (alors que le Teensy ++ utilise un cristal externe de 16 MHz, qui est divisé par 2 en interne).
D’une manière ordonnée calculer AVR fusibles, essayez ceci : http://www.frank-zhao.com/fusecalc/
Ci-joint sont le code source complet horodatées.