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
Hi, ich hatte ein ähnliches Problem. Sobald ich mehr als ein Zeichen zum Display sendete kam nur Murks an. Bei mir lag es an zu kurzen Delays zwischen den zu sendenden Zeichen. Zu deinem Code kann ich leider nichts sagen da ich mit Assembler arbeite. Gruß
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
Hi! Frage:Was steht denn in "text[x]" drinn? ASCII? Schreibe es doch mal als Hex. Irgendwo hatte ich das auch schon mal, der Compiler wollte einfach kein ASCII draus machen, aber keine Fehlermeldung. Gruss Uwe
Was bedeutet "funktioniert nicht"? Was wird denn statt 'O' angezeigt? Ich kann mir das eigentlich nicht vorstellen, kein Compiler der Welt würde derartigen Murks produzieren. @Uwe: das mit dem "Schreibe es doch mal als Hex" ist Unsinn, schau dir das Programm doch erst mal an bevor du antwortest.
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.
Hi Tobias, Sieht irgendwie nach Adressen Problem aus... Die übergabe sollte als Adresse erfolgen, bzw. als Pointer. WriteData(Text); void WriteData(char * cData) { ... LCDPORT=cData[1] ... }; Bin mir jetzt aber net ganz sicher probierts mal aus...ansonsten schau ich heut abend zuhause.. Viel Erfolg Andi
Nein, das Programm von Tobias ist völlig richtig. char Text[] = "ABCDEFG"; lcd(Text[1]); MUSS das gleiche ergeben wie lcd('B'); Ansonsten ist der Compiler so kaputt wie es eigentlich nicht sein kann, oder man hat irgend ein exotisches Timingproblem das nur unter ganz bestimmten Bedingungen zu einem Fehler führt.
Hi, hast Du denn mal testweise die Delays erhöht? Nur um ein Timingproblem auszuschließen. Gruß
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
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
\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); }
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
Es ist absolut nicht nachvollziehbar warum der Compiler keine Arrays aus dem RAM lesen kann. Ich würde so einen Compiler mit Vorsicht genießen... Probier's doch mal mit sdcc (http://sdcc.sf.net), der ist völlig kostenlos.
um das array ins ram zu plazieren müsste ich eben die fkt. so deklarieren: unsigned near char[]="xxx"; ich habe mal mit wickenhäuser telefoniert, er sagte mir das sei 8051 standart diese art von deklaration. ich werde mal den anderen compiler anschauen. gruss tobias
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.