Multimetern bakgrundsbelyst LCD-Mod (12 / 17 steg)
Steg 12: Programmera ATtiny
1 Ladda ner denna fil: https://github.com/damellis/attiny/zipball/Arduino1
2 Packa upp och sätta den "attiny" mappen i mappen "maskinvara" där tha Arduino är installerat på din dator. Banan ser ut så här: dokument > Arduino > Hårdvara > attiny > (andra nedladdade filer... etc)
3 Starta Arduino programmet och öppna ArduinoISP från filen > exempel på menyn
4 ladda upp skiss till Arduino Uno.
5 nu ändra följande inställningar:
6 kontrollera ATtiny85 (8 Mhz) kryssrutan i Verktyg > styrelsen menyn.
7 kontrollera den: "Arduino som ISP" i Verktyg > programmerare menyn.
Pins anslutningar:
ATtiny:: Arduino Uno
1:: 10
5:: 11
6:: 12
7:: 13
4:: GND
8:: 5V
Ladda ner den bifogade filen och ladda upp min kod till din ATtiny85!
Koden egenskaper:
Om du vill ändra indata trigger värdet, då ändra den "800" Jag har till något mellan 0 till 1023 (0 är 0.00V, som 1023 är 5.00V).
Om du vill ändra perioden belysning, ändra min "2000" till vad du vill. 2000 i mitt fall motsvarar 15 sekunder.
Viloläge
ATtiny är programmerad att minimera strömförbrukningen. Inte bara den drivs på endast om multimeter drivs på, men när det fungerar, det går in i viloläge fördriva tiden väntan för ingångssignalen. Detta möjliggörs av funktionen watchog. Våra ATtiny "sover" för 128 millisekunder och "vaknar upp" bara för att kontrollera indatavärdet. Om det inte är hög går det för att sova igen, annars det visar utdata på i 15 sekunder och efter det tirns det utanför och sedan går för att sova. Detta sparar mycket ström när micricontroller är i viloläge, den förbrukar endast 0.5 microamps. Detta är 200 gånger mindre än vanliga.
Programkod
_________________________________________________________________________________________
#include < avr/sleep.h >
#include < avr/wdt.h >
#ifndef cbi
#define cbi (sfr, lite) (_SFR_BYTE(sfr) & = ~_BV(bit))
#endif
#ifndef sbi
#define sbi (sfr, lite) (_SFR_BYTE(sfr) | = _BV(bit))
#endif
flyktiga boolean f_wdt = 1;
int button_in = 3; hårda stift 2 på ATtiny85
int belysning = 4; hårda stift 3 på ATtiny85
Ställ in Instrictions
void setup() {
pinMode (button_in, ingång);
pinMode (belysning, produktionen);
setup_watchdog(3); Sova tid: ca 128ms sömn
0 = 16ms, 1 = 32ms, 2 = 64ms, 3 = 128ms, 4 = 250ms, 5 = 500ms 6 = 1 SEK, 7 = 2 sek, 8 = 4 SEK, 9 = 8 SEK
}
Huvudprogrammet ögla
void loop() {
om (f_wdt == 1) {/ / vänta timeout watchdog / flaggan anges när en vakthund timeout inträffar
f_wdt = 0; återställa flagga
//
IF(analogRead(button_in) > 800) {//Reads värdet av indata och jämför den med värdet trigger: 0 till 1023
digitalWrite (belysning, hög); Lysdioderna på
Delay(2000); Belysning dröjsmål
digitalWrite (belysning, låg); Lysdioder av
}
Nu sätta systemet att sova
system_sleep();
}
}
ställa in systemet i lågeffektläge enligt
systemet vaknar upp när wtchdog är timeout
void system_sleep() {
CBI(ADCSRA,ADEN); Växla Analog till Digitalconverter av
set_sleep_mode(SLEEP_MODE_PWR_DOWN); viloläge är inställd här
sleep_enable();
sleep_mode(); Systemet sover här
sleep_disable(); Systemet fortsätter utförande här när watchdog timeout
SBI(ADCSRA,ADEN); Växla Analog till Digitalconverter på
}
0 = 16ms, 1 = 32ms, 2 = 64ms, 3 = 128ms, 4 = 250ms, 5 = 500ms
6 = 1 SEK, 7 = 2 sek, 8 = 4 SEK, 9 = 8 SEK
void setup_watchdog (int ii) {
byte bb;
int ww;
om (ii > 9) ii = 9.
BB = ii & 7.
om (ii > 7) bb| = (1 << 5);
BB| = (1 << WDCE);
WW = bb;
MCUSR & = ~ (1 << WDRF);
Starta tidsinställda ordning
WDTCR | = (1 << WDCE) | (1 << Mimmi);
Ange nya watchdog timeout-värde
WDTCR = bb;
WDTCR | = _BV(WDIE);
}
Watchdog avbryta tjänsten / exekveras när watchdog timeout
ISR(WDT_vect) {
f_wdt = 1; Ange globala flagga
}