Sida 2 av 2

Postat: 18 november 2007, 23:16:12
av björn
läs då databladet igen...
PORTA är *inte* ADC ingångar utan används antingen som digitala i/o eller för externt minne. Däremot ligger de åtta (singelended) ADC ingångarna just på PORTF.

Så du kan glömma att använda PORTA som ADC ingångar (jag vet att beteckningen ADx på portA är lite missavisande men så är det)

EDIT; Har du kollat på avdelningen "Alternative port functions" i databladet?

Postat: 19 november 2007, 00:35:20
av Stinrew
Ok, nu förstår jag problemet. AD0(ADdress bit 0) har tyvärr inget med A/Dn att göra ADC0(Analog to Digital Converter bit 0) är det du är intresserad av. Mao. ska du mata in din analoga signal på pinne 61(PF0) istället för på pinne 51(PA0)

Postat: 19 november 2007, 01:12:00
av mullemeck
Hej när jag läser av AD:n utan att köra den interruptstyrd brukar jag använda ADIF flagga för att kolla när den är klar.
Brukar funka för mig.

Snippar in en bit kod som funkar för mig.
För att initiera AD:n

Kod: Markera allt

	ADMUX = _BV(REFS0)|_BV(REFS1); // intern 2.56v referens
	ADCSRA = _BV(ADEN)|_BV(ADPS1)|_BV(ADPS2); // clk/64
Funktion som läser av en av kanalerna

Kod: Markera allt

uint16_t getAd(uint8_t kanal){
	static uint16_t data;
	ADMUX &= ~0x1f;
	ADMUX |= kanal;
	ADCSRA |= _BV(ADSC);
	while((ADCSRA & _BV(ADIF)) == 0);
	ADCSRA |= _BV(ADIF);
	data = ADCL;
	data |= ADCH << 8;
	return data;
	
}

Postat: 19 november 2007, 14:00:42
av klintan
aa tack nu klarna det hela lite iaf :) ska pröva ikväll.