Arduino interner Temeratursensor

Guten Morgen,
Ich versuche zur Zeit den internen Temperatursensor zum Laufen zu kriegen,
bekomme aber ständig nur den selben Wert auch nach Temperaturerhöhung.

Aus dem Datenblatt ab Seite 253
http://www.atmel.com/Images/Atmel-8271-8-bit-AVR-Microcontroller-ATmega48A-48PA-88A-88PA-168A-168PA-328-328P_datasheet_Complete.pdf

habe ich gelesen, dass man zunächst im ADMUX Register die Referenzspannung auf 1.1V stellen und dann
den Temperatursensorkanal am Multiplexer wählen muss.
Anschließend zu dem habe ich den ADC angeschaltet und den ADC Interrupt aktiviert, der ausgelöst wird sobald er
fertig ist.

Nun weiß ich nicht, was ich falsch gemacht habe und oder was noch fehlt, so dass ich die "richtigen" Temperaturen bekomme.

Sketch:

volatile float tempera;
volatile boolean toggle;

void setup()
{  
  //Referenzspannung einstellen und Temperatursensor am Multiplexer durchschalten
  ADMUX = (1 << REFS1)|(1 << REFS0)|(1 << MUX3);
  
  //ADC anschalten und Interrupts aktivieren
  ADCSRA = (1 << ADEN)|(1 << ADIE);
  
  //Auto Trigger einstellen
  //Fehlt noch
  
  sei();
  
  //Serielle Datenausgabe Initialisieren
  Serial.begin(9600);
}

void loop() 
{
  Serial.print("Temperatur "); Serial.println(tempera);
  
  //Nächsten Wert holen
  ADCSRA |= (1 << ADSC);
  
  delay(1000);
}

ISR(ADC_vect)
{
  int adcVal    = (ADCH << 8)|ADCL;
  float voltage = (adcVal*1.1f)/1023.0f;
  
  tempera = (70.0f/72.0f)*voltage + 24.6947f;  
}

http://code.google.com/p/tinkerit/wiki/SecretThermometer

Der ADC Interrupt ist eigentlich nur bei Auto-Triggerung sinnvoll, was bei einer Temperaturmessung wiederum Unsinn ist.

Ansonsten sollte man wie in dem Link oben das ADSC Bit auslesen:

ADSC will read as one as long as a conversion is in progress. When the conversion is complete, it returns to zero

Das hier ist glaube ich auch ein Fehler:

int adcVal    = (ADCH << 8) | ADCL;

Du musst immer erst das ADCL Register auslesen, es sei den Left Adjust ist aktiviert

Ok, danke für die Hilfe.
Das mit dem Link scheint zu funktionieren.

Das Tauschen von ADCH und ADCL in meinem Code hat leider nicht viel gebracht
der Wert der ausm ADC kommt bleibt 1024.