Hallo, ich habe zwei KTY 81-122 mit einem 2,7 K und einem 1K Wiederstand an je einem AD Pin meines mega16 hängen. Nun rechne ich mit dieser Formel: unsigned int get_temp1 (void) { unsigned int t = 0; t = read_adc( 0 ); t = ((t/1.579) - 154 ); return t; } unsigned int get_temp2 (void) { unsigned int t = 0; t = read_adc( 1 ); t = ((t/1.579) - 304 ); return t; } den AD Wert in Grad C um, und lasse es auf einem LCD anzeigen: void display_temp (void) { temperatur1 = get_temp1(); temperatur2 = get_temp2(); lcd_high(2); sprintf( &lcd_buffer[0][0], " Temperatur "); sprintf( &lcd_buffer[1][0], " %3u \xdfC %3u \xdfC ", temperatur1, temperatur2); ecu_display_lcdbuffer( 2 ); } Wie errechne ich denn nun eigentlich minus Temperaturen? Sobald ich unter 0 Grad komme, habe ich einen Überlauf, und habe eine Temperaturanzeige von 65... ! Danke für Euere Hilfe! Gruß Toby
Hallo, nee, noch nicht wirklich. Auch wenn ich unsigned zu signed ändere, muß ich doch das Vorzeichen auswerten, nicht? Gruß Toby
na dann mach mal ein Koplement aus den 65 und werte das Vorzeichen aus. Signed !!
Hallo, könntet Ihr mir das etwas genauer erklären, evtl. mit einem Beispiel? Danke, Toby.
Probier mal: 1. streiche alle unsigned 2. schreibe bei sprintf anstatt %3u lieber %3d Gruß Marco
Hallo, und vielen Dank für die schnelle Hilfe !!! Es sieht nun so aus: signed int temperatur1 = 0; signed int temperatur2 = 0; signed int get_temp1 (void) { signed int t = 0; t = read_adc( 0 ); t = ((t/1.579) - 154 ); return t; } signed int get_temp2 (void) { signed int t = 0; t = read_adc( 1 ); t = ((t/1.579) - 304 ); return t; } void display_temp (void) { temperatur1 = get_temp1(); temperatur2 = get_temp2(); lcd_high(2); sprintf( &lcd_buffer[0][0], " Temperatur "); sprintf( &lcd_buffer[1][0], " %3d \xdfC %3d \xdfC ", temperatur1, temperatur2); ecu_display_lcdbuffer( 2 ); } @ Marco Danke für den anstatt %3u lieber %3d Tipp!!! Habe dazu grade noch dieses gefunden. Wäre ich echt nicht drauf gekommen! % - ein Prozent-Zeichen ("%"). Es ist kein Argument erforderlich. b - das Argument wird als Integer angesehen und als Binär-Wert ausgegeben. c - das Argument wird als Integer angesehen und das entsprechende ASCII-Zeichen wird ausgegeben. d - das Argument wird als Integer angesehen und ein Dezimalwert (signed) ausgegeben. u - das Argument wird als Integer angesehen und ein Dezimalwert (unsigned) ausgegeben. f - das Argument wird als float angesehen und eine FlieÃkomma-Zahl ausgegeben. o - das Argument wird als Integer angesehen und und als Oktalzahl ausgegeben. s - das Argument wird als String angesehen und auch als solcher ausgegeben. x - das Argument wird als Integer angesehen und als Hexadezimal-Wert ausgegeben (mit Kleinbuchstaben). X - das Argument wird als Integer angesehen und als Hexadezimal-Wert ausgegeben (mit GroÃbuchstaben). Gruß Toby
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.