Forum: Mikrocontroller und Digitale Elektronik PIC18F2550 sprintf()


von Marco H. (purzelbaum)


Lesenswert?

Hallo,

ich habe folgendes problem. Erst mal ein ausschnitt aus meinem Code:

AD_10();            //Einholen des Wertes vom AD Wandler (10 Bit)

sprintf(lcd_text,"%u",Wert);  //In dieser Zeile folgender fehler: 
Warning [2054] suspicious pointer conversion

LCD_write(lcd_text[0]);      //Ausgeben der Stellen im Array
LCD_write(lcd_text[1]);      //
LCD_write(lcd_text[2]);      //
LCD_write(lcd_text[3]);      //

LCD_data(2);          //LCD wieder an erste Stelle

So nun zu meinem problem. In der Zeile mit dem sprintf-Befehl bekomme 
ich immer den dahinterstehenden fehler vom Compiler.
Kann mir jemand helfen. Achso meine include-Dateien:

#include <p18f2550.h>
#include <delays.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

Ich bitte lediglich um hilfe und nicht darum blöde kommentare zu 
bekommen oder den Hinweis auf die Suche. Ich habe gesucht, aber keine 
passende Lösung zu meinem problem gefunden.

Ich danke schon mal im vorraus für Hilfe.

Mit freundlichen Grüßen

Marco

von Εrnst B. (ernst)


Lesenswert?

Wie ist "lcd_text" deklariert?

char lcd_text[6]; ?

von Lehrmann M. (ubimbo)


Lesenswert?

Kompletter Code bitte ansonsten kann man nichts machen. Genauso den 
Fehler bitte posten.

von Marco H. (purzelbaum)


Lesenswert?

Also den kompletten Quellcode hab ich auf einem anderen PC. Kann den 
also erst ab Montag komplett schreiben.

Also das Array ist:
char lcd_text[21];

Der Fehler ist einfach nur diese Warnung:
Warning [2054] suspicious pointer conversion

Da fällt mir einen das ich den eigentlichen fehler gar nicht beschrieben 
hab.
Auf dem LCD soll der Wert z.B. 1023 sein. Was auf dem LCD aber 
erscheint, ist "u|||".

Also wenn das absolut nicht reicht also info...dann lade ich am Montag 
den Quellcode hoch.

von Lehrmann M. (ubimbo)


Lesenswert?

Marco Hinrichs schrieb:
> LCD_write(lcd_text[0]);      //Ausgeben der Stellen im Array

Was für einen Compiler verwendest du denn ? Den von Microchip ?

Mein Verdacht geht in die Richtung, dass

Marco Hinrichs schrieb:
> sprintf(lcd_text,"%u",Wert);

in dieser Form nicht geht. Ich nehme an, dass du einen Pointer für 
lcd_text benötigst.

Versuch mal ob

sprintf(*lcd_text,"%u",Wert);

besser geht.

Pointerinitialisierung natürlich nicht vergessen. =)

von abc (Gast)


Lesenswert?

Die Meldung ist mir bisher noch nicht untergekommen, aber es kann sein, 
dass das Display nur den ersten Wert "u" bekommt und den Rest als Fehler 
bzw. als inhaltslose Bytes - deswegen immer dasselbe "|". Was ein Fehler 
beim Senden sein könnte - z.b. wenn W-Register und Status-Bits nicht 
gesichert werden, man alles vorher einliest und dann beim ersten Senden 
W überschreibt/cleared.

Da ich deine Zeichentabelle bzw. das Displaydatenblatt nicht vor mir 
habe würde ich vermuten du codierst es falsch und deine "1" in 
binär/hex/dezimal/ascii? macht dann auf dem Display ein "u" daraus.

Aber wie gesagt alles reine Spekulation ohne weitere Infos zu Hard- und 
Software.

mfg

von Marco H. (purzelbaum)


Lesenswert?

@abc

Wenn ich einen fest definierten Wert nehme, z.B. 1 und den ausgebe, geht 
es.
Dann steht auf meinem LCD eine 1.

Erst wenn ich dies über den sprintf mache geht es nicht mehr...dann 
kommt nur noch Grütze :-)

@Michael

Ich werde es mal mit einem Pointer versuchen. Aber wie gesagt, ich hab 
den Quellcode nicht hier und muss bis Montag warten.

von Lehrmann M. (ubimbo)


Lesenswert?

Hab nachgekuckt:

http://www.cplusplus.com/reference/clibrary/cstdio/sprintf/

liegt wohl an den Pointern.

von Marco H. (purzelbaum)


Angehängte Dateien:

Lesenswert?

In der txt hab ich den kompletten Quellcode ohne Pointer.

von Marco H. (purzelbaum)


Lesenswert?

Also ich hab es nun auch mit einem Pointer versucht und das einzige was 
das Display anzeigt ist Müll :-)
Bin ein bisschen überfragt...schreibe ich einen Wert in eine Variable 
und gebe diese aus, geht es. Schreibe ich allerdings einen oder mehrere 
Werte in ein Arrey und gebe dieses aus, kommt wie bei dem Pointer nur 
Müll.

von Lehrmann M. (ubimbo)


Lesenswert?

Ähhh funktioniert das Dislpay überhautps ?

von Marco H. (purzelbaum)


Lesenswert?

Ja :-) das hab ich mir auch gedacht, ob das eventuell kaputt ist :-), 
aber es geht wenn ich halt meine Funktion aufrufe mit:
LCD_write('a');
dann schreibt er auf das Display ein a. Ich hab das a auch in einer 
schleife schreiben lassen und in beiden Zeilen standen a`s :-)

von Hc Z. (mizch)


Lesenswert?

Marco Hinrichs schrieb:
> sprintf(lcd_text,"%u",Wert);  //In dieser Zeile folgender fehler:
> Warning [2054] suspicious pointer conversion

Das dürfte darauf zurückzuführen sein, dass Du lcd_text[] als unsigned 
char[] vereinbart hast, sprintf aber ein char[] erwartet (was lt. Google 
bei Deinem Compiler signed ist).  Nimm mal das unsigned bei der 
Vereinbarung von lcd_text[] weg, dann sollte die Warnung verschwunden 
sein.

Das eigentliche Problem dürfte weiterbestehen, ist aber davon 
unabhängig.  Da wirst Du weiter suchen müssen.

von Marco H. (purzelbaum)


Lesenswert?

Das eigentliche problem besteht auch weiterhin...
Ich glaube es liegt am PIC selbst oder an den Einstellungen des PIC´s.

char      test[21];
unsigned char  bla=0;

sprintf(test,"Hallo Welt");

for(bla=0;bla<=8;bla++)
{
  LCD_write(test[bla]);
}

Schreibe ich es so, steht auf dem Display:
allo Welt#
Die Raute steht für ein Zeichen, das ich so nicht schreiben kann :-D

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.