Étape 8 :
J’ai utilisé WinAVR pour compiler et le Programmateur de poche USB de Sparkfun pour télécharger le code dans la puce de l’AVR, mais vous pourriez utiliser AVR Studio et tout programmeur, vous êtes habitué ; Veillez juste à modifier le makefile en conséquence. Les bits de fusible AVR sont les valeurs par défaut.
Fonctionnement du programme
Fondamentalement, l’uC attend en mode "veille" jusqu'à ce qu’il est réveillé par une interruption matérielle du capteur tactile. Il puis s’allume les voyants dans un État faible. Lorsque le capteur est touché encore une fois, le mode change de faible à moyen et encore une fois à haute après un autre contact. Une dernière touche de l’appareil s’éteint les lumières et euthanasié l’uC retour, attendant d’être réveillé par le capteur tactile. Ce cycle se répète indéfiniment.
Deux fichiers d’en-tête sont utilisées. Le premier est mon fichier AVR.h personnalisé qui contient de nombreuses macros utiles ainsi que l’appel d’autres en-têtes requis. Le second est le fichier sleep.h qui est inclus dans WinAVR.
Le programme démarre en initialisant la puce AVR : désactivation des fonctionnalités inutilisées, définissant l’i/o ports, réduisant la fréquence d’horloge système (pour les économies d’énergie plus), mise en place d’horloge 0 pour une impulsion de 122 Hz, permettant à la broche changer interruption pour le capteur tactile et permettant l’alimentation en mode "veille".
Le programme puis entame une boucle de forever qui ne fait qu’une chose : vérifier pour voir si le sommeil est activé. Si le sommeil est activé, l’uC est mis en sommeil pour attendre interruption matérielle du capteur tactile.
Gestionnaire d’interruption qu’un seul est utilisé : la broche changer interruption pour le capteur tactile. Cette routine vérifie l’état des LEDs et décide de les allumer, augmenter la luminosité (largeur d’impulsion) ou les désactiver en conséquence chaque fois que l'on appuie sur l’appareil. Il détient également le programme dans une boucle jusqu'à ce que le luminaire n’est n’est plus être touché.
Le pouls de la LED est géré entièrement par les caractéristiques matérielles de l’uC. La seule chose qui doit être fait dans le code est pour activer ou désactiver la sortie de Timer 0 raccordée au conducteur de LED.