mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik [AT91SAM7A2] Problem mit ADC und lesen vom DR


Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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:
void InitAdc0(void) {
  ADC0->ECR = ADC;       // enable clock for adc
  ADC0->CR  = SWRST;      // software reset
  ADC0->MR  = STARTUPTIME(0x78); // Startuptime to get 4µs (=120 period at 30Mhz cpu_clk)
  //ADC0->MR  = PRLVAL(0x30); 
  ADC0->MR  |= (0x03 << 2);   // set PRVAL to 01100(00) = 48 -> ADC_CLK = 625KHz
  ADC0->CR  = ADCEN;       // enable ADC 
  ADC0->MR = CONTCV;       // Continuous Conversion
  ADC0->CMR = CV1IN0;      // Channel 1 - Inputline 0
}

und so lese ich die Daten:
unsigned int GetAdc0Data(void) {
  unsigned int result;
  // wait for end of convertion
  while(!(ADC0->SR = READY ));
  UARTString("\n\r ADC0 ready... ");
  while(!(ADC0->SR = EOC ));  // wait for End of conversation
  result = ADC0->DR; //read Data Register
  UARTString("reading ADC0");
  return result;
}

Immer kommt als Ergebniss Null heraus, wie kann das sein?

EDIT: ich habe jetzt mal
result = ADC0->DR; //read Data Register
 in
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

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
okay... ein paar fehler sind beseitig... c is noch nicht so ganz 
meins...
void InitAdc0(void) {
  ADC0->ECR = ADC;       // enable clock for adc
  ADC0->CR  = SWRST;      // software reset
  ADC0->MR  = STARTUPTIME(0x78); // Startuptime to get 4µs (=120 period at 30Mhz cpu_clk)
  //ADC0->MR  = PRLVAL(0x30); 
  ADC0->MR  |= (0x03 << 2);   // set PRVAL to 01100(00) = 48 -> CORECLK/48 = ADC_CLK = 625KHz
  ADC0->CR  |= ADCEN;       // enable ADC 
  ADC0->MR |= CONTCV;       // Continuous Conversion
  ADC0->CMR = CV1IN0;      // Channel 1 - Inputline 0
}
unsigned int GetAdc0Data(void) {
  unsigned int result;
  // wait for end of convertion
  while(!(ADC0->SR & EOC ));  // wait for End of conversation
  UARTString("\n\r ADC0 ready... ");
  result = (ADC0->DR & DATA); //read Data
  UARTString("reading ADC0");
  return result;
}

leider passt es aber immernoch nicht. Er gibt mir immer 1023 aus :(

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
schön... ich weiss sowas könnte man wissen, aber wieso schreibt man 
sowas nicht einfach auch in die Dokumentation rein?

Der Pin VREFP0 muss zum Beispiel mit den 3,3V vom Nachbarpin verbunden 
sein!

Arg... fast 2 Wochen arbeit und rumprobieren die man sich hätte sparen 
können, und Olimex is auch nen *****verein. Die wollen einem glaube ich 
gar nicht helfen...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.