array an fkt. lcd

Gast #27786
Lesenswert?

hallo

ich habe mir ein kleines testprogramm geschrieben für die
ansteuerung einens lcd displays.

beim funktionsaufruf WriteData() habe ich folgendes problem:
wenn ich ein asci zeichen so übergebe:
WriteData('A') wir das zeichen richtig dargestellt auf dem display.
wenn ich nun aber ein array übergeben möchte:
WriteData(Text[1]) wird das zeichen nicht richtig dargestellt.

kann mir jemand sagen wo hier das problem ist? oder könnte das ein 
compiler spezifisches problem sein.

gruss tobias
Angehängte Dateien:
Gast #27788
Lesenswert?

hallo hugo

ein timing problem kann es nicht sein.
1.fall aufruf der fkt. WriteData('A') funktioniert.
2.fall aufruf der fkt. WriteData(text[1]) funktioniert nicht.

im 2.fall übergebe ich der fkt. ja auch nur 1 charakter.
ich glaube langsam das es ein problem mit dem compiler ist.
ich benutze den wickenhäuser uc51.

gruss tobias
Gast #27791
Lesenswert?

hallo zusammen

auf dem display habe ich dann anstatt des buchstaben
ein komplett schwares feld, quasi einen schwarzen cursor.

als ich einmal die delay zeit nach dem schreiben eines charakters zu 
kurz hatte, hatte ich auch so ne anzeige.

da ich ja mit WriteData('A') kein problem habe schliesse ich ein 
timingproblem aus.
Gast #27795
Lesenswert?

Hallo Tobias,

wie Andreas schon sagte, dein Programm ist richtig.

Aber was ist mit Deiner Startdatei. Werden die initialisierten Variablen 
richtig gesetzt?

Ein ganz einfacher Test ist:
const unsigned char Text[] = "TOBIAS";
Je nach Kompiler bleibt der Text dann komplett im ROM.

Zweite Möglichkeit:

int main(void)
{
  Text[0] = 'T';
  Text[1] = 'O';
  Text[2] = 'B';
  Text[3] = 'I';
  Text[4] = 'A';
  Text[5] = 'S';
  Text[6] = 0;
/* Ab hier deinen Rest, dein Speicher ist jetzt auf jeden fall 
initialisiert */

}

Beide Möglichkeiten sollten nicht zusammen getestet werden, wenn doch, 
kommen Kompilerwarnungen. Wenn keine Kompilerwarnungen kommen, taugt der 
Kompiler garnichts.

Oryx
Gast #27796
Lesenswert?

Hi,

also, ich hab das ganze vor 4 Wochen programmiert und bei mir tuts, hier 
der Programmauszug:

char text[]   = "TOBIAS\0"; // "\0" Endekennung

LCD_sendestring((char *)text);

void LCD_sendestring( char *pText )
{
char zeichen;
int nr = 0;

zeichen = pText[nr];

  while( zeichen != '\0')
  {
  lcd_ready();  // warten auf Busy-Flag
  LCD_sendezeichen( zeichen ); Zeichenausgabe
  nr++;
  zeichen = pText[nr];
  }
}

Vielleicht hilfts...

Andi
Admin Persönliche Seite #27797
Lesenswert?

\0 wird automatisch rangehängt wenn man den String in doppelten
Anführungszeichen "bla" schreibt, zweimal ist unnötig.

Es tut zwar absolut nichts zur Sache, weil Tobias nur ein
einzelnes Zeichen ausgeben möchte, aber so geht das mit dem
String kürzer:

lcd_puts(s) char *s;
{
  char c;

  while (c = *s++)
    lcd_putc(c);
}
Gast #27799
Lesenswert?

hallo zusammen

ich habe das problem gefunden.
es ist wie oryx gesagt hat die eingesetzten variablen, oder insbesondere 
das array wird nicht richtig initialisiert.

ich definiere mein text array ja lokal.
bis jetzt unsigned char text1[]="tobias";

ich benutze den wickenhäuser uc51 c-compiler freeware bis 8k.

ich muss das lokale array jedoch so initialisieren:

->unsigned char code text1[]="tobias";
so funktionierts und das array wird im programmspeicher
abgelegt und nicht im ram oder so.

was denkt ihr von diesem compiler so auf die schnelle?
kennt jemand einen besseren "freeware" für 8051 und derivate?

besten dank für eure hilfe
gruss tobias

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren