ADC im ATMEGA28

Gast #217364
Ich hatte so einige Experimente mit dem ADC unter dem ATmega16 gemacht.
Beim ATMEGA 128 bekomme ich aber nicht so meine Werte, wie ich messen
will raus. Die Initialisierung sieht so aus:

char adc_tab[] = {
  15, 47, 47, 47, 47, 47
};

unsigned short adc_field[ADC_CHANNELS] = {
  0, 0, 0, 0, 0, 0
};

DDRF = 0x00;
ADMUX |= 1<<REFS1 | 1<<REFS0;
ADCSRA |= 1<<ADPS2 | 1<<ADPS1 | 1<<ADPS0 | 1<<ADEN;

Das messen und ausgeben so:

unsigned short       i;
unsigned char       av, amv;
char         conv_buf[5];
unsigned char       count;

for (count = 0; count < ADC_CHANNELS; count++) {
  ADCSRA |= 1<<ADSC;
  while (ADCSRA & (1<<ADSC));
  i = ADC * (256 * 100 / 1024) / 100;
  i = i * (adc_tab[count] + 10) / 10;
  adc_field[count] = i;
  av = i / 100;
  amv = (i - av * 100);
  uart1_puts("\r\nADC");
  itoa(count, conv_buf, 10);
  uart1_puts(conv_buf);
  uart1_puts(": ");
  itoa(av, conv_buf, 10);
  uart1_puts(conv_buf);
  uart1_puts(".");
  itoa(amv, conv_buf, 10);
  uart1_puts(conv_buf);
  uart1_puts(" V\r\n");
  ADMUX++;
}
ADMUX &= ~(0x1F);

Mache ich da einen Programmfehler oder ist das alles richtig und ein
HW-Problem liegt evtl. vor? An allen Kanälen liegen ca. 2V an. Die
Hardware ist so verdrahtet. Umgerechnet wird an Hand der festgelegten
Spannungsteiler (0 = 15k / 10k -> 5V, 1 = 47 / 10k -> 12V, 2 ...).
Aber an der Umrechnung liegt es nicht. Die ausgerechnete Spannung ist
ziemlich genau halb so hoch, wie reell sein sollte.

Es liegen genau 2V an den Eingängen an ... und somit müsste was in ADC
steht so um die 800 - 900 liegen. Es liegt aber auch hier bei der
Hälfte.

Hier mal der Output:

ADC0: 2.55 V
ADC1: 5.64 V
ADC2: 5.64 V
ADC3: 5.70 V
ADC4: 5.70 V
ADC5: 5.70 V

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.