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); } }
Moin, dein Code ist zu gut dokumentiert um da durchzusteigen. Im Anhang das DB zum t6963 achte aufs Timing. MfG
Hi Zumindest deine Werte für Grafik-/Textarea stimmen nicht: 240/8 = 30 (0x1E). MfG Spess
Interessanterweise haben Änderungen an der Grafikarea und Textarea keine Auswirkungen. Kann es vielleicht an den 3,3V liegen die mein XMega nur rausbringt?
Hi
>Kann es vielleicht an den 3,3V liegen die mein XMega nur rausbringt?
Eigentlich nicht. L.t. Datenblatt erkennt er 2,8V als H.
MfG Spess
Ein Busy Check sieht bei mir so aus:
1 | //##########################################################
|
2 | void CheckBusy(void) |
3 | //##########################################################
|
4 | {
|
5 | unsigned char by; |
6 | |
7 | DATA_DIR_IN; //DatenPort auf Eingang zum lesen |
8 | CTRL; //Status Register lesen |
9 | |
10 | do //Schleife Status Bits checken |
11 | {
|
12 | CE_OFF; |
13 | RD_OFF; |
14 | NOP; //Ein Waitstate für 8 MHZ |
15 | NOP; //plus noch einen für 16 MHZ |
16 | by=READ_DATA; //Status lesen |
17 | RD_ON; |
18 | CE_ON; |
19 | }while((by&3) != 3); //Solange STA0 oder STA1 = 0 |
20 | |
21 | DATA; //Zurück auf DisplayDaten schreiben |
22 | }
|
Hallo Dominik, ich wollte nachfragen wie es um das Projekt mit der Initialisierung aussieht? Hast du das am Laufen und könntest mir den Code zu kommen lassen? Bin selber auch daran den T6963 Controller zusammen mit einem ATXmega256A3U ans Laufen zu bringen, komme aber nicht ganz klar damit. MfG Daniel
Daniel schrieb: > Bin selber auch daran den T6963 Controller zusammen mit einem > ATXmega256A3U ans Laufen zu bringen, komme aber nicht ganz klar damit. Woran hängt es denn? Schaltplan richtig? Sromversorgung ok? Timings passen?
Hallo zusammen, ich habe ebend ein neues Thema eröffnet (ATmega644 Timer1 Interrupt unregelmäßig). In dem angehängten Ordner ist auch eine Datei für ein LCD mit T6369C drin. Ist zwar in dem Code nur 64 Pixel hoch, aber das kann leicht durch die Defines in der h-Datei geändert werden. Der Code funktioniert einwandfrei, es sind auch dieverse Grafikfunktionen dabei. Ich denke auch, dass er ausreichend dokumentiert ist, um Probleme im eigenden Code zu finden und zu beheben.
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.