ADC - AVR ATmega16 - Uložení dvou hodnot napětí z portA a B

Dobrý den,
chtěl bych se zeptal, potřebuji do ATmegy16 načítat dvě napětí a dále s nimi pracovat v programu. Mám nastavené potřebné registry u ad převodníku, ale potřeboval bych tuto hodnotu uložit do proměné. Problém je s tím že mi přichází dvě takže potřebuji aby na portuA s pinu 0 mi šlo do jedné proměnné a s pinu 1 do druhé proměnné. Nevíte jak tyto hodnoty převést do intu nebo floatu? abych snimi mohl snadno pracovat.

:arrow_right: administrator: přejmenováno z "adc avr ATmega16"

Co takhle :

[code]
unsigned int Read_ADC(unsigned char channel)
{
ADMUX &= 0xF0; // vloz cislo kanala, vymaskuj nepouzite bity
ADMUX |= channel & 0x0F;
ADCSRA |= (1 << ADSC); // start prevodu A/D

while(!(ADCSRA & (1<<ADIF)));		              // cekej na priznak skonceni prevodu


    return ADC;					             //  navratova hodnota - vysledek A/D prevodu

}

int main(void)
{
unsigned int adc, adc1, adc2 ;

ADMUX |= (1 << REFS0); //reference 5V + pridano ADLAR (pro rozliseni 8 bitu)

ADCSRA |= (1 << ADEN) | (1 << ADIF) | (1 <<ADPS2) | (1 <<ADPS1) | (1 <<ADPS0);

// povoleni AD prevodnika, Interrupt flag, preddelicka 128 pri frekvencii hodin 8MHz

sei(); // povol globalni preruseni

while(1)

{

adc = Read_ADC(0); // mereni napeti ADC0
adc1= Read_ADC(1); // mereni napeti ADC1
adc2= Read_ADC(2); // mereni napeti ADC2
} [/code]

Super moc děkuji to mi pomůže

Já jsem se učil pracovat s A/D převodníkem atmegy na tajned.cz/2013/12/zaklady-ov … ik-1-cast/ . Je tu i spousta jiných věcí, které můžou pomoc.

Ve funkci Read_ADC() chybí vymazání příznaku.
Já používám toto:

[code]#define REF_AVCC (1<<REFS0)
#define REF_2_56V (1<<REFS0)|(1<<REFS1)

unsigned int adc_read(unsigned char channel)
{
ADMUX = REF_AVCC | channel;
ADCSRA |= (1 << ADSC); // start prevodu
while(ADCSRA & (1<<ADSC)); // cekej na skonceni prevodu
return ADC;
}
[/code]