PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : klassse für adc



timfri
29.01.2007, 19:37
hallo,

ich hab n problem mit meiner klasse für den adc.
beim debuggen scheint das ganze zu funktioniern, und man kann damit arbeitn, nur dummerweise aufm controller dann nich.

ich hab die klasse zusammen mit den methoden mal in ne datei verpackt und hochgeladen.

freu mich über jede hilfe. 8-[

ogni42
29.01.2007, 19:58
Du wartest auf den Interrupt, aber der ist gar nicht enabled.

Statt dessen ist folgendes besser:


inline uint8_t readADC0( void )
{
ADCSRA |= (1<<ADSC); //start conversion
// wait until conversion complete
while ( ADCSRA & (1<<ADSC) )
{
;
}

return ADCH; // 8 bit read
}


void initADC( uint8_t adcPrescaler )
{
// External VRef (2.5V), ADC Pin0, Left adjusted result (we use only 8 bits)
// hence ADCSRB doesn't need modification
ADMUX = (1<<ADLAR);
DIDR0 = (1<<ADC0D);
// prescaler 64 ( =288KHz at 18.432MHz CPU clock)
// prescaler 128( =144KHz at 18.432MHz CPU clock)--> | (1<<ADPS0)
ADCSRA = (1<<ADEN) | adcPrescaler;
}

izaseba
29.01.2007, 19:59
Ich weiß zwar nicht, was bei Dir da nicht klappt, aber das hier ist misst


m_AnalogData[Channel] = ADCL; // gelesenes Signal in vor-
m_AnalogData[Channel] += ADCH;

Du mußt die zwei Bits von ADCH an die richtige Stelle schieben und nicht addieren, etwa so


m_AnalogData[Channel] = ADCL; // gelesenes Signal in vor-
m_AnalogData[Channel] += (ADCH<<8);

bL1nK
04.02.2007, 18:43
soweit ich weiß kann ma mit ADC beide register gleichzeitig auslesen, da muss ma sich dann keine sorgen machen :)

ogni42
04.02.2007, 18:47
Wenn Du beide register willst:



uint16_t result = ADC;


Den Rest macht der Compiler.

bL1nK
04.02.2007, 18:55
ich lieber compiler ;) ASM is irgendwie nicht meine welt :P

naja und noch ein kleiner tipp am rande, ich weiß jetzt net ob das der compiler macht, aber maskier die obersten 6 bit aus (wenn du 10bit ADC) hast ;)

timfri
06.02.2007, 11:11
hm. danke erstmal.

also auf meim stk500 funktioniert das ganze jetzt jedenfalls.
muss ich wohl n fehler auf meiner platine haben.

danke nochmal. :)