Connect with us

SED1335 Graphic LCD driver problem

Discussion in 'Electronic Design' started by Aris Konstantinos, Aug 14, 2003.

Scroll to continue with content
  1. Hi Gents;

    I have been trying to make my new shining Winstar WG320240C LCD (
    http://www.winstar.com.tw/detail_view.php?pd_num=WG&pd_nu2=320240C )
    with S1D13305F formerly known as SED1335 controller by using an ATMEL
    ATMEGA162 uc. I have written the below code but when I power up my
    circuit, LCD starts flickering continuesly. I cannot initialize the
    screen and make it running to display some words :(

    Could you please check my code and circuit below if you see something
    wrong and drop me a line or two ;)
    If there is also anyone who worked this LCD out, please send me any
    reference, cuz I am getting crazy soon..



    For connections I set up like:
    ------------------------------------------------

    -----
    |-- PIN1 Ground
    |-- PIN2 +5V
    |-- PIN3 ~apprx. -16V
    |-- PIN4 RD/E connected to PA6
    |-- PIN5 WR/RW connected to PA5
    |-- PIN6 Ao connected to PA7
    |-- PIN7 DB0 connected to PC0
    |-- PIN8 DB1 connected to PC1
    |-- PIN9 DB2 connected to PC2
    LCD |-- PIN10 DB3 connected to PC3
    |-- PIN11 DB4 connected to PC4
    |-- PIN12 DB5 connected to PC5
    |-- PIN13 DB6 connected to PC6
    |-- PIN14 DB7 connected to PC7
    |-- PIN15 CS connected to Gnd
    |-- PIN16 RES connected to PD7
    |-- PIN17 Negative voltage output connected to PIN3 through a
    POT
    |-- PIN18 Frame Ground connected to Gnd
    |-- PIN19 NC
    |-- PIN20 NC
    ----


    My code is:
    ----------------------------------------

    ..include "m162def.inc"
    ..equ CTL_RW = 5
    ..equ CTL_E = 6
    ..equ CTL_A = 7
    ..equ CTLPORT = PORTA
    ..equ DATPORT = PORTC
    ..def rtemp1 = r16
    ..def rtemp2 = r17
    ..def data = r18
    ..macro cmdw
    ldi data, (@0)
    rcall lcd_cmdw
    ..endmacro
    ..macro datw
    ldi data, (@0)
    rcall lcd_datw
    ..endmacro
    ..org 0
    rjmp start
    ;-- lcd_reset
    ;-- adjusts the port/pin directions
    ;-- and sends a reset pulse to the LCD
    lcd_reset:
    ldi rtemp1, $ff
    out DDRA, rtemp1
    ldi rtemp1, $a0
    out PORTA, rtemp1
    ldi rtemp1, $ff
    out DDRC, rtemp1 ; PC0..PC7 -> all output
    sbi DDRD, 7 ; PD7 -> output
    sbi PORTD, 7 ; first set PD7
    rcall delay1ms
    rcall delay1ms
    rcall delay1ms
    rcall delay1ms
    ldi rtemp1, $00
    out PORTA, rtemp1
    cbi PORTD, 7 ; clear PD7 (reset)
    rcall delay1ms ; wait 3ms.
    rcall delay1ms
    rcall delay1ms
    rcall delay1ms
    rcall delay1ms
    sbi PORTD, 7 ; set PD7
    ldi rtemp1, $a0
    out PORTA, rtemp1
    ldi r18, 200
    lcd_rs_lp:
    rcall delay1ms ; wait for stabilization. approx 100 ms.
    dec r18
    brne lcd_rs_lp
    ret
    ;-- lcd_init
    ;-- initializes lcd
    lcd_init:
    ; System Set
    cmdw $40
    datw $30
    datw $87
    datw $07
    datw $27 ; dec 39
    datw $42 ; dec 66
    datw $ef ; dec 239
    datw $28 ; dec 40
    datw $00
    ; Scroll
    cmdw $44
    datw $00
    datw $00
    datw $f0
    datw $80
    datw $25
    datw $f0
    ; HDOT
    cmdw $5a
    datw $00
    ; Overlay
    cmdw $5b
    datw $03
    ; Display OFF
    cmdw $58
    datw $16
    rcall lcd_tclr
    ; Cursor format
    cmdw $5d
    datw $07
    datw $87
    ; Display ON
    cmdw $59
    datw $16
    ; Cursor direction
    cmdw $4c
    ; Cursor write
    cmdw $46
    datw $00
    datw $00
    ret
    lcd_tclr:
    cmdw $46
    datw $00
    datw $00
    ldi r28, $e8
    ldi r29, $03 ; 1000
    cmdw $42
    lcd_tclrlp:
    datw $00
    sbiw r28, 1
    brne lcd_tclrlp
    ret
    ;-- lcd_cmdw
    ;-- writes a command to the lcd.
    lcd_cmdw:
    cbi CTLPORT, CTL_E
    sbi CTLPORT, CTL_A
    cbi CTLPORT, CTL_RW
    sbi CTLPORT, CTL_E
    out DATPORT, data
    cbi CTLPORT, CTL_E
    ret
    ;-- lcd_datw
    ;-- writes data to lcd
    lcd_datw:
    cbi CTLPORT, CTL_E
    cbi CTLPORT, CTL_A
    cbi CTLPORT, CTL_RW
    sbi CTLPORT, CTL_E
    out DATPORT, data
    cbi CTLPORT, CTL_E
    ret
    ;-- delay1ms
    ;-- delays 1000 CLK cycles
    delay1ms:
    nop
    nop
    nop
    ldi rtemp1, 10
    delayo:
    ldi rtemp2, 32
    delayi:
    dec rtemp2
    brne delayi
    dec rtemp1
    brne delayo
    ret
    start:
    ldi rtemp1, 0
    out sreg, rtemp1
    ldi rtemp1, low(RAMEND)
    out spl, rtemp1
    ldi rtemp1, high(RAMEND)
    out sph, rtemp1
    rcall lcd_reset
    rcall lcd_init
    datw $3
    sbi DDRD, 6
    sbi PORTD, 6
    lp: rjmp lp



    Thnx..

    Aris
     
  2. bobi

    bobi Guest

    Hi there

    I am working on exactly the same Winstar LCD using a AT89c52 to start with
    at this moment.

    I had the same problem as you. I played with the initialization values and I
    got it right.
    At the moment I am at work and I don't have the C code with me but as soon
    as I get it I will sent it to you.

    Try the fiddling with the pot controlling the negative voltage. That solved
    one of my early problems.

    Check these values
    It took me a while to calculate the right ones. I still quite don't
    understand it
    I didn't understand what they mean by the frame frequency (is it the power
    frequency 60Hz in the states while 50Hz in Australia)

    I fluked it somehow but it works now. I am still going crazy over it.
     
Ask a Question
Want to reply to this thread or ask your own question?
You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.
Electronics Point Logo
Continue to site
Quote of the day

-