Stap 2: De Attiny en de Code
#include
#ifndef cbi / / deze en sbi zijn voor het knoeien met stukjes in registers.
#define cbi (sfr, bit) (_SFR_BYTE(sfr) & ~_BV(bit)) =
#endif
#ifndef sbi
#define sbi (sfr, bit) (_SFR_BYTE(sfr) | = _BV(bit))
#endif
void setup {//everything is in setup, omdat we slechts nodig hebt om te lezen een keer. De processor is in plaats daarvan reset voor extra lezingen
analogRead (2); een bos van lezingen, als soms de eerste lezing van analogRead //take is onbetrouwbaar
analogRead(2);
analogRead(2);
analogRead(2);
analogRead(2);
analogRead(2);
analogRead(2);
analogRead(2);
DDRB = 0x1f; //set uit 5 uitgangen naar uitvoer. Dit is het equivalent van pinMode 5 keer
vertraging (1); //several wacht hier alleen maar om ervoor te zorgen dat het lezen een goeie is. Het is niet in een lus, dus een paar milliseconden vertraging hier en daar zal niet een probleem
uint8_t lage, hoge; //the laag en hoog bytes van de ADC
ADMUX = 0b00001100; //the waarde van de analoog naar digitaal MUltipleXer (dus ADMUX). Dit leest een intern gegenereerde ~1.1V referentieprijs
vertraging (10); //wait een tijdje voor de verandering om te werken
SBI (ADCSRA, ADSC); //start de "analogRead()"
terwijl (bit_is_set (ADCSRA, ADSC)); //wait voor de processor tot het einde van de lezing
laag = ADCL; //read de output zodra het wordt gedaan
hoog = ADCH;
int volt = (hoge << 8) | laag; //shift de hogere bits over, als het is een 10 bit lezen, en daarom moet u twee bytes
unsigned long spanning = 1125300L/volt; //convert het voltage (in millivolts)
spanning-= 1500; //this is de "lege" spanning, 0 op het display
spanning / = 50; / / scheidingslijn, vinden de bovenkant van uw bereik, aftrekken van de bodem, en wordt gedeeld door 30 om dit nummer.
PORTB = (spanning & 0b00011111); //mask de output moet gewoon de vijf lagere stukjes (die is waarschijnlijk niet nodig, maar niet hiurt), en stak het op de pinnen
vertraging (3000); //give ons drie seconden om te zien de output
PORTB = 0; //and de LEDs uitschakelen.
DDRB = 0; //set hen aan hoge imedence om energie te besparen
CBI(ADCSRA,ADEN); / / uitzetten van de analoog naar digitaal converter
set_sleep_mode(SLEEP_MODE_PWR_DOWN); Stel deze aan de macht naar beneden zo volledig mogelijk te zijn, voor een minimaal stroomverbruik
PRR = PRR | 0b00001111; //this lijn afgesloten in principe alles eenmaal slaapmodus wordt
sleep_enable (); //allow het apparaat om de modus van de slaap,
SLEEP_MODE (); //and ten slotte het uitgeschakeld. We moeten nooit slaapstand, verlaat zoals het dus automatisch wanneer de beginwaarden ingesteld.
}
void loop {}; //we niet nodig hebben om iets te doen