Stap 12: Program de ATtiny
1 download dit bestand: https://github.com/damellis/attiny/zipball/Arduino1
2 Unzip en zet de "attiny" map in de map "hardware" waar tha Arduino op uw PC is geïnstalleerd. Het pad ziet er als volgt: documenten > Arduino > hardware > attiny > (andere gedownloade bestanden... enz)
3 start de toepassing van de Arduino en de ArduinoISP uit het bestand openen > voorbeelden menu
4 uploaden van de schets aan de Arduino Uno.
5 nu de volgende instellingen wijzigen:
6 Controleer de ATtiny85 (8 Mhz) checkbox in de Tools > Pension menu.
7 check de: "Arduino als ISP" in de Tools > menu Programmer.
Pins aansluitingen:
ATtiny:: Arduino Uno
1 :: 10
5 :: 11
6 :: 12
7 :: 13
4 :: GND
8 :: 5V
Download de bijlage en het uploaden van mijn code naar uw ATtiny85!
Kenmerken van de code:
Als u wijzigen de input trigger-waarde wilt, wijzig het "800", die ik heb iets tussen 0 tot 1023 (0 is 0.00V, zoals 1023 5.00V is).
In het geval dat u wilt wijzigen van de periode van de verlichting, omzetten in mijn "2000" alles wat die je wilt. 2000 in mijn geval komt overeen met 15 seconden.
Slaapstand
De ATtiny is geprogrammeerd om het energieverbruik te minimaliseren. Niet alleen het is ingeschakeld alleen als de multimeter is ingeschakeld, maar wanneer zij actief is, het gaat in slaapstand tijdens het wachten voor het ingangssignaal. Deze optie is ingeschakeld door de watchog-functionaliteit. Onze ATtiny "sleeps" voor 128 miliseconden en "wakker" alleen om te controleren welke invoerwaarde. Als er geen hoge het gaat weer slapen, anders blijkt de output op gedurende 15 seconden en na dat tirns het af en gaat dan slapen. Dit bespaart veel macht, omdat wanneer de micricontroller in de slaapstand staat is, slechts 0,5 microamps verbruikt. Dit is 200 keer minder ten opzichte van gebruikelijke.
Programma-Code
_________________________________________________________________________________________
#include < avr/sleep.h >
#include < avr/wdt.h >
#ifndef cbi
#define cbi (sfr, bit) (_SFR_BYTE(sfr) & ~_BV(bit)) =
#endif
#ifndef sbi
#define sbi (sfr, bit) (_SFR_BYTE(sfr) | = _BV(bit))
#endif
vluchtige Boole f_wdt = 1;
int button_in = 3; vaste pin 2 op ATtiny85
int verlichting = 4; vaste pin 3 op ATtiny85
Instrictions instellen
VOID Setup {}
pinMode (button_in, INPUT);
pinMode (verlichting, OUTPUT);
setup_watchdog(3); Slaap tijd: ongeveer 128ms slaap
0 = 16 MS, 1 = 32ms, 2 = 64ms, 3 = 128ms, 4 = 250ms, 5 = 500ms 6 = 1 sec, 7 = 2 sec, 8 = 4 sec, 9 = 8 sec
}
Hoofdprogramma lus
void loop {}
Als (f_wdt == 1) {/ / wachten op de time-out van de watchdog / vlag wordt ingesteld wanneer een time-out van de watchdog
f_wdt = 0; resetten van de markering
//
if(analogRead(button_in) > 800) {//Reads de waarde van de input en vergelijkt het met de trigger-waarde: 0 tot 1023
digitalWrite (verlichting, hoge); LED's op
delay(2000); Verlichting vertraging
digitalWrite (verlichting, laag); LED's uit
}
Nu zet het systeem om te slapen
system_sleep();
}
}
systeem in de slaapstand
systeem wakker wanneer wtchdog een time-out opgetreden is
ongeldig system_sleep() {}
CBI(ADCSRA,ADEN); switch analoog naar Digitalconverter af
set_sleep_mode(SLEEP_MODE_PWR_DOWN); slaapstand ligt hier
sleep_enable();
SLEEP_MODE(); Systeem slaapt hier
sleep_disable(); Systeem blijft uitvoering hier als waakhond time-out
SBI(ADCSRA,ADEN); switch analoog aan Digitalconverter
}
0 = 16 MS, 1 = 32ms, 2 = 64ms, 3 = 128ms, 4 = 250ms, 5 = 500ms
6 = 1 sec, 7 = 2 sec, 8 = 4 sec, 9 = 8 sec
VOID setup_watchdog (int ii) {}
byte bb;
int de ww;
Als (ii > 9) ii = 9;
BB = ii & 7;
Als (ii > 7) bb| = (1 << 5);
BB| = (1 << WDCE);
WW = bb;
MCUSR & = ~ (1 << WDRF);
Start van de getimede volgorde
WDTCR | = (1 << WDCE) | (1 << WDE);
nieuwe waakhond-outwaarde instellen
WDTCR = bb;
WDTCR | = _BV(WDIE);
}
Watchdog Service onderbreken / wordt uitgevoerd wanneer de watchdog time-out
ISR(WDT_vect) {}
f_wdt = 1; globale vlag instellen
}