Help with A/D math!


Closed Thread
Results 1 to 16 of 16

Hybrid View

  1. #1
    Join Date
    Mar 2011
    Location
    Bangkok Thailand
    Posts
    16


    Did you find this post helpful? Yes | No

    Default Re: Help with A/D math!

    Hello
    This was very interesting. I have a little bit of the same problem.
    I have A/D input 0-5V (0-255)

    I want a puls out 0V=1mS and 5V=2mS.

    If i take your example with the Laser and run it in CurveExpert i got the formula a-bx.

    Where did you get 8573 and 41 from, and what is + ( AdResult / 2 ) means?
    distance = 8573 + 41*AdResult + ( AdResult / 2 )

    Any help will help.

    Name:  bild2.gif
Views: 952
Size:  52.2 KB

  2. #2
    Join Date
    Oct 2005
    Location
    Sweden
    Posts
    3,621


    Did you find this post helpful? Yes | No

    Default Re: Help with A/D math!

    Hi,
    How about:
    Code:
    ADResult = ADResult * 10
    DelayInMicroSeconds = 1000 + (ADResult */ 100)
    PortB.0 = 1
    PauseUs DelayInMicroSeconds
    PortB.0 = 0
    When ADResult is 0 DelayInMicroSeconds is 1000 (1ms), when ADResult is 128 you'll get 1000 + (1280 * 100 / 256) = 1500 and when ADresult is 255 DelayInMicroSeconds is 1000 + (2550 * 100 / 256) = 1996.

    It's not perfect but hopefully good enough.

    /Henrik.

  3. #3
    Join Date
    Mar 2011
    Location
    Bangkok Thailand
    Posts
    16


    Did you find this post helpful? Yes | No

    Default Re: Help with A/D math!

    Tusen Tack Henrik.
    Sorry for the Swedish, i was so happy for the answer AND that you also took your time to described how you did it.

    This was exactly what i was looking for.

    Thank's
    Ole

  4. #4
    Join Date
    Mar 2011
    Location
    Bangkok Thailand
    Posts
    16


    Did you find this post helpful? Yes | No

    Default Math solved with 16F690 Pot, Servo and LCD

    My first PIC program works!

    Description
    A pot connected to an A/D port gives 0-255
    A little converting give an output of 1mS when pot CCW and 255 when pot is max CW.
    Drives the Servo between 1-2mS
    Show the Pot input on LCD line 1, 0-255.
    Show the Pulse width in mS on LCD line 2, 1-2mS.

    Se Drawing below.

    '************************************************* ***************
    '* Name : NimSer.BAS *
    '* Date : 3/3/2011 *
    '* Notes : Move Servo 1 to 2mS depend on POT value *
    '* Show valu in mS on LCD display *
    '* For standard servo settings 1-2mS set LOW_servo con 100 *
    '* and HIGH_servo CON 200 *
    '************************************************* ***************
    'Define OSC and ADC
    DEFINE OSC 4 ' Set internal Oschillator to 4Mhz
    DEFINE ADC_BITS 8 ' Set number of bits in result
    DEFINE ADC_CLOCK 2 ' Set clock source (3=rc)
    DEFINE ADC_SAMPLEUS 50 ' Set sampling time in uS
    ' Define LCD pins
    Define LCD_DREG PORTC 'LCD data port
    Define LCD_DBIT 0 'LCD data starting bit 0 or 4
    Define LCD_RSREG PORTC 'LCD register select port
    Define LCD_RSBIT 4 'LCD register select bit
    Define LCD_EREG PORTC 'LCD enable port
    Define LCD_EBIT 5 'LCD enable bit


    TRISA = %00001001 ' RA0 = A/D input
    ADCON1.7 = 0 ' RA.1 = +Vref, Set PORTA analog and left justify result
    PORTb.6 =0 ' Prepare RB0 for high-going pulseout

    ANSEL = %00000100 ' Set PORTA.2 analog, rest digital
    ANSELH = %00000000

    ' Variables
    outpuls VAR WORD ' Variable for the calculated puls out in mS
    POT_POS VAR BYTE ' Pot position CC=0, CCW=255
    LOW_servo con 60 ' Min Servo pulse 60= 0.6mS 100=1mS
    HIGH_servo CON 200 ' Max Span from LOW_servo to HIGH_servo
    ' Span 100 gives 100+100 = 200=2mS
    Pause 500 ' Wait for LCD to start

    MainLoop: ' The Loop start here!
    ADCIN 0,POT_POS ' Read A/D channel 0 to variable SVO_POS
    outpuls =LOW_servo + (POT_POS *HIGH_servo/255) 'Calculate the outpuls in mS
    Lcdout $fe, 1, "POT_POS= ", #POT_POS ' Display POT Valu between 0-255 on line 1
    LCDOut $fe,$C0, "Puls= ",DEC (outpuls/100),".", DEC2 outpuls,"mS"' Display pulswith in mS on line 2

    PULSOUT portb.6 ,outpuls ' Move servo on pin
    PAUSE 20 ' Constant 20mS pulses(low) between outpuls
    GOTO MainLoop ' Forever
    End

    Pot to Servo and LCD.pdf

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


    Did you find this post helpful? Yes | No

    Default Re: Help with A/D math!

    Nice you got it working. Also very nice graphics in your pdf file!

    Ioannis

  6. #6
    Join Date
    Mar 2011
    Location
    Bangkok Thailand
    Posts
    16


    Did you find this post helpful? Yes | No

    Thumbs up Re: Help with A/D math!

    Thank's Ioannis. There is a long way to go. But i start to understand what every body is talking about, Loook in the datasheet, 70% of the answer is there.

    Continue the good work, I will try.

    Ole

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


    Did you find this post helpful? Yes | No

    Default Re: Help with A/D math!

    I see that you have the potential. From your first question to your complete working code there was an impressive progress.

    By he way what you used for the graphics?

    Ioannis

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