Temperatursensor MCP9700 und messen negativer Temperaturen

#3299758
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.
#3300523
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren