Cannot get auto write to work CFAG240128L-TMI-TZ

traveldan

New member
Hi,

I'm trying to get the screen to do a auto write. I am using assembly on a 8088 processor. The program I am using is the one that is on the T6963C Datasheet, so I know it should work. It was, however necessary to translate the code to assembly language, but it should still work.

The problem is that when the status register is read, after the auto write has been enabled, the status is either 23h or A3h. For the auto write to work, there should be a "1" in STA3 bit.

The code from Hitachi polls the status register until that bit is set to "1". A mask of 8h is used of course. I have also tried to insert a delay instead of polling, but the status does not change.

I have also tried many other things like different column settings and different modes.

I have looked at the sample programs in the software section, but they are written in C and I will have to connect the LCD to the computer somehow and at the end of the day it will not solve my 8088 interfacing problem.

I can control the cursor on and off, so that means that the wiring is correct.

Any ideas?

Thanks for your help

Daniel
Looking for additional LCD resources? Check out our LCD blog for the latest developments in LCD technology.
 
If you attach a file containing the relevant parts of your code, I can take a look to see if any obvious problems appear.
 

traveldan

New member
cosmicvoid,

Thanks for the quick reply.

The file is basically the translated code from the datasheet with some feedback in the form of a number displayed on a 7seg display called LED.

The place where the program gets stuck is between lines 362 and 380, the ADT procedure. The first call to this procedure is on line 148. Line 122 contains my feedback to tell me where the program is at.

The 8088 is interfaced with a UART with which I can access the RAM through a serial connection to a PC. At line 371, I am sending whatever is in the status register to the hyper terminal screen.

I hope this is sufficient information.

Thanks again for your help

Daniel
 

Attachments

I don't see anything obvious about your code that would prevent it from working as expected. That said, I see plenty of places where it could be optimized, redundant instructions eliminated, etc. But it looks pretty much like the Toshiba example.
I can control the cursor on and off, so that means that the wiring is correct.
Maybe so, but I am suspicious as to whether you are actually communicating properly with the T6963. I wonder what your cpu clock frequency is (well, actually your I/O timing), and whether you are meeting the timing requirements of the T6963. I presume you have the display connected to the data/address bus and are decoding /CE and using A0 as C/D. The C/D setup time is 100 nS min, and Tacc is 150 nS for reading. So maybe you are too fast and need to add wait states on reads and writes. Its been ages since I did any x86 family hardware projects, so I've forgotten all of the interface characteristics, and most of the assembly language syntax, so maybe I'm missing something here.

I think it might be more telling to do some crude text writes to the screen, to validate the setup. Something like:
Code:
      mov al,41h
      call DT1
      mov  al,0C0h  ;write data
      call CMD

      mov al,42h
      call DT1
      mov  al,0C0h  ;write data
      call CMD
;yada, yada
to put some characters up on the screen. If that works, then your timing is ok, and the auto write should work, too.
 

traveldan

New member
CosmicVoid,

Thanks for your help, I seem to have found the problem. You were right that being able to get a cursor on the screen does not mean that everything is connected correctly.

I got fed up after troubleshooting the code and decided to go back to basics, unplug the screen and check out the control signals. I found that I have connected the A0 (pin8) directly to the uP instead of connecting it to the multiplexer output. A0 to A7 is multiplexed with D0 to D7 on the 8088.

Reconnecting A0 to the right place made it work. The reason it worked sometimes, is that the DATA word was working correctly and fell inside the chip enable pulse, but the command word was sent just before the chip enable. Command_word = DATA_word+1

I am so happy now, and can finally get down to some serious programming, in assembly.

Keep up the good work!

Daniel
 
Top