Forum: Mikrocontroller und Digitale Elektronik Easy 8051 B GLCD Diyplay


von Sebastian (Gast)


Lesenswert?

Hiho an alle Helfer^^
Habe da folgendes Problem. Ich arbeite für eine Techniker Arbeit mit 
einem Microkontroller bord von Microelektronika easy 8051 B.
Nun mein Problem:
Gewünscht ist eine Ausgabe einer Variable über das GLCD Display. 
Folgendes hab ich Probiert:

// Glcd module connections
char GLCD_DataPort at P0;

sbit GLCD_CS1 at P2_0_bit;
sbit GLCD_CS2 at P2_1_bit;
sbit GLCD_RS  at P2_2_bit;
sbit GLCD_RW  at P2_3_bit;
sbit GLCD_EN  at P2_4_bit;
sbit GLCD_RST at P2_5_bit;
// End Glcd module connections

  unsigned float *Wert = 120;
  unsigned float *text = "Wert:1234";

void main() {

  WDTCN    = 0xDE;
  WDTCN    = 0xAD;
  OSCICN   = 0x83;
  XBR2     = 0x40;
  P0MDOUT  = 0x00;
  P2MDOUT  = 0xFF;

  Glcd_Init();
  Glcd_Fill(0x00);


       Glcd_Write_Text(text,0 , 2, 1);
       Glcd_Write_char("Hello world!", 0, 3, 1);


}

Nun mein Problem: 1. Um eine Korrekte ausgabe aufn Display zu erzielen 
ist es nötig vor der Variable "Text" ein Sternchen zu machen. Warum?

2. Nun will ich die Variable Text mit dem Inhalt einer anderen Variable 
füllen. Nur kriege es mit den mir bekannten C Funktionen nicht hin.

3.Um es Korrekt auf dem Display auszugeben muss der der Inhalt der 
Variable in Anführungstriche gesetzt werdn wie im Beispiel( Hello 
world!).Wie kriege ich das hin?

Ich wäre ich dankbar wenn ihr mir (absoluter Programmieranfänger) unter 
die Arme greifen könnt.

von Vergleicher (Gast)


Lesenswert?

Rückfrage:

Der Code den Du gepostest hast, funktioniert der ?

Die Informationen sind etwas dürftig deshalb die Frage !

Trotzdem...
Zu Frage 1: an welcher Stelle soll deiner Meinung nach das Sternchen 
stehen ?

Zu Frage 2: es gibt sogenannte standard funktionen in stdlib.lib.
Da sollten z.B. eine Txt - Kopierfunktion drin sein. Sie heisst strcpy.

Zu Frage 3: ????? Hallo ----> """"""""""""""" (komische Frage !)


Gruß

von Sebastian (Gast)


Lesenswert?

oh Merke gerade hab beim Posten ein Fehler gemacht:
Glcd_Write_char("Hello world!", 0, 3, 1);  ist falsch
Glcd_Write_Text("Hello world!", 0, 3, 1);  sollte es heißen


Also die Ausgabe des Textes "Hello world!" Funktioniert. Ist 1 zu 1 aus 
der Beispiel Bibliothek übernommen.
Nur die Zeile darüber bereitet mir Probleme.

Mein Ziel ist es über die RS232 Schnittstelle (ist hier noch nicht 
Einprogrammiert) eine Variable zu Befüllen und diese dann auf dem GLCD 
auszugeben.
Char Variablenname;
Variablenname = 230; (z.B / diese Variable soll über ein Lesebefehl von 
der  RS 232 gefüllt werden)

Glcd_Write_char(Variablenname, 0, 3, 1);

funktioniert nicht. Das Display zeigt hier ganz Wilde Sachen an.
Habs auch mal mit einem Sternchen vor der VAriable bei der deklaration 
versucht (mir ist nicht klar was das Sternchen bewirkt, habs nur im 
Beispiel gesehen). Danach zeigte das Display an der gewünschten stelle 
2S2S2S2S2S2S2S2S an.

Habe auch Versucht mit dem Befehl:
Glcd_Write_Data(Variablenname);

Natürlich hab ich davor die nötige Position gesetzt an der es Angezeigt 
werden soll (GLCD_Set_Side/X/Page)
Nur hier zeigt er dann Punkte und Striche an der Position an.

von Sebastian (Gast)


Lesenswert?

//Variablendeklaration
char GLCD_DataPort at P0;
char *daten;
char *Ausgabe;

// Grafikdisplay Verbindungen
sbit GLCD_CS1 at P2_0_bit;
sbit GLCD_CS2 at P2_1_bit;
sbit GLCD_RS  at P2_2_bit;
sbit GLCD_RW  at P2_3_bit;
sbit GLCD_EN  at P2_4_bit;
sbit GLCD_RST at P2_5_bit;

void main() {

// Initialisierung Grafikdisplay
   Glcd_Init();

// Display Nullen
   Glcd_Fill(0x00);

// Initialisierung RS232 Schnittstelle
   UART1_Init(9600);
   Delay_ms(100);

// Senden des /?! Befehls über die RS232 (Rs485 Hardware Konverter)
   UART1_Write_Text("/?!");

// Empfangen der Daten und Speicherung in einer Variablen
   UART1_Read_Text(Ausgabe, "OK", 10);

// Variable im Display ausgeben
   Glcd_Write_Text(*Ausgabe, 60, 2, 2);  // Write string

Hab mal wegen der Übersicht mein Vorläufiges Programm gepostet. Das 
Problem mit der Korrekten Ausgabe auf dem Display ist das selbe. So wie 
es hier ist zeigt das display an der Stelle: 2S2S2S2S2S2S2S an und nicht 
den Inhalt der Variablen (zB eine Zahl)

von Peter D. (peda)


Lesenswert?

Lies Dir bitte im C-Buch durch, was das * für ne Funktion hat und wie 
man es benutzt.
Man schreibt es jedenfalls nicht völlig planlos irgendwo hin.


Sebastian schrieb:
> unsigned float *text = "Wert:1234";

Wenn ein Compiler lachen könnte, würde er Dich schallend auslachen.
So aber sollte er wenigstens Warnungen ausspucken.


Peter

von Sebastian (Gast)


Lesenswert?

Danke für diese Kompetente Antwort. Naja und nun zu deinem C Buch.......
Dieser Kompiler kennt nicht alle C Funktionen und sogar seine Eigenen 
Funktionen beherrscht er auch nicht alle. Selbst die Beispielfunktionen 
Funktionieren nicht.
Naja das ich absoluter Anfänger bin hab ich ja oben dazu geschrieben.
Aber dafür finde ich das ich nach 5Std selbst beigebrachten C weit 
gekommen bin.

von Sebastian (Gast)


Lesenswert?

Da du ja auch sooo ein Experte bist......
> unsigned float *text = "Wert:1234";
das hat dieser Compieler ohne zu Meckern compiliert. Diese Stelle hatte 
ich noch im Programm drin um Sachen auszuprobieren.
Ich will jetzt auch nicht Hochnäsig oder Assi wirken nur hab ich die 
erfahrung gemacht , daß die Leute die solche Sprüche abgelassen haben an 
meinem versuch und dem Compiler gescheitert sind und diese Leute haben 
sich sehr lange mit Programmierung beschäftigt.

von Christian H. (netzwanze) Benutzerseite


Lesenswert?

Sebastian schrieb:
> unsigned float *text = "Wert:1234";

Tippe Dein Programm bitte nicht im Forum ab, sondern hänge die 
Originaldatei an. Ansonsten kommen schnell Tippfehler rein und 
potenzielle Helfer lachen sich schlapp.

Ich schätze mal, dass im Originalprogramm "unsigned char *text" steht.

"float" ist eine Fließkommavariable. "*float" ist ein Zeiger auf diese.

"Wert:1234" ist aber eine Folge von Zeichen.

von Christian H. (netzwanze) Benutzerseite


Lesenswert?

Sebastian schrieb:
> das hat dieser Compieler ohne zu Meckern compiliert.

Au. So etwas sollte nicht passieren. Ein Compiler, der auch Müll ohne zu 
murren annimmt, ist nicht zu gebrauchen.

von Christian H. (netzwanze) Benutzerseite


Lesenswert?

Christian H. schrieb:
> Fließkommavariable

Ich meine "Fließkomma Variablen Typ".

von Sebastian (Gast)


Lesenswert?

SO seh ich das auch nur hab ich leider nix anderes zu verfügung. Anfangs 
fand ich dieses Board und den Compiler super (weil ich unwissend war). 
Nun ist es nur noch Frusttrierend. Bisher konnte mir da wirklich niemand 
weiter helfen :-(

von Peter D. (peda)


Lesenswert?

Auch wenn Du jetzt angepisst bist, ich bin kein Lehrer.
Ich kanns daher nicht besser erklären, als wie es im Lehrbuch steht.

Zum C Lernen findet man aber auch vieles bei Google, z.B.:

http://www.peacesoftware.de/ckurs12.html


Sebastian schrieb:
> Selbst die Beispielfunktionen
> Funktionieren nicht.

Das deutet darauf hin, daß der Autor geschludert hat.
Beispiele enthalten leider oft kleinere Tippfehler.
Da muß man sich dann die Warnungen und Errors des Compilers anschauen.
Die mögen anfangs etwas unverständlich klingen, aber mit etwas Übung 
kann man sie gut interpretieren.
Jedenfalls gibt nie ein Compiler aus: "Error, funktioniert nicht".


Peter

von Peter D. (peda)


Lesenswert?

Sebastian schrieb:
> das hat dieser Compieler ohne zu Meckern compiliert.

Mein C51 meint dazu:
1
stmt level    source
2
3
   1
4
   2          unsigned float *text = "Wert:1234";
5
*** ERROR 141 IN LINE 2 OF MUMPITZ.C51: syntax error near 'float'
6
7
C51 COMPILATION COMPLETE.  0 WARNING(S),  1 ERROR(S)

Und der GCC ist etwas präziser:
1
MUMPITZ.C:2: error: both 'unsigned' and 'float' in declaration specifiers
2
MUMPITZ.C:2: warning: initialization from incompatible pointer type


Peter

von Sebastian (Gast)


Lesenswert?

Naja ich will dich nicht persönlich angreifen. Fand nur den Kommentar 
unpassend. Das da Rechtschreibfehler drin sind hab ich sehr früh 
gemerkt. Hab gewisse Funktionen auch ergoogelt. Kam zu dem Ergebniss das 
die Syntax richtig war und der Compiler es trotzdem nicht gesachnallt 
hat ;-). Selbst unser Lehrer hat über das Programm geschaut und keinen 
Fehler in der Programmierung gefunden. Er fands auch sehr komisch.
Ich denke hier kann mir wirklich nur einer Helfen der viel Erfahrung mit 
genau diesen Board und diesen Compiler hat.

von Sebastian (Gast)


Angehängte Dateien:

Lesenswert?

Um hier wieder etwas Ordnung rein zu bringen schicke ich das Programm 
als Dateianhang mit. Mein Problem ist immer noch das selbe. Kriege die 
Variable nicht richtig auf dem GLCD angezeigt. Durch Versuche hab ich 
rausgefunden das ich den Inhalt der VAriable wahrscheinlich in 
Anführungsstriche setzen muss, nur hab ich keine Ahnung wie ich das 
anstellen soll. Dieses Sternchen soll angeblich der VAriablen einen 
Festen Speicherort zuweisen kann. Dieses soll aber aus früheren 
Programmiersprachen stammen und Heutzutage nicht mehr üblich sei.

von Vergleicher (Gast)


Lesenswert?

Um eine Variable formatiert in einen Text zu setzen gibt es
keine einfache Methode. Man will schließlich aus einem binär 
dargestellten Zahlenwert eine Zeichenfolge erzeugen!

Dazu gibt es zwei Methoden, die einfachste (für eine Integer zu Text 
wandlung) itoa( int ); itoa = integer to Ascii

Ein float - Wert lässt sich mit vertretbarem Aufwand nur über eine 
sprintf-Funktion in eine Zeichenkette wandeln. sprintf = string print 
formatted

man kann das so machen:

char buf[30];
float floatvar = 4.23f;

 sprintf( buf, "Wert=%f", floatvar );
 Glcd_Write_Text(buf, ,0 , 2, 1);
  Was sollen die zusätzlichen Parameter darstellen ? Das musst Du 
wissen..


mit Hilfe dieser Stichworte solltest Du dir die Beschreibung dieser 
Funktionen anlesen...

gruß

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.