Any idea's on porting this to PBP?


Closed Thread
Results 1 to 21 of 21

Hybrid View

  1. #1
    Join Date
    Sep 2006
    Location
    Indiana, USA
    Posts
    72

    Default Any idea's on porting this to PBP?

    I copied this from scott edwards, all the code is his, i just modified it a little to try it out with PBP, all i get is a blank LCD. my version gets rid of the nibble variable, which is where i think it might go wrong, if someone could get this to work it would benifit everyone im sure. im using a 4X20 LCD, i've used a different aproach to large letters that worked fine but ate up most of my 16F648A's resorces (for a compass heading display).

    ALL PROPS TO SCOTT EDWARDS AND SEETRON!!!
    Code:
    CMCON = 7                              ' Turn off un-needed PIC hardware
    VRCON = 0                              '   ''             ''
    CCP1CON = 0                            '   ''             ''
    INTCON = %00000000                     '   ''             ''
    
    I       con  $FE    ' Instruction prefix.
    ClrLCD  con  1      ' Clear-LCD instruction.
    
    cgRAM   con  $40    ' Address 0 of CG RAM.
    EEptr   var  word   ' Pointer into EEPROM.
    pat     var  EEptr  ' Alias for EEptr.
    dispVal var  word   ' Value to be displayed as big digits.
    temp    var  byte   ' Temporary byte variable.
    decade  var  word
    nbl     var  byte    ' Index into number-pattern tables. changed.was a NIBBLE  
    digit   var  byte    ' Current digit to display
    line    var  byte    ' LCD line
    
    ' ====This section may be omitted with newer (post July 96)
    ' ====4x20 Serial LCD modules. Cut from here...============== >>>
    
    bitPat0 DATA  0,0,0,1,3,7,15,31  ' Left-right up-ramp shap
    bitPat1 DATA  0,0,0,16,24,28,30,31  ' Right-left "       "
    bitPat2 DATA  31,15,7,3,1,0,0,0  ' Left-right down ramp.
    bitPat3 DATA  31,30,28,24,16,0,0,0  ' Right-left "    "
    bitPat4 DATA  0,0,0,0,31,31,31,31  ' Lower block.
    bitPat5 DATA  31,31,31,31,0,0,0,0  ' Upper block.
    bitPat6 DATA  31,31,31,31,31,31,31,31  ' Full block.
    bitPat7 DATA  0,0,0,0,0,0,0,0  ' Full blank
    
    ' <<<...to here. ===============================================
    
    low 0  ' Make the serial output low
    pause 1000  ' Let the LCD wake up.
    
    ' ====This section may be omitted with newer (post July 96)
    ' ====4x20 Serial LCD modules. Cut from here...============= >>>
    
    LCDOUT I,cgRAM  ' Enter CG RAM.
    for EEptr = 0 to 63  ' Write the bit patterns
      Read EEptr,temp  '   to the LCD.
    LCDout temp
    next
    
    ' <<<...to here. ===============================================
    LCDOUT I,ClrLCD  ' Clear the LCD.
    pause 1
    
    ' ========================================================================
    '       Demo Loop: Show dispVal in Big Numerals, Increment, Loop
    ' ========================================================================
    
    again:
      gosub bigLCD
      dispVal = dispVal + 1
      pause 500
    goto again:
    
    ' ========================================================================
    '                 Subroutine Displaying Large Numbers
    ' ========================================================================
    
    bigLCD:
    for line = 0 to 3
    decade = 1000
      lookup line,[$80,$C0,$94,$D4],temp
      LCDOUT I,temp
      for digit = 3 to 0
        nbl = dispVal dig digit
        gosub getPattern:
        if dispVal = 0 and digit = 0 then skip0:
        if dispVal < decade then blankIt:
    skip0:
        LCDOUT pat.bIT15,pat.bit14,pat.bit13,pat.bit12,pat.bit11,pat.bit10,pat.bit9,pat.bit8,pat.bit7,pat.bit6,pat.bit5,pat.bit4,pat.bit3,pat.bit2,pat.bit1,pat.bit0 ' was NIBS!
        goto cont:
    blankIt:
       LCDOUT "    "
    cont:
        if digit = 0 then skip1:
        LCDOUT 32
    skip1:
      decade = decade/10
      next
    next
    return
    
    ' ========================================================================
    '               Subroutines Defining Big-Character Patterns
    ' ========================================================================
    getPattern:
    branch line,[first,second,third,fourth]
    '             0     1     2     3     4     5     6     7     8     9
    '            ---   ---   ---   ---   ---   ---   ---   ---   ---   ---
    first:
    lookup nbl,[$0551,$7067,$0551,$0551,$6776,$6555,$0557,$2556,$0551,$0551],pat
    return
    second:
    lookup nbl,[$6776,$7767,$7743,$7743,$6776,$2441,$6041,$7703,$2443,$6776],pat
    return
    third:
    lookup nbl,[$6776,$7767,$0577,$7751,$2556,$7776,$6776,$7767,$0551,$2536],pat
    return
    fourth:
    lookup nbl,[$2443,$7464,$6444,$2443,$7776,$2443,$2443,$7767,$2443,$7443],pat
    return
    Last edited by ScaleRobotics; - 19th July 2010 at 05:18.

  2. #2
    Join Date
    Jul 2005
    Posts
    78


    Did you find this post helpful? Yes | No

    Default

    I don't see any "DEFINE LCD" entries to tell PBP where you wired the LCD. Unless you wire to the default lines you'll get a blank just that: a blank display.

    Check pg 95 of the manual under LCDOUT.

  3. #3
    Join Date
    Sep 2006
    Location
    Indiana, USA
    Posts
    72


    Did you find this post helpful? Yes | No

    Default

    It is wired default........... and it works fine with simple LCDOUT "hello"
    or the following (NNW) in large 4 line tall font.. just need help getting my first question answered, how to port the code, that was written for BS2 to PBP?
    i couldnt use nibble (WHY IS THERE NO NIBBLE IN PBP?), forcing me to break
    pat into 16 bits rather than 4 nibbles (pat.nib3,pat.nib2,pat.nib1,pat.nib0)

    THIS WORKS FINE, LCD IS WIRED IN DEFAULT.
    sub1:
    LCDOUT CMD, LcdCls ' Clear the LCD
    PAUSE 1

    LCDOUT CMD, LcdLine1 + 3, 6,1,7,6,7,6,1,7,6,7,6,7,7,6
    LCDOUT CMD, LcdLine2 + 3, 6,2,1,6,7,6,2,1,6,7,6,7,7,6
    LCDOUT CMD, LcdLine3 + 3, 6,7,2,6,7,6,7,2,6,7,6,0,1,6
    LCDOUT CMD, LcdLine4 + 3, 6,7,7,6,7,6,7,7,6,7,6,3,2,6

    RETURN

  4. #4
    Join Date
    Sep 2004
    Location
    montreal, canada
    Posts
    6,898


    Did you find this post helpful? Yes | No

    Default

    If i understand your 'nibble' stuff...
    Code:
    WordA    Var Word
    Nibble1  Var Byte
    Nibble2  Var Byte
    Nibble3  Var Byte
    Nibble4  Var Byte
    
    WordA=$1234
    Nibble1=WordA.Highbyte>>4
    Nibble2=WordA.Highbyte&$0F
    Nibble3=WordA.LowByte>>4
    Nibble4=WordA.Lowbyte&$0F
    Steve

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

  5. #5
    Join Date
    Sep 2006
    Location
    Indiana, USA
    Posts
    72


    Did you find this post helpful? Yes | No

    Default My fault

    Sorry i didnt explain that the code was originally written for a basic stamp,
    hence the nibble sized variable in question. the code is for displaying large charaters on a 4x20 serial LCD or serial backpack equiped LCD. the code writes custom characters to the LCD, then arranges them to make the large 4 line tall numbers (0-9). all this was spit out serially to the LCD. I changed all the serouts in the origonal code to LCDOUT in proper PBP form, but since PBP doesnt have a nibble sized variable, only bytes and words, the WORD sized variable "pat" can't be broken into 4 NIB's (i.e pat.NIB0) like it will let you in pBasic. it can only do two bytes or 16 bits.. i think that is the reason my version of the code (from my first post) isnt working. all i get is a blank LCD.. it would be nice to use this code to display large numbers because it only takes up about 600 WORDs, i've done a version that displays the 16 compass points (NNW) in large text using the first part of this code to write the custom bit patterns to my LCD's CGRAM, but it takes up 3397 WORDs using BRANCH to a subroutine for each compass point which is spelled out in my second reply, anyway, the original code is at:

    http://www.seetron.com/pdf/lcd_an1.pdf

    and as you can see it is written for pBASIC and meant for serial LCD's, i want to convert it to PBP for a parallel LCD..

  6. #6
    Join Date
    Jul 2003
    Location
    Colorado Springs
    Posts
    4,959


    Did you find this post helpful? Yes | No

    Default

    Hey Ryan,

    mister_e's concept is correct, you just need to put it into the LCDOUT statement.

    LCDOUT Nibble1, Nibble2, Nibble3, Nibble4

    or you can just put it all in there in one shot...

    LCDOUT pat.Highbyte>>4, pat.Highbyte&$0F, pat.LowByte>>4, pat.Lowbyte&$0F
    <br>
    DT

Similar Threads

  1. PBP Book
    By Bruce in forum Off Topic
    Replies: 83
    Last Post: - 4th October 2021, 12:55
  2. Generating Timed Fades in PBP - ideas ?
    By bcd in forum mel PIC BASIC Pro
    Replies: 2
    Last Post: - 10th August 2008, 00:18
  3. Compiler differences between PBP 2.33 & 2.46
    By nikopolis in forum mel PIC BASIC Pro
    Replies: 3
    Last Post: - 2nd May 2006, 19:01
  4. Newby- PBP wont compile for 18F (MPLAB)
    By jd76duke in forum mel PIC BASIC Pro
    Replies: 1
    Last Post: - 17th December 2005, 23:30
  5. PBP / XP Crash
    By pondindustrial in forum mel PIC BASIC Pro
    Replies: 1
    Last Post: - 27th November 2005, 03:16

Members who have read this thread : 1

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