Was läuft denn hier falsch, bekomme die Strings nicht aufs LCD PROGMEM wird vom compiler ignogiert?? #define F_CPU 800000UL #include <avr/io.h> #include <util/delay.h> #include <lcd.h> #include <lcd.c> #include <avr/pgmspace.h> int main(void) { char lcdtext[] PROGMEM = "ZEILE 1"; char lcdtext1[] PROGMEM = "ZEILE 2"; lcd_init(); set_cursor(0,1); lcd_string(lcdtext); set_cursor(0,2); lcd_string(lcdtext1); while (PINB & (1 <<PB6)); // Wartet so lange wie pin6 high ist // ..bei lo weiter ..... }
siehe Tutorial: http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Array_aus_Zeichenketten_im_Flash-Speicher Grüße, Michael
lcdtext und lcdtext1 sind hier Pointer in den Flash-Speicher. C-Compiler sind auf eine Architektur ausgelegt, wo alles im RAM ist (von Neumann). Dagegen hat ein AVR eine Harvard-Architektur, und der C-Compiler kann Adressen ins Flash und ins RAM (EEPROM genauso) nicht von alleine unterscheiden. Zum Lesen aus dem Flash bemüht man deshalb die Funktionen pgm_read_byte (liest 1 Byte) und pgm_read_word (2 Bytes), zu finden im Header <avr/pgmspace.h> Deine lcd_string() Funktion wird wahrscheinlich einen String im RAM erwarten, du musst sie umschreiben.
bei CodeVision gibts dafür ne eigene Funktion, lcd_putsf. Vielleicht guibts auch sowas? Oder selbst schreiben. Oder vorher ins RAM kopieren.
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.