Étape 2: sur le programme
Modes de fonctionnement :
--Utilisateur entrée/options
--Attendre-pour-mode "veille"
Mode de rêve--PWM
Démarrage
Lors du démarrage de la LED s’allume pendant environ 2 secondes indiquer qu’il fonctionne.
L’appareil vérifie également si le bouton d’entrée était pressé et qui s’est tenu au cours de l’alimentation pendant les deux premières secondes. S’il s’agissait, « mode immédiat » est entré : les voyants commencent à clignoter. Il s’agit surtout pour guyfrom7up pourrait facilement tester le matériel sans attendre quatre heures;-).
Il pourrait également être utilisé pour les États de veille de type « catnap ».
Toutefois, nous pourrions aussi ajouter un peu de code pour faire varier la largeur d’impulsion... whattay pense ?
La configuration du Timer et IRQ pour l’état d’attente initiale
Après vérification des entrées d’utilisateur, etc. et configurer le IRQ, le ATtiny13 est immédiatement placé en mode "veille". Dans ce mode uniquement les horloges, les horloges et les IRQ est fonctionnelles. Bien sûr, il s’agit d’une mesure d’économie d’énergie.
Temps de retournement d’un compteur 16 bits, par valeur de mesureur de minuteur (fois environ)--
-----------------------CS00: 13.75sCS01: 110s (1m, 50s)CS02: 3520s (58m, 40s)CS00 + CS02: 14080s (3.91h)
Une attente d’environ 4 heures est possible grâce à la combinaison CS02 et CS00 de drapeau, le mesureur d’horloge de 1024. Dans cet État, l’IRQ est déclenchée 4,6 fois par seconde. L’attente État pourrait facilement être fine à l’écoute, en utilisant le compteur 16 bits (pour les durées < 4 hrs) ainsi que le compteur de waitstate (pour allonge les délais).
Depuis quatre heures est aussi bon que n’importe quel retard, une waitstate de longue durée n’est pas utilisé. Un délai plus long serait une question futile de mettre en œuvre.
Remarque : guyfrom7up a trouvé que le waitstate pour son rea est un peu plus de 4 heures, tandis que le mien est un peu moins. L’oscillateur interne du régulateur n’est pas très précis, mais il est assez bon pour nos besoins...
À 4,6 interruptions par seconde, puissance CPU, consommation devrait être très faible. Bien sûr l’AVR ne peut être en mode arrêt, comme nécessitant un signal de réveil externe. Nôtre doit chronométrés en interne, donc SLEEP_MODE_IDLE est notre meilleur choix.
Interruptions par seconde, pour chaque mesureur (env.)--
---------------------CS00: 4766 /s (during dream phase)CS01: 593.8 /sCS02: 18.6 /sCS00 + CS02: 4.6 /s (during initial waitstate)
La configuration du Timer et IRQ pour rêver mode PWM
La valeur de mesureur de minuterie devient CS00 lorsque MODE_DREAMING commence--afin de créer des transitions douces de la pwm de logiciel. Le cycle de la CPU (IRQ) est beaucoup plus grand (environ 4,7 K par seconde.) Mais le cycle d’utilisation de LED est beaucoup moins que ce qu’il serait avec un simple interrupteur on/off. Un compromis entre le cpu et LED actuelle dessiner...
La largeur totale de l’impulsion (longueur) du clignotement de la LED est contrôlée par les constantes MACRO_WIDTH et MACRO_GAP. Le PWM est géré en incrémentant le pwm et variables de transition par les constantes PWM_VAL et TRANS_VAL. altérer ces constantes ne changera comment rapidement le PWM "rampes vers le haut".
Actuellement, la valeur du pouls LED rêvant fréquence est d’environ 1,5 hz.
Taille du programme
La version actuelle (0.2b) utilise seulement 438 octets de mémoire flash. C’est loin d’avoir atteint la limite de 1 K sur la ATtiny13.
Alors ajouter plus de fonctionnalités est certainement faisable.