Help for my project(16f877,2x16LCD,)


Closed Thread
Results 1 to 22 of 22

Hybrid View

  1. #1
    Join Date
    Mar 2008
    Posts
    13

    Default Need help for my project(16f877,2x16LCD,)

    Hello ! As you see i'm a newbee .
    (Merhaba arkadaşlar.)
    I've started to learn about a pic for about a month ago .
    I learned to write something to the LCD with 2 lines(rows).
    This was a first step for me to learn the 'p' of pic.
    I'm an undergraduate student and my final project is to show the voltage change from the output of LM358 IC with 16f877 with using 2x16 LCD.
    I'll show the change as the bar graph.
    I have square wave 15V from the LM358 IC output.
    The output mostly stays about 15V , so the ADC will be vice-versa.
    I learned that 16f877 has 10 channels ADC , so we have 0-1023 interval.
    As i said above , the peak of the signal is 15V and as i said above it's a square wave.
    The most important point is , the ADC must be vice-versa.
    For example : for my 15-14V input , the first interval must be 0-68 , for 13-12V input , second interval : 68-136 ...
    I'm using pic basic pro and I don't know how to write a program .
    And i read about LCD bar graphs , but i couldn't make it. ( http://www.picbasic.co.uk/forum/showthread.php?t=2359 )
    Here is what i learned about pic :

    @ DEVICE pic16F877
    @ DEVICE pic16F877, WDT_on
    @ DEVICE pic16F877, PWRT_ON
    @ DEVICE pic16F877, PROTECT_OFF
    @ DEVICE pic16F877, HS_OSC


    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


    TRISB=0
    TRISE=0


    LOW PORTE.2


    LCDOUT $FE,1
    PAUSE 200

    LCDOUT $FE,2,"PIC BASIC"
    LCDOUT $FE,$C0,"PRO"

    END
    I really need help .
    Thank you
    Last edited by karamastik; - 19th March 2008 at 20:49.

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


    Did you find this post helpful? Yes | No

    Default

    First you will need a 3 to 1 voltage divider so that 15 volts looks like 5.

    Then this should get you started with ADC.
    http://www.rentron.com/PICX2.htm
    Dave
    Always wear safety glasses while programming.

  3. #3
    Join Date
    Mar 2008
    Posts
    13


    Did you find this post helpful? Yes | No

    Default

    Hmm , thank you .
    Let's think , if i want to make it with 5V not 15V .
    I just want to learn the main idea.
    I think , if i learn the main idea , maybe i can go on with 15V.
    In fact , i can change the output voltage from 1.67 V to 15V .
    In this project we wanted to have good resolution , and we decided to get 15V from output.
    As i said , let's think , the input changes 0-5V.
    Thank you
    By the way , my main project was to build an cell phone detector and i did it with a small circuit. In this circuit there are 2 same RF subcircuits ; one for the left side detection and the other side is for the right side detection.
    We amplified the signals with LM358 and we may get output from 1.67 to 15V . ( with gain changing)
    Finally we want to show the voltage change with the LCD bar graphs.
    The first line of the LCD will be left channel and the second line will be the right channel .

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


    Did you find this post helpful? Yes | No

    Default

    Do small steps.
    You have the LCD working.
    Now make the ADC work with 8 bit resolution.
    Then do two ADC channels.
    Then work on 10 bit for more accuracy.
    Then work on the bar graph.
    Dave
    Always wear safety glasses while programming.

  5. #5
    Join Date
    Mar 2008
    Posts
    13


    Did you find this post helpful? Yes | No

    Default

    Okay ,
    for ADC :

    PORTA = %00000001
    RAW var word ' the input voltage
    volt var word
    Mvolt var byte

    START:

    ADCIN 0,RAW ' Analog read from #ch0 and move it to RAW
    LOOK : IF ADCON0.2=1 THEN LOOK ' when ADC finished ADCON0.2=0
    ' for 0-5V , 0-1024 - > 5/1024 = 0.0048828 = very small number
    '0.0048828*1000 = 4.8828 ( raw/V)
    '4.8828 * 256 = 1250 ( 1250 = 5/1024 * 256*1000 ) we made 32bits calculation
    Volt=(Raw*/1250)/100
    MVolt=Volt//10 ' Mvolt = Volt mod 10
    Volt=Volt/10
    LCDOUT $FE,2,"VOLT=",#VOLT,",",#Mvolt
    PAUSE 500
    GOTO START
    I tried to read the voltage from LM358 and to write the LCD as Volt.Mvolt
    I'm waiting for help.
    Thanks.
    Last edited by karamastik; - 19th March 2008 at 23:03.

  6. #6
    Join Date
    Mar 2008
    Posts
    13


    Did you find this post helpful? Yes | No

    Default

    Sorry for the flood , but i must ;
    i changed the ADC codes , but volt variable does not accept floating numbers :

    START:

    ADCIN 0,RAW
    LOOK : IF ADCON0.2=1 THEN LOOK
    Volt=(0,0048828125*RAW)*1000
    MVolt=Volt//10 ' Mvolt = Volt mod 10
    LCDOUT $FE,2,"VOLT=",#VOLT,",",#Mvolt
    PAUSE 500
    GOTO START
    Last edited by karamastik; - 20th March 2008 at 00:54.

Members who have read this thread : 0

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