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

Toshiba T6963C controller with DMF-50773NY-LY (big girl)
http://forum.lcdinfo.com/viewtopic.php?f=8&t=186
Page 1 of 1

Author:  LCD_gimp2 [ Wed Mar 26, 2003 6:11 ]
Post subject:  Toshiba T6963C controller with DMF-50773NY-LY (big girl)

I have seen how helpfull henri has been, and was impressed and hopefull that I could receive some help here.

I have got to interface this LCD to a Atmel Mega 128 processor. At the present stage, after following all the information provided to me through data sheets etc, i cannot get it to display a single thing... 8O

The language i am using is C.

This is my code so far, just for initialisation....and i get nothing....?

Code:
//ICC-AVR application builder : 3/20/2003 5:32:05 PM
// Target : M128
// Crystal: 8.0000Mhz

#include <iom128v.h>
#include <macros.h>

//# define for LCD controls
#define CELO   PORTA &= 0xBF       //set chip enable on
#define CEHI   PORTA |= ~0xBF     //set chip enable off
#define WRLO   PORTG &= 0x1B     //set write signal enable
#define WRHI   PORTG |= ~0x1B     //set write signal off
#define RDLO   PORTA &= 0x7F     //set read sig enable
#define RDHI   PORTA |= ~0x7F     //set read sig off
#define CDLO   PORTA &= 0xDF     //set CD sig low
#define CDHI   PORTA |= ~0xDF     //set CD high
#define Reset_on    PORTA &= 0xEF      //reset LCD
#define Reset_off    PORTA |= ~0xEF      //stop reset

#define reset       PORTF = 0x00      //turn off LED's

//#define for LED indicators on and off
#define LED_STS1     PORTF |= 0x04   //turn status LED on
#define LED_STS0     PORTF &= ~0x04 //turn status LED off

void port_init(void)
{
 PORTA = 0xF0;
 DDRA  = 0xFF;
 PORTB = 0x00;
 DDRB  = 0x00;
 PORTC = 0x00;                         //m103 output only
 DDRC  = 0xFF;
 PORTD = 0x00;
 DDRD  = 0x00;
 PORTE = 0x00;
 DDRE  = 0x06;
 PORTF = 0x00;
 DDRF  = 0xFF;
 PORTG = 0x04;
 DDRG  = 0x04;
}

void Delay_L(void)                   //this is a visible delay (long)
   {
   int x ;                           //define variables used
   unsigned char  y, z;

   for (x = 1; x<25; x++)
      {
      //PORTF = 0x04 ;            //turn on LED to indicate at this position
      for (y = 1; y; y++)
         {
         for (z = 1; z; z++)
         {
         _NOP() ;                   //perform no operation
         _NOP() ;
         _NOP() ;
         }
         //PORTF = 0x00 ;         //turn off indicator LED
         }
      } 
   }
   
void Delay(void)                    //short delay - cannot be detected by human eye
    {
    unsigned char  a, b;
    for (a=1; a; a++)
        for (b=1; b; b++)
           ;
    }
   
   
//call this routine to initialise all peripherals
void init_devices(void)                   /*This routine is inserted by the built in wizard*/
{
                             //stop errant interrupts until set up
 CLI();                      //disable all interrupts
 XDIV  = 0x00;                   //xtal divider
 XMCRA = 0x00;                   //external memory
 port_init();

 MCUCR = 0x00;
 EICRA = 0x00;                   //extended ext ints
 EICRB = 0x00;                   //extended ext ints
 EIMSK = 0x00;
 TIMSK = 0x00;                   //timer interrupt sources
 ETIMSK = 0x00;                //extended timer interrupt sources
 SEI();                        //re-enable interrupts
                            //all peripherals are now initialised
}

void CE_strobe(void)            //takes chip enable low and then high
    {                        //after a short delay
     CELO ;
     _NOP() ;
     _NOP() ;
     CEHI ;
     return ;
     }

unsigned char Status_return(void) //enables specfic status check
      {                               //returns full status for user to check in main code
      unsigned char status1 ;      //variable for storing status
     DDRC = 0x00 ;               //sets up port c for input
     CDHI ;                        //sets up ports correctly for reading in from LCD
     RDLO ;
     WRHI ;
     CELO ;
     Delay() ;
     status1 = PINC ;            //reads the values on all pins of port C
     CEHI ;
     DDRC = 0xFF ;
     return (status1) ;            //returns the status to the main
       }


void Status_chk(void)              //a generic status check with pins 1 & 2 not busy
      {                           //returns to position when called & executed
     unsigned char status2, w ;      //continues to check until status ok
     DDRC = 0x00 ;               //sets up port c for input
     CDHI ;                        //sets up ports correctly for reading in from LCD
     RDLO ;
     WRHI ;
    
     do
         {
      CELO ;                  //set CE low
      _NOP() ;
      _NOP() ;
      status2 = PINC ;            //read status of port C
      CEHI ;                      //sets ce high again
      w = status2 & 0x03 ;         // does logical and with 0000 0011
      }
       while (w != 0x03) ;         //this checks if status of bits 0 & 1 is ok to go
     DDRC = 0xFF ;                 //set portC back to output port
        //port_init() ;            //reset ports to orig and these must be
                             //set by each operation after status check
     //LED_STS1 ;                  //turns on LED's to indicate that status is ok.
     return ;
     }
    
void data_w(void)
    {
     CDLO ;                   //setting ports for a data write
     WRLO ;                  //CD taken low, WE low, RD hi
     RDHI ;
     Status_chk() ;            //check LCD status for write
     CE_strobe() ;              //strobe chip enable to write data
     return ;
    }
   
void data_r(void)
    {
     CDLO ;
     RDLO ;
     WRHI ;
     return ;
    }
   
void command_w(void)
    {
     CDHI ;
     WRLO ;
     RDHI ;
     Status_chk() ;
     CE_strobe() ;
     return ;
    }
   
void LCD_init(void)
    {
     //mode
     PORTC = 0x80 ;             //put 0x80 to port C to set mode of LCD
                                  //"or" mode with built in ROM enabled
     command_w() ;               //write command to LCD controller

     //control word - graphic home add
     PORTC = 0x00 ;             //put 00 on port C twice to set graphic home add
     data_w() ;                  //and write it to the LCD
     PORTC = 0x00 ;
     data_w() ;
     PORTC = 0x42 ;            //put 0x42 on port C - signifies Graphic home add
     command_w() ;               //write to LCD

     //graphic area
     PORTC = 0x1E ;               //set graphics area - 1E is 30 columns
     data_w() ;
     PORTC = 0x00 ;
     data_w() ;
     PORTC = 0x43 ;            //graphic area command tag
     command_w() ;
   
     //text home address
     PORTC = 0x00 ;             //send 00 to port C to set text home add lower
     data_w() ;
     PORTC = 0x10 ;            //send 10 to port C to set text home add upper
     data_w() ;
     PORTC = 0x40 ;            //text home add set command
     command_w() ;
    
     //text area set   
     PORTC = 0x1E ;            //no. of text area = 30 colums
     data_w() ;
     PORTC = 0x00 ;
     data_w() ;
     PORTC = 0x41 ;            //text area set cmd
     command_w() ;
             
    }                    
    
void main(void)
{
 unsigned char st = 0x00, gp = 0x00 ;                   //stat, b ;
 init_devices();
 
 Reset_on ;                       //Hardware LCD reset
 Delay_L() ;                     //Delay >=1ms
 Reset_off ;                    //Set reset back to high
 //Status_chk() ;
 
 LCD_init() ;
 
 PORTF = 0x04 ;                 //turns on status LED to indicate initialisation
                                   //complete
 Delay_L() ;
 //port_init() ;
 //PORTF = 0x02 ;
 
/* do
 {
 st = Status_return() ;
 gp = st & 0x03 ;
 }
 while (gp != 0x03) ;
 PORTF = st ;
 */
 PORTC = 0x90 ;                   //ensure cursor is off
 command_w() ;

 //Delay_L() ;
 //Status_chk() ;
 
 do
 {
 st = Status_return() ;
 gp = st & 0x03 ;
 }
 while (gp != 0x03) ;
 PORTF = st ;
 
 PORTC = 0x93 ;             //turn cursor on and blink
 command_w() ;
 Delay_L() ;
 //reset ;
 
 
 PORTC = 0x01 ;                      //to set cursor position
 data_w() ;
 PORTC = 0x01 ;
 data_w() ;
 PORTC = 0x21 ;
 command_w() ;
 
 PORTC = 0x00 ;                //8 line width cursor
 data_w() ;
 PORTC = 0x00 ;
 data_w() ;
 PORTC = 0xA7 ;
 command_w() ;
 
 do
 {
 st = Status_return() ;
 gp = st & 0x03 ;
 }
 while (gp != 0x03) ;
 PORTF = st ;
 

}


These final status checks are to get the status back and display it on some led's i have hooked up - that is all.
If someone could help i would be eternally gratefull.... :D

NOTE: if anyone wants a picture of the layout i can provide that - just ask

Author:  Henri [ Wed Mar 26, 2003 13:42 ]
Post subject: 

I'll lock this topic as it's posted also here:
http://www.skippari.net/phpBB2/viewtopic.php?t=188

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