revolution counter


Closed Thread
Results 1 to 30 of 30

Hybrid View

  1. #1
    Join Date
    Sep 2006
    Posts
    747

    Default revolution counter

    Hi,

    I want to use the COunter command to count the number of revolution I make on a pulley. The speed is variable, therefore I do not know how count will work. Also the counte command requires a period of time, like 1 second in the manual, but I do not want this, s the wheel might be turning for 5 minutes or longer.
    How should I go about calculating the revolution?
    I have black and white wheel encoder, with a sensor reading the analog output to digital.

    ken

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


    Did you find this post helpful? Yes | No

    Default

    What else will be going on at the same time? Any idea how many times the wheel will turn and how fast?
    Dave
    Always wear safety glasses while programming.

  3. #3
    Join Date
    May 2008
    Location
    Italy
    Posts
    825


    Did you find this post helpful? Yes | No

    Default

    You must also tell us how many pulses per turn will generate your encoder.

  4. #4
    Join Date
    Sep 2006
    Posts
    747


    Did you find this post helpful? Yes | No

    Default

    I am making a coiling machine and will be passing the wiring into a small pulley. The pulley will have four sections, two white and two black. The sensor will be reading the encoder , there will be small led lighting the encoder from behind.
    Therefore the speed I do not know, and it is not important, it will be going in one direction. I will be counting four changes for one revolution.
    Here is a program I just wrote, have not tried it yet,

    'Get initil value
    ADCON0.2 = 1 'Start Conversion
    ADCIN 1, OldOutput_Pot 'analog pin 1 (RA1) get the 8 bit result
    pause 50
    if OldOutput_Pot > 127 then
    OldOutput_Pot =1
    endif
    if OldOutput_Pot < 128 then
    OldOutput_Pot =0
    endif

    Mainloop:

    ADCON0.2 = 1 'Start Conversion
    ADCIN 1, Output_Pot 'analog pin 1 (RA1) get the 8 bit result
    pause 50

    'Calculate the distance
    if Output_Pot > 127 then
    Output_Pot =1
    endif
    if Output_Pot < 128 then
    Output_Pot =0
    endif

    if OldOutput_Pot == Output_Pot then
    goto Mainloop
    endif
    if OldOutput_Pot != Output_Pot then
    counter = counter +1 'If oldOutput_pot is different then Output_pot
    OldOutput_Pot = Output_Pot
    if counter =4 then
    Revolution = Revolution + 1
    counter =0
    endif
    endif

    lcdout $FE,1, "Counter:",dec counter
    lcdout $FE,$C0, "Revolution:",dec Revolution
    pause 150


    GOTO Mainloop
    end

  5. #5
    Join Date
    Nov 2005
    Location
    Bombay, India
    Posts
    967


    Did you find this post helpful? Yes | No

    Default

    Ken

    What kind of encoder are you using here? Usually an encoder would give out digital pulses. But, you seem to be using the ADC to decode it. I would suggest that you look at the possibility of counting the pulses via an interrupt. This will keep your mainline code free for other tasks. Darrell Taylor has some nice code that can kickstart you in that direction. Just search for it on this site.

    Jerson

  6. #6
    Join Date
    Sep 2006
    Posts
    747


    Did you find this post helpful? Yes | No

    Default

    My program is not outputting anything, I think it is a initilizing problem but I do not know what:
    I am posting the header:
    can some one help me:

    ' Internal Oscillation program
    ' A/D testing -RA.1
    ' LCD

    '/////////////////////////
    '// Define section //
    '/////////////////////////

    INCLUDE "modedefs.bas"
    @ DEVICE pic16F88 MCLR_ON, INTRC_OSC, WDT_ON, LVP_OFF, BOD_OFF, PWRT_ON, PROTECT_OFF, CCPMX_ON
    OSCCON=$60 ' use internal 4MHZ osc

    ANSEL = %01000010 ' set AN1 (RA1) as analog, others to digital
    ADCON1 = %00000000 ' Left justified results in 8 bits
    ADCON0 = %10001001 ' Configure and turn on A/D Module
    CMCON = 7 ' Disable analog comparator

    '/////////////////////////
    '// LCD configuration //
    '/////////////////////////

    DEFINE LCD_DREG PORTB ' Set LCD Data port
    DEFINE LCD_DBIT 4 ' Set starting Data bit (0 or 4) if 4-bit bus

    DEFINE LCD_RSREG PORTB ' Set LCD Register Select port
    DEFINE LCD_RSBIT 1 ' Set LCD Register Select bit

    DEFINE LCD_EREG PORTB ' Set LCD Enable port
    DEFINE LCD_EBIT 0 ' Set LCD Enable bit

    DEFINE LCD_BITS 4 ' Set LCD bus size (4 or 8 bits) '4 therefore put wire at 4, 5, 6 and 7 of LCD

    DEFINE LCD_LINES 2 ' Set number of lines on LCD
    DEFINE LCD_COMMANDUS 2500
    DEFINE LCD_DATAUS 250
    DEFINE CHAR_PACING 2000
    pause 2000


    TRISB = %00000000 ' Set PORTB to all output
    TRISA = %11111111 ' Set PORTA to all input


    '///////////////////////////////////////////////
    '// Variable Declaration and initialization //
    '///////////////////////////////////////////////
    Output_Pot var byte
    OldOutput_Pot var byte
    Revolution var word
    counter var byte

    revolution = 0
    Output_Pot = 0
    OldOutput_Pot = 0
    counter = 0
    'Get initil value
    ADCON0.2 = 1 'Start Conversion
    ADCIN 1, OldOutput_Pot 'analog pin 1 (RA1) get the 8 bit result
    pause 50
    if OldOutput_Pot > 127 then
    OldOutput_Pot =1
    endif
    if OldOutput_Pot < 128 then
    OldOutput_Pot =0
    endif

    Mainloop:

Similar Threads

  1. Conway's Game Of Life
    By wellyboot in forum mel PIC BASIC Pro
    Replies: 45
    Last Post: - 28th May 2020, 06:14
  2. Counter not counting !!!
    By lerameur in forum mel PIC BASIC Pro
    Replies: 24
    Last Post: - 20th February 2009, 22:15
  3. Replies: 42
    Last Post: - 14th January 2008, 11:38
  4. 20 Digit Virtual LED Counter
    By T.Jackson in forum Code Examples
    Replies: 9
    Last Post: - 19th November 2007, 05:02
  5. Microcontroller with 2 way paging application problem
    By oneohthree in forum mel PIC BASIC Pro
    Replies: 30
    Last Post: - 20th April 2007, 17:27

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