mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Int in string umwandeln und am LCD ausgeben?


Autor: H. G. (ledi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich möchte über einen Temperatursensor(MCP9700) die Temperatur mittels 
ADC umwandeln und das Ergebnis am LCD-Display ausgeben.

Am LCD kann ich aber nur einen string übergeben. Wie kann ich ein int in 
einen string umwandeln? Oder gibt es dafür eine bessere Lösung?
while (1)
  {
    ADCSRA |= (1<<ADSC);            // Start ADC-Wandlung 
      while (ADCSRA & (1<<ADSC));    // auf Abschluss der Konvertierung warten
       ergebnis = (ADC-200)/4+2;  // Anpassung an die Temperaturkennlinie 
                    // (y=kx+d) + Korrekturfaktor
    _delay_ms(500);  

    lcd_send(BEFEHL, LCD_CLEAR);
    lcd_write("...ein String...");
  }

Autor: Düsendieb (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
http://www.mikrocontroller.net/articles/FAQ#Wie_ka...

und natürlich jedes beliebige C-Buch deines Vertrauens.

Autor: H. G. (ledi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Karl Heinz, das hat mir sehr weitergeholfen.

Soweit funktioniert auch alles, bis auf die Ausgabe negativer Zahlen!

Mit ergebnis = (ADC-200)/4; berechne ich die Temperatur. Bei + 
Temperaturen funktioniert auch alles. Bei - Temperaturen erhalte ich als 
Anzeige z.B. 16376.
Wenn ich die Division weglasse, werden auch die negativen (in dem Fall 
um das 4-fache zuviel) Temperaturen angezeigt?

Wo ist der Wurm?


Hier der Code:
while (1)
  {
    ADCSRA |= (1<<ADSC);            // Start ADC-Wandlung 
    while (ADCSRA & (1<<ADSC));    // auf Abschluss der Konvertierung warten
    
    ergebnis = (ADC-200)/4;    // Anpassung an die Temperaturkennlinie (y=kx+d)               

    char Buffer[20];
    itoa(ergebnis,Buffer,10);

    sekunde(1);
    lcd_send(BEFEHL, LCD_CLEAR);
    lcd_write("***Temperatur***");

    lcd_send(BEFEHL, LCD_SETDDRAM +0x40); // Cursor auf 1.Position Zeile 2

    lcd_write(Buffer);
    lcd_write(" C");
  }

Autor: Bernhard Spitzer (b_spitzer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Heimo G. schrieb:
> Wo ist der Wurm?

im Datentyp von ergebnis. Ist das als signed int ergebnis deklariert??

Wenn es nur als int ergebnis deklariert ist, schau mal in den 
Compilereinstellungen, wie der char oder int interpretiert. Man kann da 
oft einstellen ob das dann als signed oder unsigned interpretiert werden 
soll ==>> IMMER signed oder unsigned angeben, sonst kann es Probleme 
geben. Wer die Tipparbeit leid ist deklariert sich kürzere Datentypen 
z.B. uC8 oder sC8, uI16 oder sI16...

unn tschuess
Bernhard

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.