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
.....
}
Gast
#852102
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.
Gast
#852123
bei CodeVision gibts dafür ne eigene Funktion, lcd_putsf. Vielleicht guibts auch sowas? Oder selbst schreiben. Oder vorher ins RAM kopieren.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.