Hallo Leute,
Ich habe zurzeit ein kleines Problem. Und zwar wollte ich gerne mit dem
Internalen Temperatur Sensor des ATMega328P die Temperatur auf mein LCD
anzeigen lassen. Aber es kommt auf mein LCD nur:
CPU Infos:
CPU Time: 0:0:10 //Uptime
CPU Temp: ? -C //Temperatur
Im Datenblatt steht man soll die Interne 1.1 Volt Referenz Spannung
auswählen und Channel 8 mit MUX3 Selektieren. Dieses habe ich gemacht.
Nur es kommt halt nur das Fragezeichen zurück. Was mache ich falsch? Aso
ein 100 NF Kondensator ist zwischen AREF und AGND geschaltet.
Hier mein Code:
1 | double getTemp(void) {
|
2 | unsigned int rawADC;
|
3 | double returnedTemp;
|
4 |
|
5 | ADMUX = (1<<REFS1) | (1<<REFS0) | (1<<MUX3); //Mit REFS1 und REFS0 die Interne Referzen Spannung wählen(1.1V). Mit MUX3 die Kanal 8 auswählen
|
6 | ADCSRA |= (1<<ADEN); //Denn ADC Aktivieren
|
7 |
|
8 | _delay_ms(20); //Kurz Warten
|
9 |
|
10 | ADCSRA |= (1<<ADSC); //Erste Konversation starten
|
11 |
|
12 | while(ADCSRA & (1<<ADSC)) {} //Warten auf Abfluss der ersten Konversation
|
13 |
|
14 | rawADC = ADCW; //Denn Int rawADC mit ADCL und ADCH füllen
|
15 | returnedTemp = (rawADC - 324.31) / 1.22; //Runde
|
16 |
|
17 | return (returnedTemp); //Zurückgeben
|
18 | }
|
Und um es an das LCD zu senden:
1 | char temperatur[100];
|
2 |
|
3 |
|
4 | sprintf(temperatur, "CPU Temp: %0.2f", getTemp());
|
5 | lcd_clear();
|
6 | lcd_setCursor(0, 3); // 20x4 LCD
|
7 | lcd_string(temperatur);
|
Mfg Jan Hampel