LCDInfo.com
http://forum.lcdinfo.com/

T6963C garbled text positioning
http://forum.lcdinfo.com/viewtopic.php?f=9&t=2562
Page 1 of 1

Author:  Knas [ Wed Dec 31, 2008 20:47 ]
Post subject:  T6963C garbled text positioning

Hello, i'm using a T6963C-based display (TLX-711) with a PIC18F4550 and i randomly get some of my text in the wrong position. I'm doing the correct power-on reset, status checking and i've tried using long delays inbetween writing each command but to no avail. I wrote the following code

Code:

#define tlx_WR       0x1
#define tlx_RD       0x2
#define tlx_CD       0x4 //0x8
#define tlx_DATA   PORTD
#define tlx_DATAOUT   TRISD = 0x00
#define tlx_DATAIN   TRISD = 0xFF
#define tlx_FLAGS   PORTB
#define tlx_enableFlags   TRISB = 0x00
#define tlx_disable   PORTA = PORTA | 0x1      // 0x4
#define tlx_enable   PORTA = PORTA & 0xFE   // 0xFB

unsigned int tempy;
unsigned int tempx;
unsigned char tempz;

#define tlxWait   for (tempy=0;tempy<10;tempy++) {};

void tlxWaitUntilFree() {
   tlx_DATAIN;
   tlx_enableFlags;
   do {
      tlx_FLAGS = tlx_WR | tlx_CD;
      tlx_enable;
      tlxWait
      tempz = tlx_DATA;
      tlx_disable;      
      tlxWait
   } while ((tempz & 0x3) != 0x3);

   return;
}

void tlxWriteData(unsigned char inData) {
   tlx_DATAOUT;
   tlx_enableFlags;
   tlx_DATA = inData;
   tlx_FLAGS = tlx_RD;
   tlx_enable;
   tlxWait
   tlx_disable;
   tlxWait

   return;
}

unsigned char tlxReadData() {
   tlx_DATAIN;
   tlx_enableFlags;
   tlx_FLAGS = tlx_WR;
   tlx_enable;
   tlxWait
   tempz = tlx_DATA;
   tlx_disable;
   tlxWait
   return tempz;
}

void tlxWriteCommand(unsigned char inCommand) {
   tlx_DATAOUT;
   tlx_enableFlags;
   tlx_DATA = inCommand;
   tlx_FLAGS = tlx_RD | tlx_CD;
   tlx_enable;
   tlxWait
   tlx_disable;
   tlxWait

   return;
}

void tlxWriteDDC(unsigned char inData1, unsigned char inData2, unsigned char inCommand) {
   tlxWaitUntilFree();
   tlxWriteData(inData1);
   tlxWaitUntilFree();
   tlxWriteData(inData2);
   tlxWaitUntilFree();
   tlxWriteCommand(inCommand);
   return;
}

void tlxWriteDC(unsigned char inData1, unsigned char inCommand) {
   tlxWaitUntilFree();
   tlxWriteData(inData1);
   tlxWaitUntilFree();
   tlxWriteCommand(inCommand);
   return;
}

void tlxWriteC(unsigned char inCommand) {
   tlxWaitUntilFree();
   tlxWriteCommand(inCommand);
   return;
}

#define tlxTextHome(a,b) tlxWriteDDC(a,b,0x40)
#define tlxTextArea(a,b) tlxWriteDDC(a,b,0x41)
#define tlxGraphicsHome(a,b) tlxWriteDDC(a,b,0x42)
#define tlxGraphicsArea(a,b) tlxWriteDDC(a,b,0x43)
#define tlxSetCursor(a,b) tlxWriteDDC(a,b,0x21)
#define tlxSetAddress(a,b) tlxWriteDDC(a,b,0x24)
#define tlxWriteCharInc(a) tlxWriteDC(a,0xC0)
#define tlxOutChar(a) tlxWriteDC(a-0x20,0xC0)


void tlxClearScreen() {
   tlxSetAddress(0,0);
   for (tempx=0; tempx<320; tempx++) {
      tlxWriteCharInc(0x0);
   }
}

// Displays a ROM string (uses [size] position(s))   rom const
void tlxWriteString(rom const char *data, char size) {
   char i;

   for (i=0; i<size; i++) {
      tlxWriteCharInc(data[i] - 0x20 );
   }
}

void tlxWaitLong() {
   OpenTimer2(T2_POST_1_6 & T2_PS_1_16);
   WriteTimer2(0x30);
   do {
   } while (ReadTimer2() >= 0x30);   
}


void tlxInit() {
   char a;

   PORTA = 0xFA;
   for (a=0;a<50;a++) {
      tlxWaitLong();
   }
   PORTA = 0xFF;

   TRISB = 0; // All pins are output
   PORTB = 0;

   tlxGraphicsHome(0x40,0x1);
   tlxGraphicsArea(0x28,0x0);

   tlxTextHome(0,0);
   tlxTextArea(0x28,0x0);
   tlxWriteC(0x80);   // Set Mode (OR)
   tlxWriteC(0x97);   // Display Mode (Cursor on, blink on, Text on, graphics off)
   tlxClearScreen();
}

void tlxWriteDecimal(unsigned int data, char counter) {
   char digits[5], i;
   
   for (i=0; i<counter; i++) {
      digits[i] = data % 10;
      data = (data - digits[i]) / 10;
   }

   for (i=counter; i>0; i--) {
      tlxWriteCharInc( digits[i-1] + 0x10 );
   }
}


Where the basic commands are:

tlxWaitUntilFree - status checking
tlxWriteData - write a data byte
tlxReadData - read a data byte
tlxWriteCommand - write a command byte

it's very frustrating, any help very gratefully appreciated!

Page 1 of 1 All times are UTC + 2 hours
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/