Forum: Mikrocontroller und Digitale Elektronik Temperatursensor MCP9700 und messen negativer Temperaturen


von H. G. (ledi)


Lesenswert?

Hallo,

ich messe mit einem ATMEGA88 und einem Temperatursensor MCP9700 die 
Umgebungstemperatur.
Für positive Temperaturen funktioniert das auch ganz gut.
1
while(1)
2
{
3
  ADCSRA |= (1<<ADSC);             // Start ADC-Wandlung
4
  while (ADCSRA &(1<<ADSC));       // Auf Abschluss der Konvertierung warten
5
  y = ADC;                         // 16-bit ADC-Wert in y speichern      
6
  y = y >> 6;                      // Einen 10-bit Wert in y speichern
7
  temperatur = ((y-102)*100)/204;  // Anpassung an die Temperaturkennlinie
8
                                   // y=kx+d
9
  PORTD = temperatur;              // Ausgabe der Temperatur auf PORTD
10
}

Wie mache ich es aber für negative Temperaturen?

Hier sollte eine LED z.B. am Portpin PB0 leuchten und sozusagen als 
negatives Vorzeichen dienen.

von Sascha W. (sascha-w)


Lesenswert?

Hallo,

deine Berechnung von Temperatur funktioniert auch für negative 
Temperaturen (wenn du für 'temperatur' & 'y' nicht gerade 
unsigned-Datentypen verwendest).
Wenn du den Wert auf ein Port ausgibts, erhälst du das Ergebnis als 
Zweierkomplement. Willst du das Vorzeichen auf ein extra Port ausgeben 
dann mach einfach folgendes.
1
...
2
if (temperatur<0) {
3
 PORTB|=(1<<0);
4
 temperatur = -temperatur;
5
} else {
6
 PORTB&=~(1<<0);
7
}
8
PORTD = temperatur;

Sascha

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.