Hallo Forum,

hier wieder ein Schnipsel für die Portabfrage (analog).

Code:
uint16_t RN_Control_Board::analog(uint8_t i)
{
  uint8_t ad_wert = 0;

  if ((i<0) || (i>7)) return -1;	//falsche Eingabe

  ADMUX=i;                       	// Eingang wählen
  cbi(ADCSRA, ADFR);				// single-Wandlung einstellen
  cbi(ADMUX, ADLAR);             	// left adjust ist nicht aktiv 
  sbi(ADCSRA, ADEN);				// ADC enable
  
  sbi(ADCSRA, ADSC);             	// A/D-Wanldung starten
  while (ADCSRA & 64);           	// auf 0 warten, dann ist Wandlung beendet
  ad_wert = ADCW;					// Low- und High-Byte in einem Schritt kopieren.
									// In ad_wert (16 Bit) steht jetzt der 10-Bit-A/D-Wert (0...1023)
  return ad_wert;
}
In diesem Programm (eine c++ Funktion) wird der integer-wert des Einganges übergeben, der ausgewertet werden soll.
Danach erfolgt die Initioalisierung des A/D-Wandlers und die Wandlung selbst.

Ich denke, man kann das noch "schicker" machen, aber mir reichts.

Bis denn... Klaus