Forum: Mikrocontroller und Digitale Elektronik GLCD Variablenausgabe


von C-Amnesie (Gast)


Lesenswert?

Moin zusammen,

Pardon, aber ich habe gerade eine Knoten im Hirn.
Folgendes Problem:
PIC 18F / C18 /GLCD mit UC1601
In einer Ausgabefunktion für mein GLCD wird bisher immer auf
Texte im ROM(FLASH) zugegriffen:
void lcd_text(unsigned char left, unsigned char top, unsigned char font, 
rom unsigned char *str)
z.B.:
lcd_text(6,29,FONT_NINE_DOT,"128x64");
Beí einer Variablen habe ich nun ein Problem.
Es gibt ja viele schöne Stringkonvertierungsfunktionen,
die mir aber offensichtlich nicht recht helfen und
ich habe bei der Pointerarithmetik scheinbar
ein grosses Verständnisproblem.
Das beim PIC der Unterschied zu machen ist zwischen
RAM- und ROM-Pointern, ist mir aber bekannt.

Könnte bitte jemand, der netten C-Gurus einem Verzweifelten
auf die Sprünge helfen ?

Besten Dank schon einmal

Didi

von Karl H. (kbuchegg)


Lesenswert?

C-Amnesie schrieb:

> void lcd_text(unsigned char left, unsigned char top, unsigned char font,
> rom unsigned char *str)
> z.B.:
> lcd_text(6,29,FONT_NINE_DOT,"128x64");
> Beí einer Variablen habe ich nun ein Problem.
> Es gibt ja viele schöne Stringkonvertierungsfunktionen,
> die mir aber offensichtlich nicht recht helfen und
> ich habe bei der Pointerarithmetik scheinbar
> ein grosses Verständnisproblem.
> Das beim PIC der Unterschied zu machen ist zwischen
> RAM- und ROM-Pointern, ist mir aber bekannt.

Das erste was du machen musst:
Sieh in deiner Funktionssammlung nach, ob es eine zweite 
String-Ausgabefunktion gibt, die keinen rom Pointer als 4.tes Argument 
hat.
Wenn nicht, dann musst du dir eben eine machen. Die Implementierung 
deiner jetzigen lcd_text wird dir dabei helfen und kann als Grundlage 
dienen.


erst dann bist du in der Lage, mit diversen Stringkonvertierfunktionen 
dir einen String zusammenzubauen, der eben nicht im rom residiert, und 
mit dieser neuen Funktion ausgegeben werden kann.

von C-Amnesie (Gast)


Lesenswert?

Besten Dank !
Ich hatte schon herumprobiert, wollte gerne aber
auch etwas verstehen:
Funktion auf RAM-pointer geändert
void lcd_text(unsigned char left, unsigned char top, unsigned char font,
unsigned char *str)
Meine Variable ist an erster Stelle im Array buf[]
-> lcd_text(6,29,FONT_NINE_DOT,(unsigned char *) buf);
und NICHT lcd_text(6,29,FONT_NINE_DOT,(unsigned char *) buf[0]);
 Das war ein Teil des Nachholbedarfs in Sachen Pointer.

Läuft also jetzt.

von andrzej (Gast)


Lesenswert?

Hallo;
ich versuche grade ein Diplay mit dem controller uc1601s zum laufen zu 
bringen, aber es klappt leider nicht... Was fur befehle sendest du am 
start zum controller?

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.