Atmega8 - vlastní rutina pro AD převodník

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í.***