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;
}