www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik KTY 81 und negative Temperatur


Autor: TobyTetzi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Nobody (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"unsigned"  na, dämmerts?

Autor: TobyTetzi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

nee, noch nicht wirklich.

Auch wenn ich unsigned zu signed ändere, muß ich doch das Vorzeichen
auswerten, nicht?

Gruß Toby

Autor: Stephan Henning (stephan-)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
na dann mach mal ein Koplement aus den 65 und werte das Vorzeichen aus.
Signed !!

Autor: TobyTetzi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

könntet Ihr mir das etwas genauer erklären, evtl. mit einem Beispiel?

Danke,

Toby.

Autor: Marco S (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Probier mal:

1. streiche alle unsigned
2. schreibe bei sprintf anstatt %3u lieber %3d

Gruß
Marco

Autor: Stephan Henning (stephan-)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: TobyTetzi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.