Hi,


nie aufgeben!




Probier mal den Kode hier aus. Damit wird der A/B Wandler gepollt und Du erhältst den echten Wert der ermittelt wird als resultat womit Du wiederum sehen kannst ob überhaupt eine Werteveränderung "gelesen" wird.
Code:
/*
4-Okt-2010
O.O. Müller

Einlesen vom ADC im Polling-Betrieb
*/

#include <avr/io.h>
#include "asuro.h"


#define ADC4    0x04

/*
aMux    ADC0, ADC1, ..., ADC7
aVal    pointer to 16 bit result value
*/
void adcReadChannel(uint8_t aMux,int16_t* aVal) {
  register int16_t tmp;

  // Analog comparator disable
  ACSR = (1 << ACD);

  // Enable AD conversion
  // Prescaler  8x (ADPS1, ADPS0)
  // Prescaler 32x (ADPS2, ADPS0)
  ADCSRA = (1 << ADEN) | (1 << ADPS2) | (0 << ADPS1) | (1 << ADPS0);

  // AREF, Internal Vref turned off.
  ADMUX = (0 << REFS1) | (0 << REFS0) | (aMux & 0x1F);

  // Start conversion
  ADCSRA |= (1 << ADSC) | (1 << ADEN);
  while (!(ADCSRA & (1 << ADIF)));

  // Calc value
  *aVal = (int16_t)ADC;

  ADCSRA = (1 << ADIF);
  ADCSRA &= ~(1 << ADEN);

}

void termWrite(char *aText) {
  // ...
  // ...
}

char term_getc(void) {
  // ...
  // ...
  //
  return 0;
}


uint8_t main(void) {
  uint16_t iADC;
  uint8_t szBuf[30];

  while (1) {
    // Daten lesen von ADC4
    adcReadChannel(ADC4, &iADC);

    // Daten ausgeben auf LCD/Terminal o.ä.
    sprintf(szBuf, "Gelesene Daten: %ld\n", iADC);
    termWrite(szBuf);

    // wait until key pressed
    sprintf(szBuf, "Taste drücken für weiter..\n");
    termWrite(szBuf);
    while (term_getc() == 0);

  }
}


/* EOF */

Lediglich termWrite und term_getc musst Du noch anpassen.

Gruss,

O