Étape 12 : Programmer le ATtiny
1 Téléchargez ce fichier : https://github.com/damellis/attiny/zipball/Arduino1
2 décompresser et mettre le « attiny » dossier dans le dossier « matériel » où tha Arduino est installé sur votre PC. Le chemin ressemble à ceci : Documents > Arduino > Matériel > attiny > (autres fichiers téléchargés... etc)
3 Lancez l’Application de l’Arduino et ouvrir la ArduinoISP du fichier > menu exemples
4 ajouter le croquis à l’Arduino Uno.
5 maintenant modifier les paramètres suivants :
6 vérifier la ATtiny85 (8 Mhz) case à cocher dans Outils > menu Board.
7 vérifier la: « Arduino comme ISP » dans les outils > menu programmeur.
Broches de connexions :
ATtiny:: Arduino Uno
1 :: 10
5 :: 11
6 :: 12
7 :: 13
4 :: GND
8 :: 5V
Télécharger la pièce jointe et télécharger mon code à votre ATtiny85 !
Code caractéristiques :
Si vous souhaitez modifier la valeur d’entrée déclencheur, puis modifiez le « 800 » j’ai quelque chose entre 0 à 1023 (0 est 0.00V, comme c’est de 1023 5.00V).
Dans le cas où vous souhaitez modifier la période d’éclairage, changer mon « 2000 » à tout ce que vous voulez. 2000 dans mon cas correspond à 15 secondes.
Mode "veille"
Le ATtiny est programmé pour minimiser la consommation d’énergie. Non seulement il est en marche que si le multimètre est allumé, mais lorsqu’il exerce son activité, il passe en mode veille pendant que vous attendez le signal d’entrée. Cette option est activée par la fonctionnalité de Miradar. Notre ATtiny « dort » pour 128 millisecondes et « réveille » seulement pour vérifier la valeur d’entrée. Si ce n’est pas élevé il s’endort à nouveau, dans le cas contraire il s’allume la sortie pendant 15 secondes et après que tirns il s’éteint et puis se met en veille. Cela économise beaucoup d’énergie parce que lorsque le micricontroller est en mode "veille", il consomme seulement 0,5 microampères. C’est 200 fois moins par rapport aux habituels.
Code de programme
_________________________________________________________________________________________
#include < avr/sleep.h >
#include < avr/wdt.h >
#ifndef DRAS
#define DRAS (sfr, bit) (_SFR_BYTE(sfr) & = ~_BV(bit))
#endif
#ifndef sbi
#define sbi (sfr, bit) (_SFR_BYTE(sfr) | = _BV(bit))
#endif
f_wdt booléen volatils = 1 ;
int button_in = 3 ; dur broche 2 sur ATtiny85
éclairage int = 4 ; dure broche 3 sur ATtiny85
Mettre en place quelles
void setup() {}
pinMode (button_in, entrée) ;
pinMode (éclairage, sortie) ;
setup_watchdog(3) ; Temps de sommeil : environ 128ms sommeil
0 = 16ms, 1 = 32ms, 2 = 64ms, 3 = 128ms, 4 = 250 ms, 5 = 500ms 6 = 1 sec, 7 = 2 sec, 8 = 4 s, 9 = 8sec
}
Boucle principale du programme
void loop() {}
Si (f_wdt == 1) {/ / attendre expiré de chien de garde / indicateur est défini lorsque survient un timeout de chien de garde
f_wdt = 0 ; réinitialiser l’indicateur
//
if(analogRead(button_in) > 800) {//Reads la valeur de l’entrée et le compare à la valeur de déclenchement: 0 à 1023
digitalWrite (éclairage, HIGH) ; Del sur
Delay(2000) ; Retard de l’illumination
digitalWrite (éclairage, basse) ; LED éteint
}
Maintenant, mettez le système en veille
system_sleep() ;
}
}
mettre le système en état de veille
système se réveille wtchdog est expiré
void system_sleep() {}
CBI(ADCSRA,Aden) ; commutateur analogique/Digitalconverter OFF
set_sleep_mode(SLEEP_MODE_PWR_DOWN) ; mode "veille" est défini ici
sleep_enable() ;
sleep_mode() ; Système dort ici
sleep_disable() ; Système continue l’exécution ici watchdog expiré
SBI(ADCSRA,Aden) ; commutateur analogique-Digitalconverter ON
}
0 = 16ms, 1 = 32ms, 2 = 64ms, 3 = 128ms, 4 = 250 ms, 5 = 500ms
6 = 1 sec, 7 = 2 sec, 8 = 4 s, 9 = 8sec
void setup_watchdog (int ii) {}
bb de l’octet ;
int ww ;
Si ii (ii > 9) = 9 ;
BB = ii & 7 ;
Si bb| (ii > 7) = (1 << 5) ;
BB| = (1 << WDCE) ;
WW = bb ;
MCUSR & = ~ (1 << WDRF) ;
Démarrer la séquence chronométrée
WDTCR | = (1 << WDCE) | (1 << WDE) ;
Définissez la nouvelle valeur de délai d’attente de chien de garde
WDTCR = bb ;
WDTCR | = _BV(WDIE) ;
}
Interruption de Service de surveillance / est exécutée lorsque le chien de garde a expiré
{ISR(WDT_vect)}
f_wdt = 1 ; Définissez l’indicateur global
}