Wert an Unterfunktion zurückggeben
-
Habe ein unterprogramm, welches ich im hauptprogramm aufrufe (es ließt die Temperatur von nem Sensor aus) nun müsste ich die Variable der Temperatur (TempH und TempL) an die Unterfunktion zurückgeben damit ich sie im Hauptprogramm weiter verarbeiten kann. Dabei enden meine Fähigkeiten... kann mir da jemand helfen?
Ich will im Main Programm dann nur das Unterprogramm TempMessung aufrufen aber die Variablen TempH und TempL weiterhin verwenden können.
Hier mal der Code der Unterfunktion:
void TempMessung (void) { unsigned char TempH, TempL; i2c_start(); i2c_write(0x90); i2c_write(0xAA); i2c_start(); i2c_write(0x91); i2c_master_ack(); TempH = TWDR; i2c_master_nak(); TempL = TWDR; i2c_stop(); lcd_cursor(70); lcd_zahl(2, TempH); lcd_cursor(72); lcd_zeichen(','); if (TempL & 0b10000000) { lcd_zeichen('5'); } else { lcd_zeichen('0'); } //_delay_ms(500); // alle 0,5s den Temperaturwert ermitteln }
-
void TempMessung( unsigned char *o_tempH, unsigned char *o_tempL ) { ... *o_tempH = tempH; *o_tempL = tempL; } int main( void ) { unsigned char TempH, TempL; while( 1 ) { TempMessung( &TempH, &TempL ); ... } }
Vieleicht ist es aber auch sinnvoll, tempH und tempL in ein int zu packen:
unsigned int temp = tempH<<8 | tempL;
BTW.: Pass auf, daß im Winter keine Hitzewelle gemessen wird.
mfg Martin
-
Oder die Werte in ein struct packen und diesen zurückgeben.
-
Das ist ein absolutes Lowlevel-Interface. Offenbar stehen tempH und tempL für das Hi- und Lo-Byte eines 16-bittigen Sensorwertes, der erst irgendwie in einen Temperaturwert zurückgerechnet werden muss. Es bietet sich daher tatsächlich ausnahmsweise an, die beiden in eine Variable zu packen, allerdings würde ich unsigned short verwenden statt unsigned int:
unsigned short temp = tempH << 8 | tempL;
-
ok das mit der Werteübergabe funktioniert super.
danke euchüber den befehl
if (TempL & 0b10000000) { lcd_zeichen('5'); } else { lcd_zeichen('0'); }
lasse ich die den temperaturwert +- 0,5 anzeigen.
ich versuch gerade die temperatur hinter dem komma noch genauer darzustellen aber komme auf keinen roten faden...falls sich dass mal jemand anschauen könnte steht im datenblatt auf seite 4 ganz unten
http://pdf1.alldatasheet.com/datasheet-pdf/view/58507/DALLAS/DS1621.html
-
aboutblank schrieb:
ok das mit der Werteübergabe funktioniert super.
danke euchüber den befehl
if (TempL & 0b10000000) { lcd_zeichen('5'); } else { lcd_zeichen('0'); }
lasse ich die den temperaturwert +- 0,5 anzeigen.
ich versuch gerade die temperatur hinter dem komma noch genauer darzustellen aber komme auf keinen roten faden...falls sich dass mal jemand anschauen könnte steht im datenblatt auf seite 4 ganz unten
http://pdf1.alldatasheet.com/datasheet-pdf/view/58507/DALLAS/DS1621.htmlIch habe jetzt das Datenblatt nicht gelesen aber ich nehme mal an, daß die Nachkommastellen der Temparatur einfach auf die 256 möglichern Werte des chars abgebildet werden. Dann ist das doch einfach ein simpler Dreisatz.
double temp = ((double)TempL) / 256.0;
mfg Martin
-
aboutblank schrieb:
ok das mit der Werteübergabe funktioniert super.
danke euchüber den befehl
if (TempL & 0b10000000) { lcd_zeichen('5'); } else { lcd_zeichen('0'); }
lasse ich die den temperaturwert +- 0,5 anzeigen.
ich versuch gerade die temperatur hinter dem komma noch genauer darzustellen aber komme auf keinen roten faden...falls sich dass mal jemand anschauen könnte steht im datenblatt auf seite 4 ganz unten
http://pdf1.alldatasheet.com/datasheet-pdf/view/58507/DALLAS/DS1621.htmlJetzt hab ich doch mal reingeschaut. Hast Du's etwa nicht? Da steht ganz klar. Die Auflösung des Sensors ist 0.5 °C.
The DS1621 can measure temperature over the range of –55°C to
+125°C in 0.5°C increments.The second byte would contain the value of the least significant (0.5°C) bit of the temperature reading as shown in Table
1. Note that the remaining 7 bits of this byte are set to all "0"s.Es macht also keinen Sinn, die Temperatur genauer darzustellen.
mfg Martin
-
ok dann hat sich das auch erledigt
aber danke fürs drüberschauen. hab mir das selbe gedacht aber unser ausbilder meinte ob wir dass nicht genauer darstellen können