mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Anfängerprobleme


Autor: Martin Schmid (paul-stanley)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo zusammen,
ich möchte auf meinem display einen zahlenwert über eine variable 
anzeigen.
leider bin ich fast am verzweifeln.
vielleicht kann mir jemand weiter helfen.

vielen dank im voraus.


int main(void)
{

int a;
int string;
a = 25;
itoa (a, string, 10);

// Innen
    LCD_Print(string, 6, 113, 2, 1, 1, yellow, black);
    LCD_Print("o", 46, 107, 2, 1, 1, yellow, black);


der wert wird nicht angezeigt. wenn ich die 10 hinter string rein mache, 
kommt eine fehlermeldung, dass zu viele kommas im befehl lcd_print sind.

Autor: Martin Schmid (paul-stanley)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
..ausserdem kommt beim kompilieren diese meldung:

displaydemo.c: In function 'main':
displaydemo.c:35: warning: left-hand operand of comma expression has no 
effect
displaydemo.c:35: warning: left-hand operand of comma expression has no 
effect
displaydemo.c:35: warning: statement with no effect
displaydemo.c:80: warning: passing argument 1 of 'LCD_Print' makes 
pointer from integer without a cast

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Martin Schmid wrote:

> int string;

Dem Compiler ist der Name egal, einen String kann die Variable "string" 
nicht speichern, sondern nur einen int.

itoa verlangt ein Array von mindestens 7 Byte ("-32768\0"), also

char string[7];

Und dann schau Dir genau die Argumentenfolge von itoa an.


Peter

Autor: Martin Schmid (paul-stanley)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
..ich wollte eigentlich eine zahl in einen string umwandeln, da nur so 
scheinbar der wert über eine variable ans display geschickt werden kann.

gruss martin

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Martin Schmid wrote:
> ..ich wollte eigentlich eine zahl in einen string umwandeln

Und genau dafür mußt Du ne Variable bereitstellen, die den Text 
(Char-Array) auch aufnehmen kann.


Peter

Autor: Martin Schmid (paul-stanley)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sorry..ich blick da nicht durch.

hab jetzt mal folgendes gemacht:

int a;
char string[7];
a = 25;
itoa (a, string,10);

// Innen
    LCD_Print(string, 6, 113, 2, 1, 1, yellow, black);
    LCD_Print("o", 46, 107, 2, 1, 1, yellow, black);

kommt kein wert auf dem display und folgende meldung:
displaydemo.c:39: warning: left-hand operand of comma expression has no 
effect
displaydemo.c:39: warning: left-hand operand of comma expression has no 
effect
displaydemo.c:39: warning: statement with no effect


ich hab nur diese dateien eingebunden:
#include <stdio.h>
#include <avr/io.h>
#include <avr/wdt.h>
#include <util/delay.h>
#include <math.h>
#include <avr/pgmspace.h>
#define LCD_DDR DDRB
#define itoa
//#include <stdlib.h>

vielleicht fehlt da ja was

gruss martin

Autor: Mark .. (mork)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>ich hab nur diese dateien eingebunden:
>#define itoa
>//#include <stdlib.h>

Durch das '#define itoa' wird jedes 'itoa' aus dem Quellcode entfernt. 
Aus 'itoa(a, string,10);' wird also '(a, string,10);', und das macht 
keinen Sinn, deswegen auch die Warnings. Lösch das am besten wieder und 
tu die beiden Slashs vor '//#include <stdlib.h>' weg.

MfG Mark

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> #define itoa
Was soll das denn? itoa ist eine Funktion aus der stdlib.h. Außerdem 
wäre es sinnvoll, mal den ganzen Code zu posten, damit man auch mit den 
Zeilennummern was anfangen kann. Wo und wie ist übrigens die Funktion 
LCD_Print definiert?

Außerdem solltest Du Dich dringendst mit ASCII-Zeichen befassen. Ohne 
das Verständnis, was ein ASCII-String eigentlich ist, brauchst Du an der 
Stelle zunächst mal nicht weiterzumachen.

Autor: Martin Schmid (paul-stanley)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
...sorry, bin halt noch anfänger und gerade am lernen.
code hab ich angehängt.

lcd_print ist in der #include <glcd-Display3000-211.h> definiert:

void LCD_Print(const  char* Text, unsigned char X, unsigned char Y, 
unsigned char FontNr,unsigned char XScale, unsigned char YScale, 
unsigned int ForeColor, unsigned int BackColor);

Autor: Martin Schmid (paul-stanley)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
displaydemo.c: In function 'main':
displaydemo.c:39: warning: left-hand operand of comma expression has no 
effect
displaydemo.c:39: warning: left-hand operand of comma expression has no 
effect
displaydemo.c:39: warning: statement with no effect

Autor: Martin Schmid (paul-stanley)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mit eingebundener #include <stdlib.h> kommen mehr fehlermeldungen

In file included from displaydemo.c:11:
c:/winavr-20071221/bin/../avr/include/stdlib.h:445: error: expected 
identifier or '(' before 'int'
displaydemo.c: In function 'main':
displaydemo.c:39: warning: left-hand operand of comma expression has no 
effect
displaydemo.c:39: warning: left-hand operand of comma expression has no 
effect
displaydemo.c:39: warning: statement with no effect
make.exe: *** [obj/displaydemo.o] Error 1

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Martin Schmid (paul-stanley)

Dein tödlich, schwachsinniges

#define itoa

ist immer noch drin. Und so ein Grafik-LCD ist KEIN Anfängerprojekt, 
schon gar nciht wenn elementare Programmiergrundlagen fehlen. versuchs 
mal mit zwei Nummern kleiner.

http://www.mikrocontroller.net/articles/AVR-GCC-Tu...

MfG
Falk

P.S. Deine Quelltextformatierung ist unter aller Sau. Das ist der 
Lesbarkeit und Fehlersuche nicht sonderlich zuträglich.

Autor: Martin Schmid (paul-stanley)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo falk,

hab #define itoa gelöscht.
jetzt wird der wert als variable übergeben und auch angezeigt.

getraue nmich jetzt fast nicht mehr zu sagen, dass keine werte hinter 
dem komma übergeben werden.
ja, ich war da wohl zu optimistisch mit dem ersten projekt. das soll ein 
kleiner board computer fürs auto werden. die ganze sensorik drum rum 
kann ich ohne probleme..aber ich hab vor 20 jahren mal basic gelernt und 
seither nie mehr was programmiert. könnte das teil meinem 
arbeitskollegen geben und er würde es mir programmieren. aber ich will 
trotzdem einwenig versuchen was ich zusammen bekomme.

gruss und danke für die hilfe
martin

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Martin Schmid wrote:

> getraue nmich jetzt fast nicht mehr zu sagen, dass keine werte hinter
> dem komma übergeben werden.

Das ist korrekt, int ist das Format für Ganzzahlen und die haben kein 
Komma.

Übergibt man in C einem int eine Kommazahl, wird der Kommateil einfach 
abgeschnitten.
Sonst wärs ja kein Ganzzahl mehr, auch C kann nicht gegen die Mathematik 
verstoßen.


Peter

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Martin Schmid (paul-stanley)

>hab #define itoa gelöscht.
>jetzt wird der wert als variable übergeben und auch angezeigt.

Autsch! Na wenigsten läuft es jetzt.

>getraue nmich jetzt fast nicht mehr zu sagen, dass keine werte hinter
>dem komma übergeben werden.

sprintf() ist dein Freund.

MfG
Falk

Autor: Martin Schmid (paul-stanley)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
..freund wäre doch glatt übertrieben.
hab nun alles mögliche ausprobiert
sprintf(string,"%2,%1",a);

bringt alles nichts. nach dem komma wird nichts mehr übergeben.
gebe für heute auf :-(

gruss martin

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Martin Schmid (paul-stanley)

>..freund wäre doch glatt übertrieben.
>hab nun alles mögliche ausprobiert
>sprintf(string,"%2,%1",a);

>bringt alles nichts. nach dem komma wird nichts mehr übergeben.
>gebe für heute auf :-(

Das bringt alles nichts.

Gehe zurück zu den Grundlagen
Gehe direkt dorthin
Ziehe keine 4000 Euro ein.

Lies mal ein Grundlagenbuch über C. In Ruhe. Ja, das dauert einige 
Stunden bis
Tage, bis du das alles wirklich verstanden hast Wochen bis Monate. 
Dann reden wir weiter.

MfG
Falk

Autor: Martin Schmid (paul-stanley)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...muss das teil doch von meinem arbeitskollegen programmieren lassen. 
kaufe mir aber ein zweites board und übe da dann richtig. ohne zeitdruck 
(da der board computer ins auto muss) und vorherigem einlesen in die 
grundlagen.

gruss martin

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gute Einstellung!

MfG
Falk

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.