A/D strul på AVR

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
björn
EF Sponsor
Inlägg: 2570
Blev medlem: 29 mars 2004, 23:09:55

Inlägg 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?
Användarvisningsbild
Stinrew
Inlägg: 954
Blev medlem: 20 augusti 2006, 03:14:41
Ort: Motala
Kontakt:

Inlägg 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)
mullemeck
Inlägg: 1306
Blev medlem: 27 maj 2003, 23:52:06
Ort: Lund
Kontakt:

Inlägg 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;
	
}
klintan
Inlägg: 307
Blev medlem: 13 juni 2003, 01:59:05
Ort: Ekerö

Inlägg av klintan »

aa tack nu klarna det hela lite iaf :) ska pröva ikväll.
Skriv svar