+ Reply to Thread
Results 1 to 23 of 23
  1. #1
    Join Date
    Jul 2005
    Posts
    2

    Red face Graphic LCD support?

    Do you think about adding functions to control Graphic LCDs (PicBasic)?


    Hi, we are pleased to see that you are using our forum.

    We'd like you to become a member of our community. Membership is FREE, please REGISTER and view our forums without these annoying reminders!

    Once registered you may post on the forums, download from the file areas and use the WIKI without interruption.






    Thanks...

  2. #2
    Join Date
    Jun 2005
    Posts
    45

    Default

    I agree graphic support would be nice. Graphic displays are more complicated but PBP support could simplify text and bargraph routines, especially for the novice.

  3. #3
    Join Date
    Jul 2005
    Posts
    2

    Default Thanks

    Thanks Markedwards.

  4. #4
    Join Date
    Jul 2005
    Posts
    26

    Default

    Yes, yes its great idea. We need the Graphic LCD library. We look forward to this support.

    thanks a lot

  5. #5
    Join Date
    May 2004
    Location
    Le Treport 76 FRANCE
    Posts
    3,339

    Talking Happy Dreamers ...

    Quote Originally Posted by muskut
    Yes, yes its great idea. We need the Graphic LCD library. We look forward to this support.

    thanks a lot
    And I suppose you'd like it to fit into a 1K Memory device like 16F84 ????

    Try being serious !!! Just have a look to what exists on the subject ...with a serial input and "line, circle, etc .." commands, it just needs a 16F876@20 Mhz... for a 64 x 128 display.

    And it's full from full's ... LoL !!!

    Alain

  6. #6
    Join Date
    Jul 2005
    Posts
    26

    Default

    Look at this forum title "PBP Wish List".

    And this is my wish. It can be or not. Please Dont move with your supposition and please be careful your words. I bought this compiler and I gave my money for this compiler so I have chance to express my wish to the engineers of the PBP. If the Customer Support of this compiler is good they will consider our wishes. If this wish is possible they will talk about, if its not they will talk about agian.

    thank you so much.

  7. #7
    Join Date
    May 2004
    Location
    Le Treport 76 FRANCE
    Posts
    3,339

    Talking Happy Dreamers

    Hi, Muskut

    IF you daren't read your manual, how will you do for such a complicated piece of software...

    hmmmm ????

    Alain

  8. #8
    bioeng-mostafa's Avatar
    bioeng-mostafa Guest

    Default I Want Help

    Hellow
    I Want The File By Whish I Can Write Progrsm With Pbp
    Or Beatsh
    Thank You

  9. #9
    Join Date
    May 2004
    Location
    New England
    Posts
    164

    Default

    I'd guess the main reason for no graphic support is all the different types of graphic LCD's out there. If MELabs offered support for say the KS0108 type, people would want some other LCD variety supported too.

    The graphic LCD's are really fairly easy to use if you read the data sheets several times (the data sheets are typically pretty poor translations).

    There is also a web-site with some sample code:

    http://www.compsys1.com/workbench/

    Writing your own code allows you to tailor everything to your specific needs, without filling up a whole '876!

  10. #10
    Join Date
    Oct 2010
    Posts
    175

    Default Re: Graphic LCD support?

    Dear All,

    i would like to use GLCD but i cannot do it as your discussion here.

    I only found on the net that PROTON and micro e are able to control very easy GLCD.

    The problem is that we are using now picbasic and i dont wont to change from that, i'm used to it.

    Is there any plan to see an update of the picbasic pro for supporting the GLCD?

  11. #11
    Join Date
    Jan 2005
    Location
    Montreal, Quebec, Canada
    Posts
    1,799

    Default Re: Graphic LCD support?

    Did you search the forum for your particular model of GLCD?

    Did you start a thread asking for help on code or schematic?

    There's already several examples on these forums. Sometimes you can use techniques used for one model and customize it for another with just a few tweaks.

    There was one particular model that I had used that had no examples anywhere on the web. I started with the datasheet, found a "close model" and went on from there.

    Putting too much functionality into PICs is not necessarily a good idea, it takes up space. Imagine if all PICs now had DT's interrupt, barely enough room to LCDOUT "Hello" on most of them, if at all.
    Robert
    Not as dumb as yesterday, but stupider than tomorrow!

  12. #12
    Join Date
    Oct 2010
    Posts
    175

    Default Re: Graphic LCD support?

    yes i have searched for the GLCD 128x64 with Samsung KS0108.

    to be honest with Proton i did a grahpical model in less that 10 minutes.

    Is it so difficult to put a library for these GLCDs? I dont care for the PIC's space since there are 32x16 ones that can store an elephant in there.

    I just want my life to be easier and save time. I didnt ask for a code but for better features like proton and micro c

  13. #13
    Join Date
    Sep 2009
    Posts
    386

    Default Graphic LCD support...

    I'm currently working on a driver for the GLCD.
    Here you can see how far I got.
    Code:
    '****************************************************************
    '*  Name    : GLCD driver                                       *
    '*  Author  : Pedja089                                          *
    '****************************************************************
    ' LCD Commands are:
    '   Lcd_Init
    '   Lcd_SetX
    '   Lcd_SetY                                             
    '   Lcd_Clr
    '   Lcd_On
    
    '   @ PrintStr x,y, "string goes here"  ' will auto wrap to next line if needed
    '   @ PrintVar x,y, _anyvariablehere
    
    '   You can manually position x,y and print characters by the following:
    '   PosX = 0            ' move to position 0 of 83 (char best viewed at spacing of 6)
    '   PosY = 1            ' move to second line of 6
    '   Lcd_SetX
    '   Lcd_SetY 
    '   Lcd_Data = "H"      ' Note byte size single char.
    '   Gosub Lcd_SendChar
              
    
    
    symbol RW=portb.3
    symbol RS = portb.2
    symbol E = portb.4
    symbol CS1 = portb.0
    symbol CS2 = portb.1
    symbol RST = portb.5
    Symbol LCD_DATA=portd
    LCD_DATA=0
    TRISD=0
    output rst 
    Output RW
    Output RS
    Output E
    Output CS1
    Output CS2
    
    PosX            var Byte        ' Variable for Position X
    PosY            var Byte        ' Variable for Position Y
    GLCD_SX     var byte
    GLCD_X          var byte
    GLCD_FC              var Byte [5]    ' Variable 5 bytes = 1 character
    GLCD_CharNum         var byte        ' character number
    GLCD_VarData         var word        ' variable to print to lcd
    GLCD_n0              var byte        ' for next variable
    GLCD_n1              var byte
    GLCD_digits          var bit         ' number of digits in VarData
    GLCD_Addr  VAR WORD
    GLCD_Char  VAR byte ' lcdchardata[0]
    
    gosub Lcd_init
    
    goto OverLCD
    '_______________________________________________________________________________
    ' @ PrintVar macro function 
    ' format should look like this: @ PrintVar x,y, _anyvariable
    ASM
    PrintVar macro x, y, Variable   ; input values from: @PrintVar 0,1, _any_variable  
        local OverVar                
        goto OverVar                
    OverVar
        MOVE?CB  x, _GLCD_X
        MOVE?CB  x, _GLCD_SX
        MOVE?CB  y, _PosY          ; move y from above statement to PosY
        MOVE?WW  Variable, _GLCD_VarData ; move variable in statement to VarData
        L?CALL   _GLCD_VariableOut       ; call VariableOut function
        endm
    ENDASM
    
    GLCD_VariableOut:
        'for GLCD_n1 = 4 to 0 step -1        ' cycles through all possible digits of number
            Gosub Lcd_SetX
            Gosub Lcd_SetY         ' place character at position PosX and PosY
            GLCD_Char = (GLCD_VarData dig 2) + 48 ' digit number n to character str format
            gosub Lcd_SendChar        ' print char to screen
            PosX = PosX + 6           ' next x position for character
            Gosub Lcd_SetX
            Gosub Lcd_SetY         ' place character at position PosX and PosY
            GLCD_Char = (GLCD_VarData dig 1) + 48 ' digit number n to character str format
            gosub Lcd_SendChar        ' print char to screen
            PosX = PosX + 6           ' next x position for character
                    Gosub Lcd_SetX
            Gosub Lcd_SetY         ' place character at position PosX and PosY
            GLCD_Char = (GLCD_VarData dig 0) + 48 ' digit number n to character str format
            gosub Lcd_SendChar        ' print char to screen
            PosX = PosX + 6           ' next x position for character
    GLCD_SkipChar:        
        'next GLCD_n1
    return
    '_______________________________________________________________________________
    ASM
    PrintStr macro x, y, Str
        local TheString, OverStr
        goto OverStr
    TheString
        data  Str, 0
    OverStr
        MOVE?CB  x, _GLCD_X
        MOVE?CB  x, _GLCD_SX
        MOVE?CB  y, _PosY
        MOVE?CW  TheString, _GLCD_Addr
        L?CALL   _GLCD_StringOut
        endm
    ENDASM
    
    GLCD_StringOut:
        Readcode GLCD_Addr, GLCD_Char           ' Get a character
        if GLCD_Char = 0 then GLCD_StringDone   ' Look for Null char, Stop if found
           
        if glcd_x=> 123 then             ' If end of line, cycle to next line
            PosY = PosY + 1           
            glcd_x=GLCD_SX
        endif
        
        If glcd_x<64 then
         lcd_data=0
         cs1=0
         cs2=1
         posx=glcd_x
        else 
         lcd_data=0
         cs1=1
         cs2=0
         posx=glcd_x-64  
        endif   
        
        Gosub Lcd_SetX
        gosub Lcd_SetY 
        gosub Lcd_SendChar            ' puttext
        
        GLCD_Addr = GLCD_Addr + 1               ' Point to next character
        glcd_x=glcd_x + 1
        goto GLCD_StringOut                ' Continue with rest of the string
      GLCD_StringDone:
    return
    
    '_______________________________________________________________________________
    Lcd_SendChar:                                      
        lookdown GLCD_Char,_
        [" !\#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~"],GLCD_CharNum
        GLCD_Char = GLCD_CharNum +32   
        sELECT CASE GLCD_Char                           
        Case 32                   
            GLCD_FC(0)=$00:GLCD_FC(1)=$00:GLCD_FC(2)=$00:GLCD_FC(3)=$00:GLCD_FC(4)=$00 ' // sp
        Case 33                   
            GLCD_FC(0)=$00:GLCD_FC(1)=$00:GLCD_FC(2)=$2f:GLCD_FC(3)=$00:GLCD_FC(4)=$00 ' // !
        Case 34                   
            GLCD_FC(0)=$00:GLCD_FC(1)=$07:GLCD_FC(2)=$00:GLCD_FC(3)=$07:GLCD_FC(4)=$00 ' // " (shown as \ in Lookdown table)
        Case 35                   
            GLCD_FC(0)=$14:GLCD_FC(1)=$7f:GLCD_FC(2)=$14:GLCD_FC(3)=$7f:GLCD_FC(4)=$14 ' // #
        Case 36                   
            GLCD_FC(0)=$24:GLCD_FC(1)=$2a:GLCD_FC(2)=$7f:GLCD_FC(3)=$2a:GLCD_FC(4)=$12 ' // $
        Case 37                   
            GLCD_FC(0)=$c4:GLCD_FC(1)=$c8:GLCD_FC(2)=$10:GLCD_FC(3)=$26:GLCD_FC(4)=$46 ' // %
        Case 38                   
            GLCD_FC(0)=$36:GLCD_FC(1)=$49:GLCD_FC(2)=$55:GLCD_FC(3)=$22:GLCD_FC(4)=$50 ' // &
        Case 39                   
            GLCD_FC(0)=$00:GLCD_FC(1)=$05:GLCD_FC(2)=$03:GLCD_FC(3)=$00:GLCD_FC(4)=$00 ' // '
        Case 40                   
            GLCD_FC(0)=$00:GLCD_FC(1)=$1c:GLCD_FC(2)=$22:GLCD_FC(3)=$41:GLCD_FC(4)=$00 ' // (
        Case 41                   
            GLCD_FC(0)=$00:GLCD_FC(1)=$41:GLCD_FC(2)=$22:GLCD_FC(3)=$1c:GLCD_FC(4)=$00 ' // )
        Case 42                   
            GLCD_FC(0)=$14:GLCD_FC(1)=$08:GLCD_FC(2)=$3E:GLCD_FC(3)=$08:GLCD_FC(4)=$14 ' // *
        Case 43                   
            GLCD_FC(0)=$08:GLCD_FC(1)=$08:GLCD_FC(2)=$3E:GLCD_FC(3)=$08:GLCD_FC(4)=$08 ' // +
        Case 44                   
            GLCD_FC(0)=$00:GLCD_FC(1)=$00:GLCD_FC(2)=$50:GLCD_FC(3)=$30:GLCD_FC(4)=$00 ' // ,
        Case 45                   
            GLCD_FC(0)=$10:GLCD_FC(1)=$10:GLCD_FC(2)=$10:GLCD_FC(3)=$10:GLCD_FC(4)=$10 ' // -
        Case 46                   
            GLCD_FC(0)=$00:GLCD_FC(1)=$60:GLCD_FC(2)=$60:GLCD_FC(3)=$00:GLCD_FC(4)=$00 ' // .
        Case 47                   
            GLCD_FC(0)=$20:GLCD_FC(1)=$10:GLCD_FC(2)=$08:GLCD_FC(3)=$04:GLCD_FC(4)=$02 ' // /
        Case 48                   
            GLCD_FC(0)=$3E:GLCD_FC(1)=$51:GLCD_FC(2)=$49:GLCD_FC(3)=$45:GLCD_FC(4)=$3E ' // 0
        Case 49                   
            GLCD_FC(0)=$00:GLCD_FC(1)=$42:GLCD_FC(2)=$7F:GLCD_FC(3)=$40:GLCD_FC(4)=$00 ' // 1
        Case 50                   
            GLCD_FC(0)=$42:GLCD_FC(1)=$61:GLCD_FC(2)=$51:GLCD_FC(3)=$49:GLCD_FC(4)=$46 ' // 2
        Case 51                   
            GLCD_FC(0)=$21:GLCD_FC(1)=$41:GLCD_FC(2)=$45:GLCD_FC(3)=$4B:GLCD_FC(4)=$31 ' // 3
        Case 52                   
            GLCD_FC(0)=$18:GLCD_FC(1)=$14:GLCD_FC(2)=$12:GLCD_FC(3)=$7F:GLCD_FC(4)=$10 ' // 4
        Case 53                   
            GLCD_FC(0)=$27:GLCD_FC(1)=$45:GLCD_FC(2)=$45:GLCD_FC(3)=$45:GLCD_FC(4)=$39 ' // 5
        Case 54                   
            GLCD_FC(0)=$3C:GLCD_FC(1)=$4A:GLCD_FC(2)=$49:GLCD_FC(3)=$49:GLCD_FC(4)=$30 ' // 6
        Case 55                   
            GLCD_FC(0)=$01:GLCD_FC(1)=$71:GLCD_FC(2)=$09:GLCD_FC(3)=$05:GLCD_FC(4)=$03 ' // 7
        Case 56                   
            GLCD_FC(0)=$36:GLCD_FC(1)=$49:GLCD_FC(2)=$49:GLCD_FC(3)=$49:GLCD_FC(4)=$36 ' // 8
        Case 57                   
            GLCD_FC(0)=$06:GLCD_FC(1)=$49:GLCD_FC(2)=$49:GLCD_FC(3)=$29:GLCD_FC(4)=$1E ' // 9
        Case 58                   
            GLCD_FC(0)=$00:GLCD_FC(1)=$36:GLCD_FC(2)=$36:GLCD_FC(3)=$00:GLCD_FC(4)=$00 ' // :
        Case 59                   
            GLCD_FC(0)=$00:GLCD_FC(1)=$56:GLCD_FC(2)=$36:GLCD_FC(3)=$00:GLCD_FC(4)=$00 ' // ";"
        Case 60                   
            GLCD_FC(0)=$08:GLCD_FC(1)=$14:GLCD_FC(2)=$22:GLCD_FC(3)=$41:GLCD_FC(4)=$00 ' // <
        Case 61                   
            GLCD_FC(0)=$14:GLCD_FC(1)=$14:GLCD_FC(2)=$14:GLCD_FC(3)=$14:GLCD_FC(4)=$14 ' // =
        Case 62                   
            GLCD_FC(0)=$00:GLCD_FC(1)=$41:GLCD_FC(2)=$22:GLCD_FC(3)=$14:GLCD_FC(4)=$08 ' // >
        Case 63                   
            GLCD_FC(0)=$02:GLCD_FC(1)=$01:GLCD_FC(2)=$51:GLCD_FC(3)=$09:GLCD_FC(4)=$06 ' // ?
        Case 64                   
            GLCD_FC(0)=$32:GLCD_FC(1)=$49:GLCD_FC(2)=$59:GLCD_FC(3)=$51:GLCD_FC(4)=$3E ' // @
        Case 65                   
            GLCD_FC(0)=$7E:GLCD_FC(1)=$11:GLCD_FC(2)=$11:GLCD_FC(3)=$11:GLCD_FC(4)=$7E ' // A
        Case 66                   
            GLCD_FC(0)=$7F:GLCD_FC(1)=$49:GLCD_FC(2)=$49:GLCD_FC(3)=$49:GLCD_FC(4)=$36 ' // B
        Case 67                   
            GLCD_FC(0)=$3E:GLCD_FC(1)=$41:GLCD_FC(2)=$41:GLCD_FC(3)=$41:GLCD_FC(4)=$22 ' // C
        Case 68                   
            GLCD_FC(0)=$7F:GLCD_FC(1)=$41:GLCD_FC(2)=$41:GLCD_FC(3)=$22:GLCD_FC(4)=$1C ' // D
        Case 69                   
            GLCD_FC(0)=$7F:GLCD_FC(1)=$49:GLCD_FC(2)=$49:GLCD_FC(3)=$49:GLCD_FC(4)=$41 ' // E
        Case 70                   
            GLCD_FC(0)=$7F:GLCD_FC(1)=$09:GLCD_FC(2)=$09:GLCD_FC(3)=$09:GLCD_FC(4)=$01 ' // F
        Case 71                   
            GLCD_FC(0)=$3E:GLCD_FC(1)=$41:GLCD_FC(2)=$49:GLCD_FC(3)=$49:GLCD_FC(4)=$7A ' // G
        Case 72                   
            GLCD_FC(0)=$7F:GLCD_FC(1)=$08:GLCD_FC(2)=$08:GLCD_FC(3)=$08:GLCD_FC(4)=$7F ' // H
        Case 73                   
            GLCD_FC(0)=$00:GLCD_FC(1)=$41:GLCD_FC(2)=$7F:GLCD_FC(3)=$41:GLCD_FC(4)=$00 ' // I
        Case 74                   
            GLCD_FC(0)=$20:GLCD_FC(1)=$40:GLCD_FC(2)=$41:GLCD_FC(3)=$3F:GLCD_FC(4)=$01 ' // J
        Case 75                   
            GLCD_FC(0)=$7F:GLCD_FC(1)=$08:GLCD_FC(2)=$14:GLCD_FC(3)=$22:GLCD_FC(4)=$41 ' // K
        Case 76                   
            GLCD_FC(0)=$7F:GLCD_FC(1)=$40:GLCD_FC(2)=$40:GLCD_FC(3)=$40:GLCD_FC(4)=$40 ' // L
        Case 77                   
            GLCD_FC(0)=$7F:GLCD_FC(1)=$02:GLCD_FC(2)=$0C:GLCD_FC(3)=$02:GLCD_FC(4)=$7F ' // M
        Case 78                   
            GLCD_FC(0)=$7F:GLCD_FC(1)=$04:GLCD_FC(2)=$08:GLCD_FC(3)=$10:GLCD_FC(4)=$7F ' // N
        Case 79                   
            GLCD_FC(0)=$3E:GLCD_FC(1)=$41:GLCD_FC(2)=$41:GLCD_FC(3)=$41:GLCD_FC(4)=$3E ' // O
        Case 80                   
            GLCD_FC(0)=$7F:GLCD_FC(1)=$09:GLCD_FC(2)=$09:GLCD_FC(3)=$09:GLCD_FC(4)=$06 ' // P
        Case 81                   
            GLCD_FC(0)=$3E:GLCD_FC(1)=$41:GLCD_FC(2)=$51:GLCD_FC(3)=$21:GLCD_FC(4)=$5E ' // Q
        Case 82                   
            GLCD_FC(0)=$7F:GLCD_FC(1)=$09:GLCD_FC(2)=$19:GLCD_FC(3)=$29:GLCD_FC(4)=$46 ' // R
        Case 83                   
            GLCD_FC(0)=$46:GLCD_FC(1)=$49:GLCD_FC(2)=$49:GLCD_FC(3)=$49:GLCD_FC(4)=$31 ' // S
        Case 84                   
            GLCD_FC(0)=$01:GLCD_FC(1)=$01:GLCD_FC(2)=$7F:GLCD_FC(3)=$01:GLCD_FC(4)=$01 ' // T
        Case 85                   
            GLCD_FC(0)=$3F:GLCD_FC(1)=$40:GLCD_FC(2)=$40:GLCD_FC(3)=$40:GLCD_FC(4)=$3F ' // U
        Case 86                   
            GLCD_FC(0)=$1F:GLCD_FC(1)=$20:GLCD_FC(2)=$40:GLCD_FC(3)=$20:GLCD_FC(4)=$1F ' // V
        Case 87                   
            GLCD_FC(0)=$3F:GLCD_FC(1)=$40:GLCD_FC(2)=$38:GLCD_FC(3)=$40:GLCD_FC(4)=$3F ' // W
        Case 88                   
            GLCD_FC(0)=$63:GLCD_FC(1)=$14:GLCD_FC(2)=$08:GLCD_FC(3)=$14:GLCD_FC(4)=$63 ' // X
        Case 89                   
            GLCD_FC(0)=$07:GLCD_FC(1)=$08:GLCD_FC(2)=$70:GLCD_FC(3)=$08:GLCD_FC(4)=$07 ' // Y
        Case 90                   
            GLCD_FC(0)=$61:GLCD_FC(1)=$51:GLCD_FC(2)=$49:GLCD_FC(3)=$45:GLCD_FC(4)=$43 ' // Z
        Case 91                   
            GLCD_FC(0)=$00:GLCD_FC(1)=$7F:GLCD_FC(2)=$41:GLCD_FC(3)=$41:GLCD_FC(4)=$00 ' // [
        Case 92                   
            GLCD_FC(0)=$02:GLCD_FC(1)=$04:GLCD_FC(2)=$08:GLCD_FC(3)=$10:GLCD_FC(4)=$20 ' // \  (we are using this for Case 34 " above)
        Case 93                   
            GLCD_FC(0)=$00:GLCD_FC(1)=$41:GLCD_FC(2)=$41:GLCD_FC(3)=$7F:GLCD_FC(4)=$00 ' // ]
        Case 94                   
            GLCD_FC(0)=$04:GLCD_FC(1)=$02:GLCD_FC(2)=$01:GLCD_FC(3)=$02:GLCD_FC(4)=$04 ' // ^
        Case 95                   
            GLCD_FC(0)=$40:GLCD_FC(1)=$40:GLCD_FC(2)=$40:GLCD_FC(3)=$40:GLCD_FC(4)=$40 ' // _
        Case 96                   
    '        GLCD_FC(0)=$00:GLCD_FC(1)=$01:GLCD_FC(2)=$02:GLCD_FC(3)=$04:GLCD_FC(4)=$00 ' // ` 
            GLCD_FC(0)=$02:GLCD_FC(1)=$04:GLCD_FC(2)=$08:GLCD_FC(3)=$10:GLCD_FC(4)=$20 ' // \ (shown as ` in Lookdown table)
        Case 97                   
            GLCD_FC(0)=$20:GLCD_FC(1)=$54:GLCD_FC(2)=$54:GLCD_FC(3)=$54:GLCD_FC(4)=$78 ' // a
        Case 98                   
            GLCD_FC(0)=$7F:GLCD_FC(1)=$48:GLCD_FC(2)=$44:GLCD_FC(3)=$44:GLCD_FC(4)=$38 ' // b
        Case 99                   
            GLCD_FC(0)=$38:GLCD_FC(1)=$44:GLCD_FC(2)=$44:GLCD_FC(3)=$44:GLCD_FC(4)=$20 ' // c
        Case 100                   
            GLCD_FC(0)=$38:GLCD_FC(1)=$44:GLCD_FC(2)=$44:GLCD_FC(3)=$48:GLCD_FC(4)=$7F ' // d
        Case 101                   
            GLCD_FC(0)=$38:GLCD_FC(1)=$54:GLCD_FC(2)=$54:GLCD_FC(3)=$54:GLCD_FC(4)=$18 ' // e
        Case 102                   
            GLCD_FC(0)=$08:GLCD_FC(1)=$7E:GLCD_FC(2)=$09:GLCD_FC(3)=$01:GLCD_FC(4)=$02 ' // f
        Case 103                   
            GLCD_FC(0)=$0C:GLCD_FC(1)=$52:GLCD_FC(2)=$52:GLCD_FC(3)=$52:GLCD_FC(4)=$3E ' // g
        Case 104                   
            GLCD_FC(0)=$7F:GLCD_FC(1)=$08:GLCD_FC(2)=$04:GLCD_FC(3)=$04:GLCD_FC(4)=$78 ' // h
        Case 105                   
            GLCD_FC(0)=$00:GLCD_FC(1)=$44:GLCD_FC(2)=$7D:GLCD_FC(3)=$40:GLCD_FC(4)=$00 ' // i
        Case 106                   
            GLCD_FC(0)=$20:GLCD_FC(1)=$40:GLCD_FC(2)=$44:GLCD_FC(3)=$3D:GLCD_FC(4)=$00 ' // j
        Case 107                   
            GLCD_FC(0)=$7F:GLCD_FC(1)=$10:GLCD_FC(2)=$28:GLCD_FC(3)=$44:GLCD_FC(4)=$00 ' // k
        Case 108                   
            GLCD_FC(0)=$00:GLCD_FC(1)=$41:GLCD_FC(2)=$7F:GLCD_FC(3)=$40:GLCD_FC(4)=$00 ' // l
        Case 109                   
            GLCD_FC(0)=$7C:GLCD_FC(1)=$04:GLCD_FC(2)=$18:GLCD_FC(3)=$04:GLCD_FC(4)=$78 ' // m
        Case 110                   
            GLCD_FC(0)=$7C:GLCD_FC(1)=$08:GLCD_FC(2)=$04:GLCD_FC(3)=$04:GLCD_FC(4)=$78 ' // n
        Case 111                   
            GLCD_FC(0)=$38:GLCD_FC(1)=$44:GLCD_FC(2)=$44:GLCD_FC(3)=$44:GLCD_FC(4)=$38 ' // o
        Case 112                   
            GLCD_FC(0)=$7C:GLCD_FC(1)=$14:GLCD_FC(2)=$14:GLCD_FC(3)=$14:GLCD_FC(4)=$08 ' // p
        Case 113                   
            GLCD_FC(0)=$08:GLCD_FC(1)=$14:GLCD_FC(2)=$14:GLCD_FC(3)=$18:GLCD_FC(4)=$7C ' // q
        Case 114                   
            GLCD_FC(0)=$7C:GLCD_FC(1)=$08:GLCD_FC(2)=$04:GLCD_FC(3)=$04:GLCD_FC(4)=$08 ' // r
        Case 115                   
            GLCD_FC(0)=$48:GLCD_FC(1)=$54:GLCD_FC(2)=$54:GLCD_FC(3)=$54:GLCD_FC(4)=$20 ' // s
        Case 116                   
            GLCD_FC(0)=$04:GLCD_FC(1)=$3F:GLCD_FC(2)=$44:GLCD_FC(3)=$40:GLCD_FC(4)=$20 ' // t
        Case 117                   
            GLCD_FC(0)=$3C:GLCD_FC(1)=$40:GLCD_FC(2)=$40:GLCD_FC(3)=$20:GLCD_FC(4)=$7C ' // u
        Case 118                   
            GLCD_FC(0)=$1C:GLCD_FC(1)=$20:GLCD_FC(2)=$40:GLCD_FC(3)=$20:GLCD_FC(4)=$1C ' // v
        Case 119                   
            GLCD_FC(0)=$3C:GLCD_FC(1)=$40:GLCD_FC(2)=$30:GLCD_FC(3)=$40:GLCD_FC(4)=$3C ' // w
        Case 120                    
            GLCD_FC(0)=$44:GLCD_FC(1)=$28:GLCD_FC(2)=$10:GLCD_FC(3)=$28:GLCD_FC(4)=$44 ' // x 
        Case 121                    
            GLCD_FC(0)=$0C:GLCD_FC(1)=$50:GLCD_FC(2)=$50:GLCD_FC(3)=$50:GLCD_FC(4)=$3C ' // y 
        Case 122                    
            GLCD_FC(0)=$44:GLCD_FC(1)=$64:GLCD_FC(2)=$54:GLCD_FC(3)=$4C:GLCD_FC(4)=$44 ' // z 
        case 123
    '        GLCD_FC(0)=$00:GLCD_FC(1)=$08:GLCD_FC(2)=$36:GLCD_FC(3)=$41:GLCD_FC(4)=$00'  // {
            GLCD_FC(0)=$10:GLCD_FC(1)=$24:GLCD_FC(2)=$20:GLCD_FC(3)=$24:GLCD_FC(4)=$10 ' // Smily face (shown as { in Lookdown table)
        case 124
    '        GLCD_FC(0)=$00:GLCD_FC(1)=$00:GLCD_FC(2)=$7F:GLCD_FC(3)=$00:GLCD_FC(4)=$00 ' // |
            GLCD_FC(0)=$20:GLCD_FC(1)=$40:GLCD_FC(2)=$20:GLCD_FC(3)=$10:GLCD_FC(4)=$08 ' // Tick (shown as | in Lookdown table)
        case 125
    '        GLCD_FC(0)=$00:GLCD_FC(1)=$41:GLCD_FC(2)=$36:GLCD_FC(3)=$08:GLCD_FC(4)=$00'  // }    
            GLCD_FC(0)=$20:GLCD_FC(1)=$14:GLCD_FC(2)=$10:GLCD_FC(3)=$14:GLCD_FC(4)=$20 ' // Frown face (shown as } in Lookdown table)
        case 126
            GLCD_FC(0)=$10:GLCD_FC(1)=$08:GLCD_FC(2)=$08:GLCD_FC(3)=$10:GLCD_FC(4)=$08'  // ~
    '    case 127
    '        GLCD_FC(0)=$10:GLCD_FC(1)=$08:GLCD_FC(2)=$08:GLCD_FC(3)=$10:GLCD_FC(4)=$08'  // DEL        
    '    Case 128
    '        GLCD_FC(0)=$55:GLCD_FC(1)=$2A:GLCD_FC(2)=$55:GLCD_FC(3)=$2A:GLCD_FC(4)=$55 ' // 55 (shaded)
        end SELECT
        for GLCD_n0 = 0 to 4
       
         If glcd_x=64 then
               lcd_data=0
               cs1=1
               cs2=0
               posx=0 
               gosub lcd_setx
               gosub lcd_sety
         endif
         glcd_x=glcd_x + 1
         lcd_data=GLCD_FC(GLCD_n0)
         GOSUB Lcd_Pod
        next GLCD_n0
        return
    '_______________________________________________________________________________
    
    Lcd_Init:
     posx=0
     posy=0
     rw=0
     cs1=0
     cs2=0
     e=1
     LCD_DATA=0
     rst=0
     pause 1
     rst=1
     cs1=1
     cs2=1
     gosub Lcd_On
     LCD_DATA=192
     gosub Lcd_Kom
     gosub Lcd_clr
    return
    
    
    Lcd_Pod:
        rs=1
        e=0
        pauseus 1
        e=1
        pauseus 1
    return
    Lcd_Kom:
        rs=0
        e=0
        pauseus 1
        e=1
        pauseus 1
    return
    
    Lcd_SetX:
        LCD_DATA=64+posx
        gosub Lcd_Kom
    return
    
    Lcd_SetY:
        LCD_DATA=184+posy
        gosub Lcd_Kom
    return
    
    Lcd_Clr:
     for GLCD_n0=0 to 7
      posy=GLCD_n0
      gosub Lcd_SetY
      posx=0 
      gosub Lcd_SetX
      LCD_DATA=0
      for GLCD_n1=0 to 63
       gosub Lcd_pod
      next GLCD_n1
     next GLCD_n0
    return
    
    Lcd_Off:
    LCD_DATA=62
    gosub Lcd_kom
    return
    
    Lcd_On:
    LCD_DATA=63
    gosub Lcd_Kom
    return
    
    OverLCD:
    Code:
    include "glcd.pbp"
    z var byte
    z=12
        pause 2000
    pocetak:
    @ PrintStr 1,0,"Some text and move to second line if first line isn't enought bla bla"
    PAUSE 2000
    @ PrintStr 7,4,"test"
    '@ PrintVar 3,6, _z ' I allways get random number
    pause 1000
    end
    Text works correctly, but the variable can not make it to work.
    Code is not mine, I downloaded it from the forum and make some changes.

  14. #14
    Join Date
    Oct 2010
    Posts
    175

    Default Re: Graphic LCD support?

    that's very interesting, thank you a lot.

    But why they dont make one for all of us?

  15. #15
    Join Date
    Jan 2005
    Location
    Montreal, Quebec, Canada
    Posts
    1,799

    Default Re: Graphic LCD support?

    Look at what I found going through my archives:

    Code:
    '************************************************************************
    'GLIPICW.BAS Graphic application for use with a KS0108 (or compatible)
    'graphic LCD controller connected to a Microchip(TM) PIC 16F877
    'Written in MELabs PicBasicPro(TM) Ver 3.32
    'Beta version 0.8.0
    '================== NOT FOR COMMERICIAL USE =============================
    '
    '       Author: Ranjit Diol - COMPSys LLC, March 2000
    '            (c) Copyright Ranjit Diol, 2001
    '
    '   DISCLAIMER: This file is being released as non-commericial
    '   freeware. It is being provided "AS IS", neither the author, 
    '   nor COMPSys LLC shall be held liable for any damages caused
    '   by its use.
    '
    '   LICENSE: This application may be used in its entirety or 
    '   in parts within some other non-commercial application as long
    '   as the author is given credit for those parts used.
    '
    '        Contact: rsdiol@compsys1.com for more information
    '
    '************************************************************************
    '                  IMPORTANT, PLEASE NOTE THE FOLLOWING
    'This application assumes you have a 64KBit external eeprom connected
    'via I2C. Without that you will only be able to send images directly
    'to the LCD display and not be able to store them -- See the readme.txt
    'for the Windows GLiPIC interface.
    '
    'Adjust the PIN assignments as neccessary for your prototype
    'This was tested using a 20MHz xtal if you use a different OSC speed
    'you may have to make some adjustement in the 'strobe' subroutine.
    '************************************************************************
     
    DEFINE ONINT_USED 1 'Required if using ISP
    DEFINE OSC 20   'OSC speed, you may have to tweak the 'strobe'
        'routine's e_pause constant for other speeds
    ADCON1 = 7   'Make all pins digital, you may adjust as needed
     
    SPBRG=0    '************ NOTE ***********
    RCSTA=0    'This is required if you are using
    TXSTA=2    'Shane Tolmie's bootloader (PICLoader)
        '*****************************
     
    dat  VAR  PORTD  'LCD bus Pins 7-14 LSB-MSB
    scl  VAR  PORTC.3  'I2C SCL  for ext eeprom 
    sda  VAR PORTC.4  'I2C SDA for ext eeprom
    in_pin   VAR    PORTC.7         'Serial input pin
    out_pin  VAR    PORTC.6         'Serial output pin
    e  VAR  PORTC.0  'Enable pin on LCD
    cd  VAR PORTC.1  'Data/Command Pin 4 on LCD
    rw  VAR  PORTC.2  'Read/Write Pin 5 on LCD
    cs1  VAR  PORTB.1  'ChipSelect1 Pin 15 on LCD
    cs2  VAR PORTB.2  'ChipSelect2 Pin 16 on LCD
    rst  VAR PORTC.5  'Reset Pin 17 on LCD
    'Set pins for output
    TRISB.0  = 0
    TRISB.1  = 0
    TRISB.2  = 0
    TRISD  = 0
    TRISC.0  = 0
    TRISC.1  = 0
    TRISC.2  = 0
    TRISC.3  = 0
    TRISC.4  = 0
    TRISC.5  = 0
    'Constants used
    ser_baud  CON    32             '19200 baud serout/serin
    ctl       CON    $A0  'EEprom control code
    row    CON  $b8  'LCD page 0
    last_row  CON    $bf  'LCD page 7
    col   CON    $40         'Line byte position 0
    last_col  CON    63             'Last column (1-64)
    first_col CON    0  'First column
    max_col   CON    128            'Last column (1-127)
    max_line  CON    8  'Line 8 (based on 1-8)
    max_pos   CON    64             'Column 64 positon per side (1-64)
    cr        CON    13  'CR for serout
    lf        CON    10  'LF for serout
    disp_on   CON    $3f  'LCD Display ON
    disp_off  CON    $3e            'LCD Display OFF
    disp_ram  CON    $c0            'Ram Display 0 (Page 0 at top of display) 
    blank     CON    $00  'Blank character
    e_pause   CON    10  'Pauseus 6 for Strobe routine
    'Word variables used
    eepaddr  VAR    WORD
    addr     VAR    WORD
    'Arrays used
    in_array VAR    byte[32]
    in_ctl   VAR    byte[8]
    'Byte Variables used
    buff_count VAR  BYTE 'buffer count
    hex_nibble VAR  BYTE 'hex nibble from serin
    in_ascii   VAR  BYTE 'ASCII char from serin
    buf_cnt    VAR  BYTE 'buffer counter
    byte_pos   VAR  BYTE 'To keep track of a byte's position
    in_byte    VAR  BYTE 'The incoming byte
    tmp    VAR BYTE 'Temporary var
    index    VAR BYTE 'Index for arrays
    j    VAR  BYTE 'General counter
    k    VAR  BYTE 'General counter
    line    VAR  BYTE 'An LCD row
    delay      VAR  BYTE 'Execution delay, used with 'pause'
    'Initialize variables
    hex_nibble = 0
    byte_pos   = 0
    delay      = 10
    in_byte    = 0
    tmp        = 0
    index      = 0
     
    'Reset LCD
    dat = 0 ' Clear PORTD
    cd =  0
    rw =  0
    e =   0
    cs1 = 1
    cs2 = 0
    rst = 1
    pause 100 'Let things  stabilize
    rst = 0
    pause 10 ' Reset LCD
    rst = 1
    pause  500
     
    'Jump over subroutines to main program
    goto main
    ' **** (GO)SUB ROUTINES ****
    strobe:
     e = 1
     pauseus e_pause
     e = 0
    return
    clearall:
     cd = 0  ' Command mode
     dat = disp_off ' Display Off
     gosub strobe
     cs1=1
     cs2=0
     for index = 1 to 2
              for j = row to last_row
             cd = 0         'Command mode
              gosub strobe ' Write the data
             dat = col ' Column address = 0
             gosub strobe
             dat = j
             gosub strobe 
             cd = 1  ' Write mode
               for k = first_col to last_col
                  dat = blank
                  gosub strobe
               next
       next
       swap cs1,cs2
            next
     cs1=0
     cs2=1
     cd=0
     dat=row
     gosub strobe
     dat = disp_ram ' Ram Line 0
     gosub strobe
     dat=col
     gosub strobe
     dat = disp_on 'display on
     gosub strobe
     cs1=1
     cs2=0
     dat=row
     gosub strobe
     dat = disp_ram ' Ram Line 0
     gosub strobe
     dat=col
     gosub strobe
     dat = disp_on 'display on
     gosub strobe
     cd = 1  ' Set Data command
     cs1 = 1  ' Left side active
     cs2 = 0
    return 
     
    init:   'Initialization
     cd = 0   ' Set command mode
     cs1 = 1   ' Left Side on
     cs2 = 0   ' Right Side off 
             for index = 1 to 2
        dat = disp_off ' Display Off
        dat = disp_ram ' Ram Line 0
        gosub strobe  ' Write the data
        dat = col  ' Y address = 0
        gosub strobe
        dat = row  ' Page = 0
        gosub strobe
        dat = disp_on ' Display On
        gosub strobe
        swap cs1,cs2
             next
     cs1=1
     cs2=0
     
    return
    '****Place char on LCD Routine *****
    'Place byte of data on lcd assumes in_byte, byte_pos and line (line)
    'Char position on LCD byte_pos = 0-127 (Horiz), ROW 0-7 (vert)
    putbyte: 
     dat = in_byte  'Display the byte
     gosub strobe   
     byte_pos=byte_pos+1 'Increment position
     'Now do some LCD house cleaning and adjust counters
     if byte_pos=max_pos then
        cs1=0
        cs2=1
        cd = 0
        dat = col
        gosub strobe
        dat = disp_ram
        gosub strobe
        dat = row + line
        gosub strobe
        cd = 1
     endif
         if byte_pos = max_col then 'Check if
        line = line + 1  'New Line
                  if line = max_line then
             line = 0
                  endif
         byte_pos = 0  'Reset byte_pos
            cs1=1
     cs2=0
     cd = 0
     dat=col
     gosub strobe
     dat = row + line
     gosub strobe
     dat = disp_ram
     gosub strobe
            cd =1 
         endif
     
    return
    '***** Convert incoming ascii to hex byte Routine *****
    find:
    Lookdown in_array[index],["0123456789abcdef"],hex_nibble
    return 
     
    '===============================
    ' **** BEGIN MAIN PROGRAM ******
    '===============================
     
    main:
     gosub init ' Initialize LCD
     gosub clearall ' Clear all pages
     serout2 out_pin,ser_baud,["Load image..."]
    goto term
    logo: gosub init ' Initialize LCD
     gosub clearall ' Clear all pages
     
    '**** DISPLAY IMAGES IN EXTERNAL 64KBit EEPROM VIA I2C *****
    ' Load opening screen from eeprom assuming a 64KBit eeprom
     byte_pos=0
     line =0
     for addr = 0 to 8192
            I2CREAD sda,scl,ctl,addr,[in_byte]
     gosub putbyte
            if (addr=1024) OR (addr=2048) OR (addr= 3072) OR (addr=4096) OR (addr=5120) OR (addr=6144) OR (addr=7168) OR (addr=8192) then
     pause 4000
     gosub init
     gosub clearall
     endif
     next
            pause 4000
     gosub init
     gosub clearall
    'goto logo  'Continue looping inifitum!
    '********************************************
    'Terminal Subroutine
    term:  'Assumes Home Position
    'Setup variables
    j=0
    index=0
    k=0
    'line=0
    addr=0
    in_ascii = 0
    buff_count = 32
    delay = 10
    'addr = 0
    'byte_pos = 0
    'Get the initial parameters
    get_param:
            addr = 0
            byte_pos = 0
            line=0
     serin2 in_pin,ser_baud,[wait ("*"),STR in_ctl\9]
     for index = 0 to 8
            Lookdown in_ctl[index],["0123456789abcdef"],hex_nibble
     in_ctl[index]=hex_nibble
     next
     delay = (in_ctl[7]<<4) | in_ctl[8]
     buff_count = (in_ctl[1]<<4) | in_ctl[2]
     addr.byte1 = (in_ctl[3] <<4) | in_ctl[4]
     addr.byte0 = (in_ctl[5] <<4) | in_ctl[6]
     buf_cnt = (buff_count - 1)
            eepaddr = addr
     j=in_ctl[0]
     if j = 3 then lcd_loop   'Display directly on LCD
     if j = 1 then eep_loop  'Load ext eeprom
     if j = 2 then logo  'Display images loop
     goto get_param     
     
     
    eep_loop:
     
      serin2 in_pin,ser_baud,5000,get_param,[wait ("]"),STR in_array\buff_count]  'Wait for ] and the load in_array
      for index = 0 to (buff_count - 1)
                    gosub find   'Get char and place in array
             in_array[index]=hex_nibble
      next
     for index = 0 to (buff_count - 1) step 2
      in_byte = (in_array[index]<<4) | (in_array[index+1]) 'Form a hex number MSB-LSB
             I2CWRITE sda,scl,ctl,addr,[in_byte]
             pause 5
                    addr=addr+1                
     next
    goto eep_loop
    lcd_loop:   
      serin2 in_pin,ser_baud,5000,get_param,[wait ("]"),STR in_array\buff_count]  'Wait for ] and the load in_array
      for index = 0 to (buff_count - 1)
                    gosub find   'Get char and place in array
             in_array[index]=hex_nibble
      next
     
     for index = 0 to (buff_count - 1) step 2
      in_byte = (in_array[index]<<4) | (in_array[index+1]) 'Form a hex number MSB-LSB
             gosub putbyte 
     
     
     next
     
    goto lcd_loop
    '*********** E N D ************
    end
    ' **** END OF MAIN PROGRAM ****
    Last edited by Demon; - 3rd May 2011 at 05:58.

  16. #16
    Join Date
    Jan 2005
    Location
    Montreal, Quebec, Canada
    Posts
    1,799

    Default Re: Graphic LCD support?

    It had the following text file for pinout:

    GLIPIC BOARD Ver C and and Higher
    =================================
    The GL board 20 pin header has the following pinouts:
    PIN ----- PIC PIN ------------ KS0108 pin
    01---------- GND --------------- GND
    02-----------Vdd 5v--------------Vdd
    03---- wiper of 20k pot-----------Vo
    04-----------PORTC.1--------------D/I
    05---------- PORTC.2--------------R/W
    06-----------PORTC.0-------------- E
    07-----------PORTD.0--------------DB0
    08-----------PORTD.1--------------DB1
    09-----------PORTD.2--------------DB2
    10-----------PORTD.3--------------DB3
    11-----------PORTD.4--------------DB4
    12-----------PORTD.5--------------DB5
    13-----------PORTD.6--------------DB6
    14-----------PORTD.7--------------DB7
    15-----------PORTB.1--------------CS1
    16-----------PORTB.1--------------CS2
    17-----------PORTC.5-------------RESET
    18-------one end of 20k pot----- Vee(connects to Vo via the 20k pot)
    19-----------PORTE.1---Do not connect to KS0108 LCD*
    20-----------PORTE.2---Do not connect to KS0108 LCD*

    *If the LCD has a backlight LCD PINS 19 and 20 are used to power the backlight. Usually, for an LED backlight PIN19 is the A (anode) and PIN 20 is K (cathode). However, on some displays the order is reversed. Check LCD documentation before connecting power to them!
    If you have a 128x64 KS0108 LCD with the above pinouts, then you can test out the GL board by running the Windows app GLUTIL2.EXE.
    All the credit goes to the good people at Compsys.
    http://www.compsys1.com/workbench/On...ontroller.html

    I had saved these files back in 2005 when I was starting on LCDs.
    Last edited by Demon; - 30th April 2011 at 03:26.

  17. #17
    Join Date
    Sep 2009
    Posts
    386

    Default Re: Graphic LCD support?

    I first I tried so I just used a lookup instead of eeprom ....
    Here's the code
    Code:
    trisb=0
    trisd=0           
    portb=0
    portd=0 
    symbol RW=portb.3
    symbol RS = portb.2
    symbol E = portb.4
    symbol CS1 = portb.0
    symbol CS2 = portb.1
    symbol RST = portb.5
    Symbol LCDDATA=portd
    i var byte
    X var byte
    Y var byte
    pocetak:
    call init
    
     LCDDATA=0
     call clr
     cs1=0
     x=1
     call setx
    
     y=0
     call sety
     for i=0 to 63 
        Lookup i, [$00,$00,$FE,$FE,$FE,$FE,$1E,$1E,$1E,$1E,$1E,$1E,$1E,$1E,$FE,$FE,$FC,$F8,$00,$FE,$FE,$FE,$FE,$0E,$0E,$0E,$0E,$0E,$0E,$0C,$00,$00,$00,$FE,$FE,$FE,$FE,$0E,$0E,$0E,$0E,$0E,$0E,$0E,$FE,$FC,$F8,$F0,$00,0,$FE,$FE,$FE,$FE,$0E,$0E,$0E,$0E,$0E,$0E,$FE,$FE,$FC,$F8], LCDDATA
        call pod
     next i
     x=2
     y=0
     call sety
     call setx
     for i=0 to 63 
        Lookup i, [$00,$00,$FF,$FF,$FF,$FF,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$7F,$3F,$00,$FF,$FF,$FF,$FF,$E0,$E0,$E0,$E0,$E0,$E0,$E0,$00,$00,$E0,$FF,$FF,$FF,$FF,$E0,$E0,$C0,$00,$00,$00,$00,$FF,$FF,$FF,$FF,$00,0,$FF,$FF,$FF,$FF,$80,$80,$80,$80,$80,$80,$FF,$FF,$FF,$FF], LCDDATA
        call pod
     next i
      x=3
      y=0
     call sety
     call setx
     for i=0 to 63 
        Lookup i, [$00,$00,$FF,$FF,$FF,$FF,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$FF,$FF,$FF,$FF,$01,$01,$01,$01,$01,$01,$01,$00,$00,$01,$FF,$FF,$FF,$FF,$01,$01,$01,$00,$00,$00,$00,$FF,$FF,$FF,$FF,$00,0,$FF,$FF,$FF,$FF,$07,$07,$07,$07,$07,$07,$FF,$FF,$FF,$FF], LCDDATA
        call pod
     next i
    
      x=4
      y=0
     call sety
     call setx
     for i=0 to 63 
        Lookup i, [$00,$00,$FF,$FF,$FF,$FF,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$FF,$FF,$FF,$FF,$E0,$E0,$E0,$E0,$E0,$E0,$E0,$E0,$00,$00,$FF,$FF,$FF,$FF,$E0,$E0,$E0,$E0,$E0,$E0,$E0,$FF,$FF,$FF,$FF,$00,0,$FF,$FF,$FF,$FF,$00,$00,$00,$00,$00,$00,$FF,$FF,$FF,$FF], LCDDATA
        call pod
     next i
     
     LCDDATA=0
     cs1=1 
     cs2=0
     
      x=1
     call setx
     for i=0 to 63 
        Lookup i, [$00,$00,$FE,$FE,$FE,$FE,$1E,$1E,$1E,$1E,$1E,$1E,$1E,$1E,$FE,$FE,$FC,$F8,$00,$FE,$FE,$FE,$FE,$1E,$1E,$1E,$1E,$1E,$1E,$FE,$FE,$FC,$F8,$00,$FE,$FE,$FE,$FE,$0E,$0E,$0E,$0E,$0E,$0E,$0E,$FE,$FE,$FC,$F8,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00], LCDDATA
        call pod
     next i
     x=2
     call setx
     for i=0 to 63 
        Lookup i, [$00,$00,$FF,$FF,$FF,$FF,$00,$00,$00,$00,$00,$00,$00,$00,$FF,$FF,$FF,$FF,$00,$FF,$FF,$FF,$FF,$80,$80,$80,$80,$80,$80,$FF,$FF,$FF,$FF,$00,$FF,$FF,$FF,$FF,$80,$80,$80,$80,$80,$80,$80,$FF,$FF,$FF,$FF,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00], LCDDATA
        call pod
     next i
      x=3
     call setx
     for i=0 to 63 
        Lookup i, [$00,$00,$FF,$FF,$FF,$FF,$00,$00,$00,$00,$00,$00,$00,$00,$FF,$FF,$FF,$FF,$00,$FF,$FF,$FF,$FF,$07,$07,$07,$07,$07,$07,$FF,$FF,$FF,$FF,$00,$07,$07,$07,$07,$07,$07,$07,$07,$07,$07,$07,$FF,$FF,$FF,$FF,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00], LCDDATA
        call pod
     next i
      x=4
     call setx
     for i=0 to 63 
        Lookup i, [$00,$00,$FF,$FF,$FF,$FF,$E0,$E0,$E0,$E0,$E0,$E0,$E0,$E0,$FF,$FF,$FF,$FF,$00,$FF,$FF,$FF,$FF,$E0,$E0,$E0,$E0,$E0,$E0,$FF,$FF,$FF,$FF,$00,$00,$E0,$E0,$E0,$E0,$E0,$E0,$E0,$E0,$E0,$E0,$FF,$FF,$FF,$FF,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00], LCDDATA
        call pod
     next i
     PAUSE 5000
     
    cs1=1
    cs2=1
     CALL CLr
     x=0
     y=0
     call setx
     call sety
     LCDDATA=0   
     CS2=1
     cs1=0
      y=10
      x=1
     call setx
     call sety
     for i=0 to 63 
        Lookup i, [$00,$7E,$12,$1E,$00,$00,$7E,$4A,$4A,$4A,$00,$7E,$42,$42,$3C,$00,$60,$40,$7E,$00,$60,$1C,$12,$1C,$60,$00,$7E,$42,$7E,$00,$7E,$4A,$7E,$00,$5E,$52,$7E,$00], LCDDATA
        call pod
     next i
     
      y=26
      x=3
     call setx
     call sety
     
     for i=0 to 37 
        Lookup i, [$00,$3E,$40,$3C,$02,$3C,$40,$3E,$00,$00,$3E,$40,$3C,$02,$3C,$40,$3E,$00,$00,$3E,$40,$3C,$02,$3C,$40,$3E,0,64,0,$7E,$4A,$4A,$4A,$00,$7E,$40,$40,$00], LCDDATA
        call pod
     next i
     
     cs2=0
     cs1=1
    
     x=3
     call setx    
    for i=0 to 63 
        Lookup i, [$7E,$4A,$4A,$4A,$00,$7E,$10,$18,$24,$42,$02,$7E,$02,$02,$00,$7E,$0A,$1A,$6E,$00,$3C,$42,$42,$42,$3C,$00,$7E,$0C,$30,$7E,$00,$00,$7E,$00,$7E,$10,$18,$24,$42,$00,$60,$1C,$12,$1C,$60,$00,$40,$00,$7E,$48,$78,$00,$60,$1C,$12,$1C,$60,0], LCDDATA
        call pod
     next i
     cs2=1
     cs1=1
    pause 2000 
    for i=63 to 32 step -1
     LCDDATA=192+i
     call kom
     pause 400
    next i
    
    goto pocetak
    end
    
    
    Init:
     x=0
     y=0
     rw=0
     cs1=0
     cs2=0
     e=1
     LCDDATA=0
     rst=0
     pause 1
     rst=1
     cs1=1
     cs2=1
     
     call Dispon
     LCDDATA=192
     call kom
    return
    
    Pod:
        rs=1
        e=0
        pauseus 1
        e=1
    return
    Kom:
        rs=0
        e=0
        pauseus 1
        e=1
    return
    
    SetX:
        LCDDATA=184+x
        call Kom
    return
    
    SetY:
        LCDDATA=64+y
        call Kom
    return
    
    Clr:
     for x=0 to 7
      call setx
      y=0 
      call sety
     LCDDATA=0
     for i=0 to 63
      call pod
     next i
     next x
    return
    
    DispOff:
    LCDDATA=62
    call kom
    return
    
    DispOn:
    LCDDATA=63
    call kom
    return

    But then the problem was that every time I want to print something, I have to draw a picture of the entire display, or create the font, and for each letter copy 5 bytes. Then I found a forum for the LCD of Nokia 3310, and tried to correct for KS0108.
    I hope to be able to finish it, but now I am busy doing other things, so...

  18. #18
    Join Date
    Nov 2003
    Location
    Sao Paulo - Brazil
    Posts
    79

    Default Re: Graphic LCD support?

    Hi guys,

    I have been talking to our friend pedja089 about the lib in the first lib.

    I did some good improvements, and now, I can print strings and Variables correctly.

    I have already started writing some basic graphic routines, and I would like to publish it here as a contribution if our friend pedja089 agree with it, and I think he will.

    To test it I did a small simple digital clock, just to check if printing is working.

    The code compiles ok when I use a 18F4550 as a target controller. The hex's size is about 4500 bytes.

    But, when I change to the 16F877, (which has 8kb available) it always show me the following erros :

    Message[303] c:\teste_~1\glcd_p~1.asm 207 : Program word too large.Truncated to core size. (6573)
    Message[303] c:\teste_~1\glcd_p~1.asm 207 : Program word too large.Truncated to core size. (7420)
    Message[303] c:\teste_~1\glcd_p~1.asm 207 : Program word too large.Truncated to core size. (436C)
    Message[303] c:\teste_~1\glcd_p~1.asm 207 : Program word too large.Truncated to core size. (6F63)
    Message[303] c:\teste_~1\glcd_p~1.asm 207 : Program word too large.Truncated to core size. (6800)
    Message[303] c:\teste_~1\glcd_p~1.asm 207 : Program word too large.Truncated to core size. (7820)

    The line 207 in the Asm code is :

    data Str, 0

    from the macro :

    PrintStr macro x, y, Str
    local TheString, OverStr
    goto OverStr
    TheString
    data Str, 0
    OverStr
    MOVE?CB x, _GLCD_X
    MOVE?CB x, _GLCD_SX
    MOVE?CB y, _PosY
    MOVE?CW TheString, _GLCD_Addr
    L?CALL _GLCD_StringOut
    endm

    I admit that I am absolutely noob on writing/uderstanding assembler.

    Does some one have any ideao of what is wrong with this Macro.

    Is this restricted to 18F series ?

    Thank you !

    regards,

    Sérgio

  19. #19
    Join Date
    Sep 2004
    Location
    montreal, canada
    Posts
    6,896

    Default Re: Graphic LCD support?

    Yup 18F don't work the same way for embedded strings. You may want to have a look at least at the following.

    http://www.pbpgroup.com/modules/wfse...p?articleid=10

    Notice the use of da vs Data and how to retrieve them.

    You could also have a look at my NOKIA driver/wrapper.
    http://www.picbasic.co.uk/forum/show...?t=327&page=54
    Last edited by mister_e; - 11th May 2012 at 09:42.
    Steve

    It's not a bug, it's a random feature.
    There's no problem, only learning opportunities.

  20. #20
    Join Date
    Nov 2003
    Location
    Sao Paulo - Brazil
    Posts
    79

    Default Re: Graphic LCD support?

    Thank you Mister_e !


    I will spend some time this weekend trying to make the Lib better.

    I would like to make it work with 16F series (877 and above) and 18F and make it public.

    There are a lot of nice and cheap KS0108 for sale on eBay. I bought some from the seller Wide Hk and they are small and nice. Perfect for embeded solutions.

    Well, let´s study the posts and try to fix it !

    regards,

    Sérgio

  21. #21
    Join Date
    Jun 2005
    Location
    Up the bush, Western Plains, NSW Au
    Posts
    202

    Default Re: Graphic LCD support?

    I know there are heaps of different GLCD controller types around, but surely the gurus at MELabs could toss a coin and pick one that they consider to be the most popular (KS0108?) and do some GLCDOUT type stuff for that controller? After all, they did exactly that when they selected the Hitachi 447?? (whatever) controller they wrote the LCDOUT stuff for? That has proven quite usable?
    My 2 cents worth, but I won't hold my breath.
    Peter Moritz.
    Up the bush, Western Plains,
    New South Wales,
    Australia.

  22. #22
    Join Date
    Nov 2003
    Location
    Greece
    Posts
    2,262

    Default Re: Graphic LCD support?

    Or a couple of different libraries to cover a few flavors of GLCDs. Like other compilers do.

    Ioannis

  23. #23
    Join Date
    Oct 2005
    Location
    Sweden
    Posts
    2,367

    Default Re: Graphic LCD support?

    Sure, if they did it I wouldn't protest against it.
    But, as you say, there are plenty of graphic LCD controllers but basically only ONE standard for characters based displays and that IS the HD44780 (or compatibles). It's also a lot easier to drive than the graphical controllers, trust me I've tried with the RA6963C and the SSD1307. One issue is that the HD44780 basically just works and doesn't care about the number of characters per line etc, it doesn't care about the size (appart from number of lines) of the panel it's actually driving. But the graphical controllers are usually quite flexible when it comes to resolution of the panel and needs to be configured properly (not to mention timings, multiplex ratios etc etc.

    My experience with MeLabs is that what they do they do properly and to do a general purpose GLCD driver to their standars is a LOT of work.

    I wonder what they ARE working on at MELABS HQ nowadays, there's been no updates to compiler for 18 months. Darrels recent and unfortunate passing must have put a real dent in available resources

    /Henrik.

Similar Threads

  1. Is this code not initialising the LCD properly?
    By Platypus in forum mel PIC BASIC Pro
    Replies: 8
    Last Post: - 30th January 2010, 19:14
  2. 16f688 LCD what have I done wrong
    By spitfiredriver in forum mel PIC BASIC Pro
    Replies: 6
    Last Post: - 8th August 2009, 19:54
  3. Play with LCD on PICDEM
    By The IceMan in forum mel PIC BASIC
    Replies: 5
    Last Post: - 22nd August 2008, 16:56
  4. Need help with LCD number display.
    By Steve Matson in forum mel PIC BASIC
    Replies: 8
    Last Post: - 26th June 2007, 23:07
  5. LCD will not start
    By btaylor in forum mel PIC BASIC Pro
    Replies: 49
    Last Post: - 24th May 2007, 02:30

Members who have read this thread : 40

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts