Gast
#2667243
Hey, ich sitze nun seit einigen Stunden an meinem LCD Display: http://www.lcd-module.de/pdf/grafik/dip240-7.pdf Wie der angehängte Code zeigt, initialisiere ich das Display indem ich Grafik/Text Home/Area Adressen setze und anschließend den Speicher säubere. Letzteres scheint leider nicht zu funktionieren da das Display voll ist mit "7" im Text-Mode(Grafik off) und im Grafik-Mode(Text off) mit Balken. Ich vermute dass es an der Art der Speichersäuberung liegt denn sonst scheint mich der t6963c ja zu verstehen (Mode-Wechsel). Interessant ist auch, dass vor der speichersäuberung nur die Hälfte des Bildschirms voll ist mit den Balken/"7" Hat jemand Erfahrung mit dem T6963c und kann mir sagen, was ich falsch mache? Hier noch der Code. betrieben mit einem ATXMega128. /* * lcd_driver.c * * Created: 03.03.2012 19:53:09 * Author: */ #define F_CPU 32000000 #include <avr/io.h> #include <stdlib.h> #include <util/delay.h> #define LCD_DATA PORTK #define LCD_CMD PORTA #define LCD_CE PIN0_bm #define LCD_nRST PIN1_bm //LowActive Reset #define LCD_RD PIN2_bm #define LCD_LED PIN3_bm //LowActive LED-On #define LCD_WR PIN4_bm //Write/Read #define LCD_CD PIN6_bm //Command/Data void lcd_Init() { LCD_CMD.DIRSET = LCD_CE; LCD_CMD.DIRSET = LCD_nRST; LCD_CMD.DIRSET = LCD_RD; LCD_CMD.DIRSET = LCD_LED; LCD_CMD.DIRSET = LCD_WR; LCD_CMD.DIRSET = LCD_CD; LCD_CMD.OUTSET = LCD_CE; LCD_CMD.OUTSET = LCD_nRST; LCD_CMD.OUTSET = LCD_RD; LCD_CMD.OUTSET = LCD_LED; LCD_CMD.OUTCLR = LCD_WR; LCD_CMD.OUTCLR = LCD_CD; LCD_DATA.DIRSET = 0xFF; lcd_Reset(); lcd_sendData(0x00); lcd_sendData(0x00); lcd_sendCommand(0x42); lcd_sendData(0x14); lcd_sendData(0x00); lcd_sendCommand(0x43); lcd_sendData(0x00); lcd_sendData(0x17); lcd_sendCommand(0x40); lcd_sendData(0x14); lcd_sendData(0x00); lcd_sendCommand(0x41); lcd_sendCommand(0x80); lcd_sendCommand(0x98); lcd_clearGfxMem(); lcd_clearTxtMem(); } void lcd_Reset() { LCD_CMD.OUTCLR = LCD_nRST; _delay_ms(10); LCD_CMD.OUTSET = LCD_nRST; } void lcd_wait() { uint8_t status; LCD_DATA.DIR = 0x00; LCD_CMD.OUTCLR = LCD_RD; LCD_CMD.OUTSET = LCD_WR; LCD_CMD.OUTCLR = LCD_CE; LCD_CMD.OUTSET = LCD_CD; while (LCD_DATA.IN & 0x03 != 0x03) {} LCD_DATA.DIR = 0xff; return status; } void lcd_sendCommand(uint8_t cmd) { lcd_wait(); LCD_DATA.OUT = cmd; LCD_CMD.OUTSET = LCD_CD; LCD_CMD.OUTCLR = LCD_WR; LCD_CMD.OUTSET = LCD_RD; LCD_CMD.OUTCLR = LCD_CE; _delay_us(50); LCD_CMD.OUTSET = LCD_CE; } void lcd_sendData(uint8_t data) { lcd_wait(); LCD_DATA.OUT = data; LCD_CMD.OUTCLR = LCD_CD; LCD_CMD.OUTCLR = LCD_WR; LCD_CMD.OUTSET = LCD_RD; LCD_CMD.OUTCLR = LCD_CE; _delay_us(50); LCD_CMD.OUTSET = LCD_CE; } void lcd_setAdr(uint8_t msByte, uint8_t lsByte) { lcd_sendData(lsByte); lcd_sendData(msByte); lcd_sendCommand(0x24); } void lcd_clearGfxMem() { lcd_setAdr(0x00, 0x00); for(uint16_t i=0; i<0x16FF; i++) { lcd_sendData(0); lcd_sendCommand(0xC0); } } void lcd_clearTxtMem() { lcd_setAdr(0x17, 0x00); for(uint16_t i=0x1700; i<0xFFFF; i++) { lcd_sendData(0x00); lcd_sendCommand(0xC0); } }

