Hallo,
Ich habe hier einen AT91SAM7A2 liegen und verzweifle gerade mal wieder,
diesmal am ADC.
Es kommt bei mir immer 0 raus, fragt mich nicht wieso.
So initialisiere ich den ADC:
1 | void InitAdc0(void) {
|
2 | ADC0->ECR = ADC; // enable clock for adc
|
3 | ADC0->CR = SWRST; // software reset
|
4 | ADC0->MR = STARTUPTIME(0x78); // Startuptime to get 4µs (=120 period at 30Mhz cpu_clk)
|
5 | //ADC0->MR = PRLVAL(0x30);
|
6 | ADC0->MR |= (0x03 << 2); // set PRVAL to 01100(00) = 48 -> ADC_CLK = 625KHz
|
7 | ADC0->CR = ADCEN; // enable ADC
|
8 | ADC0->MR = CONTCV; // Continuous Conversion
|
9 | ADC0->CMR = CV1IN0; // Channel 1 - Inputline 0
|
10 | }
|
und so lese ich die Daten:
1 | unsigned int GetAdc0Data(void) {
|
2 | unsigned int result;
|
3 | // wait for end of convertion
|
4 | while(!(ADC0->SR = READY ));
|
5 | UARTString("\n\r ADC0 ready... ");
|
6 | while(!(ADC0->SR = EOC )); // wait for End of conversation
|
7 | result = ADC0->DR; //read Data Register
|
8 | UARTString("reading ADC0");
|
9 | return result;
|
10 | }
|
Immer kommt als Ergebniss Null heraus, wie kann das sein?
EDIT: ich habe jetzt mal
1 | result = ADC0->DR; //read Data Register
|
in
1 | result = DATA; //read Data Register
|
umgeschrieben. Jetzt bekomme ich immer 1023 anstelle von 0. Auch nicht
viel besser meiner Meinung nach. Ich weiss einfach nicht wie ich richtig
auslesen, bzw. ob ich überhaupt das richtige register auslese :(
Bitte helft mir
Gruß Chris