LCD BARgraphs


Closed Thread
Results 1 to 40 of 233

Thread: LCD BARgraphs

Hybrid View

  1. #1


    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

  2. #2
    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 ?

  3. #3
    Join Date
    Nov 2003
    Location
    Greece
    Posts
    4,132


    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

  4. #4
    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 ?

  5. #5
    Join Date
    Nov 2003
    Location
    Greece
    Posts
    4,132


    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

  6. #6
    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.

  7. #7
    Join Date
    Nov 2003
    Location
    Greece
    Posts
    4,132


    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

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

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