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


von H. G. (ledi)


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?
1
while (1)
2
  {
3
    ADCSRA |= (1<<ADSC);            // Start ADC-Wandlung 
4
      while (ADCSRA & (1<<ADSC));    // auf Abschluss der Konvertierung warten
5
       ergebnis = (ADC-200)/4+2;  // Anpassung an die Temperaturkennlinie 
6
                    // (y=kx+d) + Korrekturfaktor
7
    _delay_ms(500);  
8
9
    lcd_send(BEFEHL, LCD_CLEAR);
10
    lcd_write("...ein String...");
11
  }

von Düsendieb (Gast)


Lesenswert?


von Karl H. (kbuchegg)


Lesenswert?


von H. G. (ledi)


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:
1
while (1)
2
  {
3
    ADCSRA |= (1<<ADSC);            // Start ADC-Wandlung 
4
    while (ADCSRA & (1<<ADSC));    // auf Abschluss der Konvertierung warten
5
    
6
    ergebnis = (ADC-200)/4;    // Anpassung an die Temperaturkennlinie (y=kx+d)               
7
8
    char Buffer[20];
9
    itoa(ergebnis,Buffer,10);
10
11
    sekunde(1);
12
    lcd_send(BEFEHL, LCD_CLEAR);
13
    lcd_write("***Temperatur***");
14
15
    lcd_send(BEFEHL, LCD_SETDDRAM +0x40); // Cursor auf 1.Position Zeile 2
16
17
    lcd_write(Buffer);
18
    lcd_write(" C");
19
  }

von Bernhard S. (b_spitzer)


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

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
Noch kein Account? Hier anmelden.