Paso 2: El Attiny y el código
#include
#ifndef cbi / / este y OSE para liarla con bits en los registros.
#define cbi (sfr, bits) (_SFR_BYTE(sfr) & = ~_BV(bit))
#endif
#ifndef OSE
#define OSE (sfr, bits) (_SFR_BYTE(sfr) | = _BV(bit))
#endif
void setup() {//everything es en la configuración, sólo tenemos que leer una vez. El procesador se reinicie en su lugar para lecturas adicionales
analogRead (2); //take un montón de lecturas, como a veces la primera lectura del analogRead no es confiable
analogRead(2);
analogRead(2);
analogRead(2);
analogRead(2);
analogRead(2);
analogRead(2);
analogRead(2);
DDRB = 0x1f; //set a 5 salidas a la salida. Este es el equivalente de pinMode 5 veces
retardo (1); //several esperas aquí sólo para asegurarse de que la lectura es buena. No es bucle, por lo que unos pocos milisegundos de retraso aquí y allí no será un problema
uint8_t bajo, alto; //the bytes alto y bajo de la ADC
ADMUX = 0b00001100; valor //the de análogo a Digital multiplexor (por lo tanto, ADMUX). Esto Lee una referencia ~1.1V generados internamente
Delay (10); //wait un tiempo para el cambio de trabajo
OSE (ADCSRA, ADSC); //start «analogRead()»
mientras que (bit_is_set (ADCSRA, ADSC)); //wait para el procesador que terminas de leer
bajo = ADCL; //read la salida una vez que se hace
alta = ADCH;
int v = (alto << 8) | bajo; //shift los bits altos, ya que de un poco de 10 leer, y por lo tanto necesita dos bytes
sin firmar largo voltaje = 1125300L/v; //convert a voltaje (en milivoltios)
voltaje-= 1500; //this es la tensión "vacía" de 0 en la pantalla
voltaje / = 50; / / divisor, encontrar la parte superior de su gama, restar la parte inferior y dividir por 30 para obtener este número.
PORTB = (voltaje y 0b00011111); //mask la salida de sólo el cinco bajar pedacitos (que es probablemente innecesario, pero no hiurt) y sacó a los pasadores
retardo (3000); //give nos tres segundos para ver la salida
PORTB = 0; //and apagar los LEDs.
DDRB = 0; //set a alta imedence para ahorrar energía
CBI(ADCSRA,Aden); / / apaga el convertidor de analógico a Digital
set_sleep_mode(SLEEP_MODE_PWR_DOWN); configurar para poder bajar tan totalmente como sea posible, para el uso de la energía mínima
PRR = PRR | 0b00001111; //this línea apaga básicamente todo lo que una vez que entra en modo de reposo
sleep_enable (); //allow el dispositivo para entrar en modo de suspensión,
sleep_mode (); //and finalmente, apáguela. Nunca necesitamos salir del modo de sueño, como cuando tan automáticamente reajustado.
}
void loop() {}; //we no necesita hacer nada