LCD BARgraphs - Page 4


Closed Thread
Page 4 of 6 FirstFirst 123456 LastLast
Results 121 to 160 of 233

Thread: LCD BARgraphs

  1. #121


    Did you find this post helpful? Yes | No

    Default

    Hi mister_e,

    you are right...but...

    i tryed to comment the lines :

    'DEFINE ADC_BITS 8 ' Number of bits in ADCIN result
    'ADCON1.7 = 1 ' Right Justify AD result

    and

    'adcin 2,value

    and still the same errors

    .

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


    Did you find this post helpful? Yes | No

    Default

    mm, i don't remind to already have this problem... token and line # mmmm

    which compiler and which version are you using?
    Steve

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

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


    Did you find this post helpful? Yes | No

    Default

    Yup, it's probably the version.

    In Post #110 there is an image from Marin that also has the same "Bad Token" errors.

    Attachment 1922

    The problem was PBP version 2.30 (it's just too old)

    HeHe: Beat him by a minute
    <br>
    Last edited by Darrel Taylor; - 8th November 2007 at 04:07. Reason: mister_e
    DT

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


    Did you find this post helpful? Yes | No

    Default

    @ post 110, i think i found 1 solution... or at least some tips... configuration fuse does not seems to be the one for an 16F877 anyways, and the comment should use ; instead of '

    for this one... i don't know .. still thinking of the version !
    Steve

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

  5. #125


    Did you find this post helpful? Yes | No

    Default

    yeah...i guess it's the version as my version is old as well.

    thanks anyway

    .

  6. #126
    Join Date
    Oct 2005
    Posts
    34


    Did you find this post helpful? Yes | No

    Default Bar Graph

    This is my version of the bar graph.
    Code:
    '****************************************************************
    '*  Name    : Bargraph.BAS                                      *
    '*  Author  : Chris Bezuidenhout                                *
    '*  Notice  : Copyright (c) 2005 Micro Developments             *
    '*          : All Rights Reserved                               *
    '*  Date    : 2005/07/19                                        *
    '*  Version : 1.0                                               *
    '*  URL     : http://www.patenttrade.net                        *
    '*  E-mail  : [email protected]                             *
    '*  Mobile  : +27-72-795-0107                                   *
    '*  Notes   : This is a bargraph demo for a 2X20 LCD Display    *
    '*          : it is free to use and distribute by any one       *
    '*          : as long as this Copyright note is not altered or  *
    '*          : removed, can be used as an analog meter.          *
    '*  Device  : PIC16F877 can be altered to work on other devices *
    '****************************************************************
    	INCLUDE "Modedefs.Bas"
    
    DEFINE 	OSC 4		' Set Xtal Frequency 		
    DEFINE LCD_DREG PORTA     ' Set LCD Data port
    DEFINE LCD_DBIT 0         ' Set starting Data BIT (0 OR 4) IF 4-BIT bus
    DEFINE LCD_RSREG PORTA    ' Set LCD Register Select port               
    DEFINE LCD_RSBIT 4        ' Set LCD Register Select BIT                
    DEFINE LCD_EREG PORTE     ' Set LCD Enable port, for other devices, use PORT A or B                           
    DEFINE LCD_EBIT 0         ' Set LCD Enable BIT                         
    DEFINE LCD_BITS 4         ' Set LCD bus side (4 OR 8 bits)             
    DEFINE LCD_LINES 2        ' Set number of lines ON LCD
    
    ' md Declare the Variables md
    
    	counter		VAR		BYTE
    	Text		VAR		BYTE[20]
    	X			VAR		BYTE
    	Y			VAR		BYTE
    PAUSE 500
    Main:	
    '*********Modefy first 5 characters in LCD character generator to display bargraph**********
    		LCDOut $fe,%1000000           'SET CG RAM ADD.
    		FOR X =1 TO 8                 
    		LCDOUT %10000
    		next x
    		FOR X=1 TO 8
    		LCDOUT %11000
    		NEXT X
    		FOR X=1 TO 8
    		LCDOUT %11100
    		NEXT X
    		FOR X=1 TO 8
    		LCDOUT %11110
    		NEXT X
    		FOR X=1 TO 8
    		LCDOUT %11111
    		NEXT X
    		LCDOut $fe,%10000000             'SET DD RAM ADD.
    '		FOR X = 0 TO 255
    '		LCDOUT $FE,1,#X,X
    '		PAUSE 100
    '		NEXT X
    LOOP1:		LCDOUT $FE,1,"This is a test"
    		
    		LCDOUT $FE,$C0          'clear second line and display bar graph
    		LCDOUT 0                'print first character
    		for X= 0 TO 19	        'change 19 to 15 for 16 character display
    		PAUSE 100
    		LCDOUT $FE,$10,1        'move curser back and overprint previous character
    		PAUSE 100
    		LCDOUT $FE,$10,2        'move curser back and overprint previous character
    		PAUSE 100
    		LCDOUT $FE,$10,3        'move curser back and overprint previous character
    		PAUSE 100
    		LCDOUT $FE,$10,4        'move curser back and overprint previous character
    		PAUSE 100
    		LCDOUT $FE,$14          'print next character
    		LCDOUT $FE,0
    		NEXT X
    
     		
     		GOTO LOOP1
    		
     END
    Last edited by ChrisMicro; - 9th January 2008 at 17:26.
    You can't teach an old dog new tricks, but I'm always willing to try.

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


    Did you find this post helpful? Yes | No

    Default

    Chris,

    The Note says "can be used as an analog meter".

    How would you do that?
    <br>
    DT

  8. #128
    Join Date
    Sep 2007
    Location
    USA, CA
    Posts
    271


    Did you find this post helpful? Yes | No

    Default

    It's a slight variation of Les Johnson's bargraph routine, which is in his PBP book. You load the "graphics" of the bar graph into lcd memory, then print solid bars (or blocks) until the final one which is printed as the mod of 3. The above bar graphs use a resolution of five, which has the disadvantage of a space between each five. Les' uses three, because it makes the space between the characters an unnoticed and integral part of the graph. If you don't have Les' book, then look for one of the Proton samples, because they ship with it.

  9. #129
    Join Date
    Oct 2005
    Posts
    34


    Did you find this post helpful? Yes | No

    Default Analog meter

    Quote Originally Posted by Darrel Taylor View Post
    Chris,

    The Note says "can be used as an analog meter".

    How would you do that?
    <br>
    You have to use a chip with AD channels like the 16F818/819 then say for 1 volt you send your 5th character and for 1.4 volt you will send the 5th and the second character for 2.2 volt you will send the 5th character twice and then your first character so your 5th character is your integer and the first four is your decimals after the point, it give you a .2 resolution .2, .4, .6, .8
    Last edited by ChrisMicro; - 22nd January 2008 at 12:35.
    You can't teach an old dog new tricks, but I'm always willing to try.

  10. #130
    Join Date
    Oct 2005
    Posts
    34


    Did you find this post helpful? Yes | No

    Default Sprites

    You can even draw little 5X7 sprites, like a walking man or any 5X7 picture. I have a small basic compiler with some handy tools, where you can create the picture and get the data for your picture. there is also a seven segment tool, it is free to download from my site, but you can only use the compiler with the programmer from Mikro Elektronika, but the tools is handy. look in the right border for free downloads it is the first item
    Last edited by ChrisMicro; - 22nd January 2008 at 13:02. Reason: spel
    You can't teach an old dog new tricks, but I'm always willing to try.

  11. #131
    Join Date
    Jan 2007
    Location
    Houston, TX
    Posts
    96


    Did you find this post helpful? Yes | No

    Wink Nice Work

    DT,
    Really nice work! I will be using this on several of my A2D projects!!
    Padawan-78

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


    Did you find this post helpful? Yes | No

    Smile Thanks Tyson!

    Hope they work out for you.

    You might also want to check out this one ...

    Bargraph query thread
    http://www.pbpgroup.com/modules/newb..._id=37&forum=2
    <br>
    DT

  13. #133
    Join Date
    Mar 2008
    Posts
    13


    Did you find this post helpful? Yes | No

    Default

    Hello !
    First of all , thanks for the LCD codes.
    I applied the code below , it works fine ; but at the first row ; " Value= XXX " always flickering ; like something is writing over the " Value = XXXX " and it's always flickering.
    What is the problem ?
    Code:
    @ DEVICE pic16F877 
    @ DEVICE pic16F877, WDT_on 
    @ DEVICE pic16F877, PWRT_ON 
    @ DEVICE pic16F877, PROTECT_OFF 
    @ DEVICE pic16F877, HS_OSC 
    
    TRISA=%00000001
    TRISB=0 
    TRISE=0 
    INCLUDE "LCDbar_INC.bas" 
    
    ham var word 
    
    
    DEFINE LCD_DREG PORTB 
    DEFINE LCD_DBIT 0 
    DEFINE LCD_RSREG PORTE 
    DEFINE LCD_RSBIT 1 
    DEFINE LCD_EREG PORTE 
    DEFINE LCD_EBIT 0 
    DEFINE LCD_RWREG PORTE 
    DEFINE LCD_RWBIT 2 
    DEFINE LCD_BITS 8 
    DEFINE LCD_LINES 2 
    DEFINE LCD_COMMANDUS 1000 
    DEFINE LCD_DATAUS 225 
    DEFINE ADC_BITS 10 
    DEFINE ADC_CLOCK 2 
    DEFINE ADC_SAMPLEUS 100 
    
    ADCON1=%10001110 
    LOW PORTE.2 
    
    LCDOUT $FE,1 
    PAUSE 200 
    
    Loop1:
        ADCIN  0, ham
        ham=1023-ham
        LCDOUT $FE,2,"Value = ",DEC ham,"   "
        ; syntax- BARgraph   Value, Row, Col, Width, Range, Style
        @         BARgraph  _ham,   2,   0,    16,   1023,  lines
        PAUSE 50
    Goto Loop1
    
    END

  14. #134
    skimask's Avatar
    skimask Guest


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by karamastik View Post
    " Value= XXX " always flickering ; like something is writing over the " Value = XXXX " and it's always flickering.
    Code:
    Loop1:
        ADCIN  0, ham
        ham=1023-ham
        LCDOUT $FE,2,"Value = ",DEC ham,"   "
        ; syntax- BARgraph   Value, Row, Col, Width, Range, Style
        @         BARgraph  _ham,   2,   0,    16,   1023,  lines
        PAUSE 50
    Goto Loop1
    That's because something is always overwriting Value = XXXX. VALUE = XXXX is always overwriting VALUE = XXXX.
    Try ONLY overwriting just the value not the whole string.

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


    Did you find this post helpful? Yes | No

    Default

    Pause 50 is a bit low, try to increase it a little bit more.
    Steve

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

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


    Did you find this post helpful? Yes | No

    Default

    karamastik,

    LCD_COMMANDUS 1000 seems a little low.

    On most displays, the Home command ($FE,2) takes 1.6ms or 1600us.
    Try increasing it to 2000, some displays need even more than that.

    LCD_DATAUS 225 is pretty High. Should be around 50.
    If this one is too high, it won't cause a problem. It'll just slow things down unnecessarily.
    <br>
    DT

  17. #137
    Join Date
    Mar 2008
    Posts
    79


    Did you find this post helpful? Yes | No

    Default

    Can I pick someone's brain please?
    I'm at the moment trying to make an auto switchover gadget to change from running on Diesel to Veg Oil once certain temperatures have been reached, and to try and work this out I'm using the easypic5 development board.
    So far: I have a 16f877A programmed so it will switch certain outputs when certain inputs go high all and well
    It even displays what it's doing on the LCD display

    What I'd like to incorporate if its possible is this? or a variation of it the Bargraph but use it as a fuel level sensor, i.e. changing position depending on the level of the fuel in the tank (variable resistor)

    Does anyone know any code that will do that or give me a starting place to play with?
    I know I've got 2 A/D converter inputs on the developement board I can play with that have a 10K pot connected and are configured so I can change the input on either of the RA0, RA1, RA2, RA3, RA4, or RA5 pins and measure the voltage on them ( unfortunatly I'm only just learning about Pic's at the moment and know nothing about A/D and how to use it, I am learning by trying and experimenting But I am a quick learner), so IF anyone has any code they could share with me to show me how to get started with this I'd be grateful Thanks

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


    Did you find this post helpful? Yes | No

    Default

    well, once you have the lcd working.. it's just a matter to have few IF-THEN conditions with your ADC value and few HIGH/LOW lines, and you should be in business... maybe i've misundertood something?
    Steve

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

  19. #139
    Join Date
    Nov 2003
    Location
    Wellton, U.S.A.
    Posts
    5,924


    Did you find this post helpful? Yes | No

    Default

    Does anyone know any code that will do that or give me a starting place to play with?
    I like this one. http://www.rentron.com/PICX2.htm

    It is a little more complicated than ADCIN, but it is still the method I use.
    Follow the code with the data sheet and it should become clear how the ADC works. Complete control.
    Dave
    Always wear safety glasses while programming.

  20. #140
    Join Date
    Mar 2008
    Posts
    79


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by mister_e View Post
    well, once you have the lcd working.. it's just a matter to have few IF-THEN conditions with your ADC value and few HIGH/LOW lines, and you should be in business... maybe i've misundertood something?
    Your forgetting im a Pseudo Blonde
    I've no idea how to start off with ADC values or how to use them (at the moment) I've found the easiest way to learn something is by following examples that show you how to get started and then playing from there thats how I got the LCD working in the first place, and then the bargraph, then inputs and outputs... learning.. slowly!

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


    Did you find this post helpful? Yes | No

    Default

    No i didn't forget

    let's see first example in this thread
    Code:
    ; Initialize your hardware and LCD first.
    
    DEFINE ADC_BITS 8               ' Number of bits in ADCIN result
    ADCON1.7 = 1                    ' Right Justify AD result
    
    INCLUDE "LCDbar_INC.bas"        ' Include the BARgraph routines
    
    Value  VAR  WORD                ' Must be a WORD even though AD is 8bit
    
    LCDOUT $FE, 1  ' Clear Screen
    
    Loop1:
        ADCIN  0, Value
        LCDOUT $FE,2,"Value = ",DEC Value,"   "
        ; syntax- BARgraph   Value, Row, Col, Width, Range, Style
        @         BARgraph  _Value,   2,   0,    16,   255,  lines
    GOTO Loop1
    You just need to monitor Value variable with some IF-THEN statements after ADCIN line

    Code:
    IF Value>200 then 
            LCDOUT $FE,2,"VALUE>200       "
            endif
    Steve

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

  22. #142
    Join Date
    Mar 2008
    Posts
    79


    Did you find this post helpful? Yes | No

    Default

    Thanks
    I think I'm starting to get parts of it I'll try tomorrow properly when my head isn't so tired
    however i do have one question, how do you tell the pic what port the input is on?
    ie if the pot was connected to portA.0 how would you tell the pic to measure and display the value of that port?
    Hope I've said that clearly enough, sometimes I'm better about thinking about things than trying to explain what I mean

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


    Did you find this post helpful? Yes | No

    Default

    ADCIN 0, Value

    check the datasheet, PORTA.0 is AN0
    Steve

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

  24. #144
    Join Date
    Apr 2008
    Posts
    7


    Did you find this post helpful? Yes | No

    Default really appreciate the writter

    I will use it to cell voltage indicator project

  25. #145
    Join Date
    Oct 2005
    Posts
    34


    Did you find this post helpful? Yes | No

    Default AD routine

    Quote Originally Posted by karenhornby View Post
    Can I pick someone's brain please?
    I'm at the moment trying to make an auto switchover gadget to change from running on Diesel to Veg Oil once certain temperatures have been reached, and to try and work this out I'm using the easypic5 development board.
    So far: I have a 16f877A programmed so it will switch certain outputs when certain inputs go high all and well
    It even displays what it's doing on the LCD display

    What I'd like to incorporate if its possible is this? or a variation of it the Bargraph but use it as a fuel level sensor, i.e. changing position depending on the level of the fuel in the tank (variable resistor)

    Does anyone know any code that will do that or give me a starting place to play with?
    I know I've got 2 A/D converter inputs on the developement board I can play with that have a 10K pot connected and are configured so I can change the input on either of the RA0, RA1, RA2, RA3, RA4, or RA5 pins and measure the voltage on them ( unfortunatly I'm only just learning about Pic's at the moment and know nothing about A/D and how to use it, I am learning by trying and experimenting But I am a quick learner), so IF anyone has any code they could share with me to show me how to get started with this I'd be grateful Thanks
    Here is my code for monitoring the sensors in a car. Note: this method is more accurate than ADCIN
    Code:
    '****************************************************************
    '*  Name    : CarMonitor.PBP                                     *
    '*  Author  : Chris Bezuidenhout                                *
    '*  Notice  : Copyright (c) 2007 Micro Developments             *
    '*          : All Rights Reserved                               *
    '*  Date    : 2007/10/23                                        *
    '*  Version : 1.1.1                                             *
    '*  URL      :http://www.patenttrade.net                             *
    '*          :                                                   *
    '****************************************************************
    INCLUDE "Modedefs.Bas"
    
           OSCCON = %01100000                  'set the intrc osc change bit 4 to logic  1 for 8 MHz
           OSCTUNE = %000000
           
    DEFINE 	OSC		4     ' Set IRC Frequency
    DEFINE ADC_BITS 10       ' Set number of bits in result
    DEFINE ADC_CLOCK 1    ' Set clock source (rc = 3)
    DEFINE ADC_SAMPLEUS 50 ' Set sampling time in microseconds
              
    IgnIn    var     word
    Altin    var     word
    Oilin    var     word
    TempIn   var     word
    ResIn    var     word               'Reserve input
    IgnOut   var     portb.0
    AltOut   var     portb.1
    OilOut   var     portb.2
    TempOut  var     portb.3
    Buzzer   var     portb.4
    ComO     var     portb.5
    SigOut   var     portb.6
    sp2      var     portb.7
    Spin1    var     porta.6
    Spin2    var     porta.7
    X        var     byte
    Y        var     byte
    
    
    TRISA = %11111111          'Porta 0-4 all analog 5 input only pull high
    TRISB = %00000000
    ADCON0 = %11000001
    Pause 2000 ' Wait .5 second 
    ADCON1 = %10000010 ' Set PORTA analog and RIGHT justify result
    
    
    
    OPTION_REG = $7f        ' Enable PORTB pullups
    
    pause 500
    portb = 0
    low Buzzer
         
           
           
    Main:       
           gosub CIgn
           gosub CAlt
           gosub COil
           gosub CTemp
           gosub Send
           
           
    Ignition:
           if ignin = 0 then 
           high Ignout
           gosub Send
           goto main
           endif
           if ignin > 300 then 
           low ignout
           goto Alternator
           endif
    '       if ignin > 0 and ignin < 300 then
           for y = 1 to 3
           gosub CIgn
           gosub Send
           if ignin > 300 then  Alternator
           
           for x = 1 to 2
           high Ignout
           high buzzer
           pause 200
           low buzzer
           pause 200
           next x
           pause 1000
           next y    
           
    '       endif
    Alternator:
               if ignin = 0 then goto main
           low ignout       
           if Altin > 1020 then 
           high altout  '?????????Kalibreer
           for y = 1 to 3
           gosub CAlt
           gosub Send
           if altin < 1020 then Oil
           for x = 1 to 4
           high buzzer
           pause 200
           low buzzer 
           pause 200
           next x
           pause 1000
           next y
           endif
            
    Oil:   
           if ignin = 0 then goto main
           low altout           
           if Oilin > 10 then    'This variable have to be calibrated to sensor unit
           high Oilout           'for a plain on/of it must be set to 0, the pot at minimum 
           for y = 1 to 3        'if there is some contact resistance it can be calibrated acordingly
           gosub COil            'For a analog (resistive) sensor it have to be calibrated to 
           gosub Send            'the sensor
           if oilin < 10 then Temperature    'So is this one
           for x = 1 to 6
           high buzzer
           pause 200
           low buzzer
           pause 200      
           next x
           pause 1000
           next y
           endif
           
    Temperature:
                if ignin = 0 then goto main
           low Oilout
           if tempin < 85 then 
           high tempout
           for y = 1 to 3
           gosub CTemp
           gosub Send
           if tempin > 85 then main
           for x = 1 to 8
           high buzzer
           pause 200
           low buzzer
           pause 200 
           next x
           pause 1000  
           next y
           endif
           low tempout
       goto main         
    CIgn:
           ADCON0 = %11000101             'start ADC  A0
           gosub notdone
           IgnIn.highbyte = ADRESH
           IgnIn.Lowbyte = ADRESL
           write 0,ignin.highbyte
           write 1,ignin.lowbyte
           return
    CAlt:       
           ADCON0 = %11001101             'start ADC A1
           gosub notdone
           altin.highbyte = ADRESH
           altin.Lowbyte = ADRESL
           write 2,Altin.highbyte
           write 3,Altin.lowbyte
           return
    COil:       
           ADCON0 = %11010101             'start ADC A2
           gosub notdone
           oilin.highbyte = ADRESH
           oilin.Lowbyte = ADRESL
           write 4,oilin.highbyte
           write 5,oilin.lowbyte
           return
    CTemp:       
           ADCON0 = %11011101             'start ADC A3
           gosub notdone
           TempIn.highbyte = ADRESH
           TempIn.Lowbyte = ADRESL
           write 6,tempin.highbyte
           write 7,tempin.lowbyte
           return
    CRes:       
           ADCON0 = %11100101             'start ADC A4
           gosub notdone
           resin.highbyte = ADRESH
           resin.Lowbyte = ADRESL
           Return        
    Send:
           serout SigOut, N2400,["A",IgnIn.highbyte,IgnIn.lowbyte,altin.highbyte,altin.lowbyte,Oilin.highbyte,Oilin.lowbyte,Tempin.highbyte,Tempin.lowbyte,resin.highbyte,resin.lowbyte]
           return
    notdone: Pause 5 
           If ADCON0.2 = 1 Then notdone' Wait for low on bit-2 of ADCON0, conversion finished 
           return
    end
    Last edited by ChrisMicro; - 4th July 2008 at 05:16.
    You can't teach an old dog new tricks, but I'm always willing to try.

  26. #146
    Join Date
    Jul 2008
    Location
    TURKIYE-KONYA
    Posts
    51


    Did you find this post helpful? Yes | No

    Default Pbpl Bargraph

    hi darrel...

    i m using pbp 2.50b compiler and using pbpl.

    how can i use your include file with pbpl?

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


    Did you find this post helpful? Yes | No

    Default Pbpl

    For each DIV32, change it to a normal divide ...

    Was: Limit1 = DIV32 10

    &nbsp; To:&nbsp; Limit1 = Limit1 / 10

    or you can combine them with the previous statements

    Limit1 = (BAR_range * 3) / 10

    for all the occurances.

    And change the WORD vars to LONG.
    <br>
    DT

  28. #148


    Did you find this post helpful? Yes | No

    Default LCD bargraph

    hi friends
    I am a new member I can little speak english maybe my errors I am sorry
    My problem is LCD bargraph How I can on pictures project. on pictures LCD 2x16 char , LCD has 32 bars per char has two bars project has two buttons minus and plus I need this projects pic basic code Can you help me. Already tahnks
    Attached Images Attached Images    
    Last edited by tekniker_erhan; - 7th September 2008 at 16:22.

  29. #149
    Join Date
    Jul 2008
    Location
    TURKIYE-KONYA
    Posts
    51


    Did you find this post helpful? Yes | No

    Default lcdbargraph PBPL

    I TRIED YOUR INCLUDE FILE FOR PBPL AND MADE WHAT U SAID.

    IT'S WORKING GOOD THANKS.

    Code:
    '****************************************************************
    '*   Creates a variable sized BAR-graph anywhere on the screen  *
    '****************************************************************
    '*  Name    : LCDbar_INC.bas                                    *
    '*  Author  : Darrel Taylor                                     *
    '*  Notice  : Copyright (c) 2005                                *
    '*  Date    : 9/8/2005                                          *
    '*  Version : 1.0                                               *
    '*  Notes   : Maximum Range is 32768                            *
    '*          : Range must always be a Constant                   *
    '*          : Value must always be a WORD variable              *
    '*          :                                                   *
    '****************************************************************
                                                   ;                        default
    BAR_width   VAR  BYTE : BAR_width = 16         ; Width of the BARgraph      16
    BAR_range   VAR  LONG : BAR_range = 100        ; Range of Values (0-100)   100   ;;;;;;;;;;;
    BAR_row     VAR  BYTE : BAR_row = 1            ; Row location (1-4)          1
    BAR_col     VAR  BYTE : BAR_col = 0            ; Column location (0-15)      0
    BAR_value   VAR  LONG : BAR_value = 0          ; Current BAR value           0   ;;;;;;;;;;;
    BAR_style   VAR  BYTE : BAR_style = 1          ; 1=lines, 2=boxed, 3=blocks  1
    
    ; --- Temporary vars ----
    BARtemp     VAR  LONG   ;;;;;;;;
    Remainder   VAR  LONG   ;;;;;;;;
    BARloop     VAR  BYTE
    LastCharset VAR  BYTE : LastCharset = 0
    Limit1      VAR  LONG   ;;;;;;;;
    
    GOTO overBAR                                   ; Skip over Subroutines
    
    ThreeBARS CON 0                                ; Identify the Custom Characters
    TwoBARS   CON 1
    OneBAR    CON 2
    
    ASM
    lines  = 0x10000001                            ; Define the Styles
    boxed  = 0x10000002
    blocks = 0x10000003
    ENDASM
    
    ; --- lines Style custom chars ----
    CharsetLines:
        LCDOut $FE,$40,REP $15\8                  ; Custom char 0 - 3 lines  |||
        LCDOut $FE,$48,REP $14\8                  ; Custom char 1 - 2 lines  ||
        LCDOut $FE,$50,REP $10\8                  ; Custom char 2 - 1 line   |
    RETURN
    
    ; --- boxed Style custom chars ----
    CharsetBoxed:
        LCDOut $FE,$40,$1F,REP $15\6,$1F          ; III
        LCDOut $FE,$48,$1C,REP $14\6,$1C          ; II
        LCDOut $FE,$50,REP $10\8                  ; I
    RETURN
    
    ; --- blocks Style custom chars ----
    CharsetBlocks:
        LCDOut $FE,$40,REP $1F\8
        LCDOut $FE,$48,REP $1C\8
        LCDOut $FE,$50,REP $10\8
    RETURN
    
    ; ----- Show the BAR graph -----------------------------------------------------
    ShowBAR:
        IF BAR_width = 0 then BARdone
        if LastCharset <> BAR_style then          ; If the Style has changed ?
            LastCharset = BAR_style
            SELECT CASE BAR_style                 ; Load the new custom chars
                CASE 1 : GOSUB CharsetLines
                CASE 2 : GOSUB CharsetBoxed
                CASE 3 : GOSUB CharsetBlocks
            END SELECT
        endif
        
    @ ifdef LCD4X20    
        LOOKUP BAR_row,[$80,$80,$C0,$94,$D4],BARtemp
    @ else
        LOOKUP BAR_row,[$80,$80,$C0,$90,$D0],BARtemp
    @ endif    
        LCDOUT $FE, BARtemp + BAR_col             ; Move cursor to start of the BAR
    
    ;;;;;;;;BARtemp = BAR_value * BAR_width           ; calc the char position
    ;;;;;;;;BARtemp = DIV32 BAR_range
        
        BARtemp = (BAR_value * BAR_width)/BAR_range    ; CHANGED
    
        Remainder = R2
    
        For BARloop = 0 to BAR_width -1
            SELECT CASE BARtemp
                CASE IS > BARloop
                    LCDOUT ThreeBARS              ; send 3 bars    |||
                CASE IS < BARloop
                    LCDOUT " "                    ; clear to end of BARwidth
                CASE IS = BARloop
    
    ;;;;Limit1 = BAR_range * 6
    ;;;;Limit1 = DIV32 10
    		
                    Limit1 = (BAR_range * 6)/10   ; CHANGED
    
    		if Remainder >= Limit1 then
                        LCDOUT TwoBARS            ; send 2 bars    ||
                    else
    ;;;;Limit1 = BAR_range * 3
    ;;;;Limit1 = DIV32 10
    		
    		Limit1 = (BAR_range * 3)/10   ; CHANGED
    
                        if Remainder >= Limit1 then    ; 30%
                            LCDOUT OneBAR         ; send 1 bar     |
                        else
                            LCDOUT " "            ; no bars
                        endif                
                    endif
            END SELECT
        NEXT BARloop
    BARdone:
    RETURN
    
    ASM
    ; --- The main macro for creating BARgraphs ------------------------------------
    BARgraph  macro  Value, Row, Col, Width, Range, Style
        MOVE?CW    Range, _BAR_range              ; Range MUST be a constant
        MOVE?WW    Value, _BAR_value              ; Value MUST be a WORD variable
        if (Row < 5)                              ; Row is a constant
            MOVE?CB    Row,   _BAR_row
        else                                      ; Row is a variable
            MOVE?BB    Row,   _BAR_row           
        endif
        if (Col < 16)                             ; Is Col a constant ?
            MOVE?CB    Col,   _BAR_col
        else                                      ; NO, it's a variable
            MOVE?BB    Col,   _BAR_col                                     
        endif
        if (Width <= 40)
            MOVE?CB    Width, _BAR_width
        else
            MOVE?BB    Width, _BAR_width
        endif
        if ((Style >= lines) & (Style <= blocks)) ; Is Style a valid constant ?
            MOVE?CB    Style, _BAR_style
        else                                      ; NO, treat it like a variable
            MOVE?BB    Style, _BAR_style
        endif
        L?CALL   _ShowBAR
        endm
        
    ENDASM
    
    overBAR:
    but there is a problem ; when i want to use different bar type on lcd for different rows bar types are mixing.

    example:

    row1 blocks
    row2 lines
    row3 boxed
    row4 blocks

    when use it like this all rows are one type bar.

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


    Did you find this post helpful? Yes | No

    Default

    Great! Glad you got it working, and thanks for the updated code.

    There's only 1 area for custom characters in the LCD.
    So you can only have one Style at a time. Sorry.
    <br>
    DT

  31. #151


    Did you find this post helpful? Yes | No

    Default Bargraph

    Quote Originally Posted by mehmetOzdemir View Post
    I TRIED YOUR INCLUDE FILE FOR PBPL AND MADE WHAT U SAID.

    IT'S WORKING GOOD THANKS.

    Code:
    '****************************************************************
    '*   Creates a variable sized BAR-graph anywhere on the screen  *
    '****************************************************************
    '*  Name    : LCDbar_INC.bas                                    *
    '*  Author  : Darrel Taylor                                     *
    '*  Notice  : Copyright (c) 2005                                *
    '*  Date    : 9/8/2005                                          *
    '*  Version : 1.0                                               *
    '*  Notes   : Maximum Range is 32768                            *
    '*          : Range must always be a Constant                   *
    '*          : Value must always be a WORD variable              *
    '*          :                                                   *
    '****************************************************************
                                                   ;                        default
    BAR_width   VAR  BYTE : BAR_width = 16         ; Width of the BARgraph      16
    BAR_range   VAR  LONG : BAR_range = 100        ; Range of Values (0-100)   100   ;;;;;;;;;;;
    BAR_row     VAR  BYTE : BAR_row = 1            ; Row location (1-4)          1
    BAR_col     VAR  BYTE : BAR_col = 0            ; Column location (0-15)      0
    BAR_value   VAR  LONG : BAR_value = 0          ; Current BAR value           0   ;;;;;;;;;;;
    BAR_style   VAR  BYTE : BAR_style = 1          ; 1=lines, 2=boxed, 3=blocks  1
    
    ; --- Temporary vars ----
    BARtemp     VAR  LONG   ;;;;;;;;
    Remainder   VAR  LONG   ;;;;;;;;
    BARloop     VAR  BYTE
    LastCharset VAR  BYTE : LastCharset = 0
    Limit1      VAR  LONG   ;;;;;;;;
    
    GOTO overBAR                                   ; Skip over Subroutines
    
    ThreeBARS CON 0                                ; Identify the Custom Characters
    TwoBARS   CON 1
    OneBAR    CON 2
    
    ASM
    lines  = 0x10000001                            ; Define the Styles
    boxed  = 0x10000002
    blocks = 0x10000003
    ENDASM
    
    ; --- lines Style custom chars ----
    CharsetLines:
        LCDOut $FE,$40,REP $15\8                  ; Custom char 0 - 3 lines  |||
        LCDOut $FE,$48,REP $14\8                  ; Custom char 1 - 2 lines  ||
        LCDOut $FE,$50,REP $10\8                  ; Custom char 2 - 1 line   |
    RETURN
    
    ; --- boxed Style custom chars ----
    CharsetBoxed:
        LCDOut $FE,$40,$1F,REP $15\6,$1F          ; III
        LCDOut $FE,$48,$1C,REP $14\6,$1C          ; II
        LCDOut $FE,$50,REP $10\8                  ; I
    RETURN
    
    ; --- blocks Style custom chars ----
    CharsetBlocks:
        LCDOut $FE,$40,REP $1F\8
        LCDOut $FE,$48,REP $1C\8
        LCDOut $FE,$50,REP $10\8
    RETURN
    
    ; ----- Show the BAR graph -----------------------------------------------------
    ShowBAR:
        IF BAR_width = 0 then BARdone
        if LastCharset <> BAR_style then          ; If the Style has changed ?
            LastCharset = BAR_style
            SELECT CASE BAR_style                 ; Load the new custom chars
                CASE 1 : GOSUB CharsetLines
                CASE 2 : GOSUB CharsetBoxed
                CASE 3 : GOSUB CharsetBlocks
            END SELECT
        endif
        
    @ ifdef LCD4X20    
        LOOKUP BAR_row,[$80,$80,$C0,$94,$D4],BARtemp
    @ else
        LOOKUP BAR_row,[$80,$80,$C0,$90,$D0],BARtemp
    @ endif    
        LCDOUT $FE, BARtemp + BAR_col             ; Move cursor to start of the BAR
    
    ;;;;;;;;BARtemp = BAR_value * BAR_width           ; calc the char position
    ;;;;;;;;BARtemp = DIV32 BAR_range
        
        BARtemp = (BAR_value * BAR_width)/BAR_range    ; CHANGED
    
        Remainder = R2
    
        For BARloop = 0 to BAR_width -1
            SELECT CASE BARtemp
                CASE IS > BARloop
                    LCDOUT ThreeBARS              ; send 3 bars    |||
                CASE IS < BARloop
                    LCDOUT " "                    ; clear to end of BARwidth
                CASE IS = BARloop
    
    ;;;;Limit1 = BAR_range * 6
    ;;;;Limit1 = DIV32 10
    		
                    Limit1 = (BAR_range * 6)/10   ; CHANGED
    
    		if Remainder >= Limit1 then
                        LCDOUT TwoBARS            ; send 2 bars    ||
                    else
    ;;;;Limit1 = BAR_range * 3
    ;;;;Limit1 = DIV32 10
    		
    		Limit1 = (BAR_range * 3)/10   ; CHANGED
    
                        if Remainder >= Limit1 then    ; 30%
                            LCDOUT OneBAR         ; send 1 bar     |
                        else
                            LCDOUT " "            ; no bars
                        endif                
                    endif
            END SELECT
        NEXT BARloop
    BARdone:
    RETURN
    
    ASM
    ; --- The main macro for creating BARgraphs ------------------------------------
    BARgraph  macro  Value, Row, Col, Width, Range, Style
        MOVE?CW    Range, _BAR_range              ; Range MUST be a constant
        MOVE?WW    Value, _BAR_value              ; Value MUST be a WORD variable
        if (Row < 5)                              ; Row is a constant
            MOVE?CB    Row,   _BAR_row
        else                                      ; Row is a variable
            MOVE?BB    Row,   _BAR_row           
        endif
        if (Col < 16)                             ; Is Col a constant ?
            MOVE?CB    Col,   _BAR_col
        else                                      ; NO, it's a variable
            MOVE?BB    Col,   _BAR_col                                     
        endif
        if (Width <= 40)
            MOVE?CB    Width, _BAR_width
        else
            MOVE?BB    Width, _BAR_width
        endif
        if ((Style >= lines) & (Style <= blocks)) ; Is Style a valid constant ?
            MOVE?CB    Style, _BAR_style
        else                                      ; NO, treat it like a variable
            MOVE?BB    Style, _BAR_style
        endif
        L?CALL   _ShowBAR
        endm
        
    ENDASM
    
    overBAR:
    but there is a problem ; when i want to use different bar type on lcd for different rows bar types are mixing.

    example:

    row1 blocks
    row2 lines
    row3 boxed
    row4 blocks

    when use it like this all rows are one type bar.
    turkish mean
    özdemir dostum bu program nasıl çalışıyor uygulama şemasını ekleye bilirmisin banada resimdeki 2 butonlu bargraph uygulaması lazım yukarıda resimleri ekledim bu programı 2 butonlu şekilde düzenleyebilirmiyiz. şimdiden teşekkürler bide ingilizce yazmaya çalışım ayıp olmasın

    english mean ,maybe my errors, Im sorry
    özdemir my friend,how is run this program can you attach application circuit I need on picture bargraph application with two buttons How I can make this project can you helpme already thanks

  32. #152
    Join Date
    Sep 2008
    Location
    Stockholm
    Posts
    80


    Did you find this post helpful? Yes | No

    Default

    Great stuff

    Worked on the first try in my latest program, which I didn't really expected

    I started to write something own, until I remembered that I had a vague memory of seeing something like this on the forum, and here it was, ready to be used


    Would be really nice to have a logarithmic scale too, I didn't really understood everything people wrote about logarithmic, did anyone come up with a quick software-only solution ?

  33. #153
    Join Date
    Nov 2003
    Location
    Greece
    Posts
    3,802


    Did you find this post helpful? Yes | No

    Default

    In software you need a lot of maths. So better use a hardware solution. Faster and wide dynamics (up to 64db).

    Ioannis

  34. #154
    Join Date
    Sep 2008
    Location
    Stockholm
    Posts
    80


    Did you find this post helpful? Yes | No

    Default

    But how do I do that ? a logarithmic filter ?

  35. #155
    Join Date
    Nov 2003
    Location
    Greece
    Posts
    3,802


    Did you find this post helpful? Yes | No

    Default

    If you mean in hardware, please look at previous post:

    http://www.picbasic.co.uk/forum/show...1&postcount=66

    The chips include a logarithmic amplifier. So you take the output of this amplifier and feed it in the analog converter of the PIC. At the input you feed the analog signal either directly or through an active rectifier.

    Ioannis

  36. #156
    Join Date
    Oct 2005
    Location
    Loveland CO USA
    Posts
    83


    Did you find this post helpful? Yes | No

    Default

    Several times in this thread people have mentioned log amplifiers for audio signals.
    See thatcorp.com THAT2252
    http://thatcorp.com/datashts/2252data.pdf
    The output is +0.3 to –0.3 volts over a 100db range. A simple op-amp will amplify the 0.6 volt signal and add an offset to get 0 to 5 volts.

  37. #157
    Join Date
    Nov 2003
    Location
    Greece
    Posts
    3,802


    Did you find this post helpful? Yes | No

    Default

    Nice chip, but I believe the other three (3089, 3189 and NE604) are more convienient since they work with single supply and are much wider in freq. range.

    Ioannis

  38. #158
    ciberman37's Avatar
    ciberman37 Guest


    Did you find this post helpful? Yes | No

    Default error in LCDbar.inc.bas

    The compiler signalise error in line 29, no is alabel?


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


    Did you find this post helpful? Yes | No

    Default

    Line 29 is GOTO overBAR, and overBAR: is the last line in the include file.

    Check the end of the file and make sure overBAR is there. If not, you may have received a partial download. Try downloading it again.
    <br>
    DT

  40. #160
    Join Date
    Sep 2008
    Location
    Stockholm
    Posts
    80


    Did you find this post helpful? Yes | No

    Default

    What kind of licence did u put on your code Darrel ?

    I currently making a little project for a contest in a swedish electronics forum, and I really would like to use a LCD bargraph, and the rules states that I only can use includes that are "GPL or more free.", can I use this, or do I have to write something much more ugly myself ?

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 : 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