Hallo, sitze seit längerer Zeit an einem eigentlich einfachen Vorhaben - nur leider kriege ich es nicht hin. :-( Vielleicht seht ihr ja den Fehler oder habt sogar den ultimativen Gegenvorschlag. Die Idee: - vier globale Variablen für die vier Zeilen meines LCDs unsigned char line1[15]; //0..15 = 16 chars unsigned char line2[15]; unsigned char line3[11]; unsigned char line4[11]; //0..11 = 12 chars, erste vier werden von LCD verschluckt (ist aber anderes Problem) - einzelne Funktionen ändern die Variablen z.B. if(init()==1) { strcpy(line4, "_ready_"); } else { strcpy(line4, "_error_"); }; - Endlosschleife der main Routine ruft dann ein updatedisplay() auf damit sich nach jedem sequentiellen Durchlauf eine komplett geänderte Anzeige ergibt void updatedisplay(void) { lcd_clrscr(); lcd_gotoxy(0,0); lcd_print(line1); ... - meine Printfunktion void lcd_print(const char *string) { char *chr; char buf[15]; chr = string; while (*chr++) { strlcat(buf, *chr, 15); } lcd_puts(buf); } Entweder sehe ich gar nichts oder aber nur Datenmüll z.B.: J_ea__ready_y oder ähnliches. Bin für jede Idee ausgesprochen dankbar sonst raufe ich mir noch das letzte Haar! Gute Nacht, Markus
unsigned char line1[15]; //0..15 = 16 chars Erstens sind das, was Du hier deklariert hast, nur 15 Zeichen (wie's auch dasteht), also 0..14 als gültiger Indexbereich. Zweitens wäre es sinnvoll, gleich ein Byte mehr zu spendieren für ein abschließendes \0 byte, dann funktionieren alle normalen Stringoperationen auf dem Puffer, und man muß nicht explizit jedesmal noch die Anzahl der Zeichen mitzählen: unsigned char line1[17]; /* 0..16 */ Dein lcd_print() ist völlig mysteriös. Was soll der Unterschied zu Deinem (offenbar vorhandenen) lcd_puts() sein?
Danke für die Korrektur meiner arrays! Die lcd_print Funktion war ein Versuch trotz des scheiterns der lcd_puts Funktion aus der Peter Fleury lcdlibrary eine Ausgabe zu erhalten. die PF-lib hat die folgenden Funktionen: void lcd_putc(char c); void lcd_puts(const char *s); void lcd_puts_p(const char *progmem_s); #define P(s) ({static const char c[] _attribute_ ((progmem)) = s;c;}) #define lcd_puts_P(__s) lcd_puts_p(P(__s)) Ich will aber nicht nur hart codierte Ausgaben wie lcd_putc('x') oder lcd_puts_P("XYZ"), sondern auch dynamisch erzeugte Strings ausgeben. Wenn ich nun, wie schon oben angedeutet, versuche mit strcpy(line1, "Hallo, Welt!") und lcd_puts(line1) eine Ausgabe zu erhalten, passiert nichts. Was mach ich falsch - ich glaub ich steh seit Gestern auf der Leitung?! Markus
@Markus Die lcd_puts() funktioniert schon, Du musst sie nur nur wie dokumentiert einsetzen. lcd_puts() dient zur Ausgabe EINES strings. Willst Du einen dynamischen String ausgeben, musst du ihn zuerst zusammensetzen mit Standart C String funktionen: char buffer[32]; strcpy( buffer, "Teil1-" ); strcat( buffer, "Teil2" ); lcd_puts( buffer ); -> zeigt "Teil1-Teil2" auf LCD Bitte neueste Version von meiner lcd-lib herunterladen und Bespiel test_lcd.c anschauen. http://www.mysunrise.ch/users/pfleury/avr-software.html
geht leider immer noch nicht: LCD bleibt einfach leer. Warum weiß ich nicht. Meine einzige Idee ist, dass ich zum einen eine ältere lcdlib verwende (aber neusten avr-gcc [unter linux]) zum anderen sich irgendetwas mit anderen eingebunden libs beißt. Werde Morgen mal ein ganz neues Studio Projekt aufmachen, welches nur die obigen vier Zeilen ausführt; mal schaun was dann passiert.
Nach einer Tasse Kaffee funktioniert nun alles wie erwartet. Es muß also an einer meiner eingebunden libs gelegen haben, ohne dass gcc den Fehler beim compilieren gemerkt hat. An was genau poste ich mal, wenn ich es beim Wiedereinbinden finde...
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.