LCD BARgraphs


Closed Thread
Results 1 to 40 of 233

Thread: LCD BARgraphs

Hybrid View

  1. #1
    Join Date
    Oct 2005
    Location
    New Jersey
    Posts
    425


    Did you find this post helpful? Yes | No

    Default

    Now, I am really confused. How come this program worked but the other one didn't?

    DEFINE OSC 20
    INCLUDE "LCDbar_INC.bas" ' Include the BARgraph routines
    ' Set LCD Data port
    DEFINE LCD_DREG PORTB
    ' Set starting Data bit (0 or 4) if 4-bit bus
    DEFINE LCD_DBIT 4
    ' Set LCD Register Select port
    DEFINE LCD_RSREG PORTB
    ' Set LCD Register Select bit
    DEFINE LCD_RSBIT 2
    ' Set LCD Enable port
    DEFINE LCD_EREG PORTB
    ' Set LCD Enable bit
    DEFINE LCD_EBIT 3
    ' Set LCD bus size (4 or 8 bits)
    DEFINE LCD_BITS 4
    ' Set number of lines on LCD
    DEFINE LCD_LINES 2
    ' Set command delay time in us
    DEFINE LCD_COMMANDUS 2000
    ' Set data delay time in us
    DEFINE LCD_DATAUS 100.

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

    Value VAR WORD ' Must be a WORD even though AD is 8bit
    pause 1000
    LCDOUT $FE, 1, " "
    loop1:

    adcin 2,value

    LCDOUT $FE,2,"Value = ",DEC Value," "

    ; syntax- BARgraph Value, Row, Col, Width, Range, Style
    @ BARgraph _Value, 2, 0, 16, 255, lines

    goto loop1


    The only thing I adjusted was the pause commands and I moved the include file to the top of the program. I'm happy that it's working but I'd like to know for future reference incase it happens again. Thanks for the help Darrel.

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


    Did you find this post helpful? Yes | No

    Default

    You probably have an LCD that is very slow starting up and requires more than 500 ms before receiving it's first command.

    Being that you also have DEFINE LCD_DATAUS 100, it's seems reasonable.
    Most LCD's are happy with LCD_DATAUS 50, and only 250 ms power-up delay. But there are some that aren't.

    Try leaving the INCLUDE where it was, with the longer pauses. Just to see what happens.
    <br>
    DT

  3. #3
    Join Date
    Oct 2005
    Location
    New Jersey
    Posts
    425


    Did you find this post helpful? Yes | No

    Default Found the problem!

    Well, after searching for a while, I found the problem and it's strange. At the tops of both programs, look at the OSC commands. One is in CAPS and the other isn't. I guess it has to be in CAPS or PBP won't know what it is. I wonder why it doesn't give you an error when compling?

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


    Did you find this post helpful? Yes | No

    Default

    It's been already mentioned a lot of time since the Forum birth.

    DEFINEs must be WRITTEN AS STATED in the manual. Case not, they will never be considered by the compiler
    http://www.picbasic.co.uk/forum/show...light=spelling
    Steve

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

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


    Did you find this post helpful? Yes | No

    Default

    Ha, that's funny. Didn't even see it.

    >> I wonder why it doesn't give you an error when compling? <<

    You can DEFINE almost anything you want

    <pre>DEFINE GreatGoogly Moogly</pre>But it only has an effect if it matches up with something the program is expecting to see.
    And, when using MPASM the case has to match too.

    Well, now that you've got things going, I hope the BarGraphs work out for you.
    <br>
    Last edited by Darrel Taylor; - 11th July 2006 at 03:46. Reason: oops, ya beat me Steve.
    DT

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


    Did you find this post helpful? Yes | No

    Default

    Yup, i guess the MPASM AND PM IFDEF can't be bypassed like Variable and Labels.
    Steve

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

  7. #7


    Did you find this post helpful? Yes | No

    Default

    Hi guys,

    does this work with a pic 16F84A ??

    I get many strange errors !

    .

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


    Did you find this post helpful? Yes | No

    Default

    Does it say something like "... Least significant bits used" ?

    If not, What errors are you getting?
    <br>
    DT

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

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

  11. #11
    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. #12
    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. #13
    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

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

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

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