Nemusíš, stačí to nastavit na interní referenci.
[code]#include <avr/io.h>
//#include <util/delay.h>
// FCPU = 1MHz
#define LED_1_ON PORTD |= (1<<PD2) //LED 1 zapnout
#define LED_1_OFF PORTD &= ~(1<<PD2) //LED 1 vypnout
#define LED_2_ON PORTD |= (1<<PD3)
#define LED_2_OFF PORTD &= ~(1<<PD3)
unsigned int senzory[4];
void readSenzors(unsigned int senz)
{
//
unsigned char i;
for(i=0; i<4; i++)
{
ADMUX &= 0xF0; // zachovat nastavení reference, ostatní smazat
ADMUX |= i; // vybrat vstup
ADCSRA |= (1 << ADSC); // start konverze
while(!(ADCSRA & (1<<ADIF))); // počkat na dokončení konverze
ADCSRA |= (1<<ADIF); // vynulovat flag (nuluje se zápisem “1”)
senz = ADC;
}
for(i=1; i<4; i++)
{
if(senz* < senz[0]) senz* = 0;
}
}
void main(void)
{
ADMUX = (1<<REFS1) | (1<<REFS0); // vybran vstup 0, interní reference 2.56V
// doporučená Fadc <50, 200> kHz. 1MHz/200kHz = 5 -> minimální dělička je 8
ADCSRA |= (1<<ADEN) | (1 << ADPS1) | (1 << ADPS0);
DDRD |= (1 << DDD2) |(1 << DDD3);
for(;;)
{
readSenzors(senzory);
if(senzory[1]) LED_2_ON;
else LED_2_OFF;
if(senzory[3]) LED_1_OFF;
else LED_1_ON;
}
}
[/code]
V simulátoru to chodí.***