Forum: Mikrocontroller und Digitale Elektronik Anfängerprobleme


von Martin S. (paul-stanley)


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.

von Martin S. (paul-stanley)


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

von Peter D. (peda)


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
1
char string[7];
Und dann schau Dir genau die Argumentenfolge von itoa an.


Peter

von Martin S. (paul-stanley)


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

von Peter D. (peda)


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

von Martin S. (paul-stanley)


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

von Mark .. (mork)


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

von Johannes M. (johnny-m)


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.

von Martin S. (paul-stanley)


Angehängte Dateien:

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);

von Martin S. (paul-stanley)


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

von Martin S. (paul-stanley)


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

von Falk B. (falk)


Lesenswert?

@  Martin Schmid (paul-stanley)

Dein tödlich, schwachsinniges

1
#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-Tutorial#LCD-Ansteuerung

MfG
Falk

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

von Martin S. (paul-stanley)


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

von Peter D. (peda)


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

von Falk B. (falk)


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

von Martin S. (paul-stanley)


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

von Falk B. (falk)


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

von Martin S. (paul-stanley)


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

von Falk B. (falk)


Lesenswert?

Gute Einstellung!

MfG
Falk

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.