revolution counter


Closed Thread
Results 1 to 30 of 30

Hybrid View

  1. #1
    Join Date
    Sep 2006
    Posts
    747


    Did you find this post helpful? Yes | No

    Default

    Jerson,

    this is very simple encoder. I have light to voltage chip, reading the encoder, the encoder is divided into 4 sections, 2 white and two black, read black show ADC below 127 and white ADC above 127.

    ken

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


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by lerameur View Post
    Jerson,

    this is very simple encoder. I have light to voltage chip, reading the encoder, the encoder is divided into 4 sections, 2 white and two black, read black show ADC below 127 and white ADC above 127.

    ken
    So black is 0 volts and white is 5 volts?
    Dave
    Always wear safety glasses while programming.

  3. #3
    skimask's Avatar
    skimask Guest


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by lerameur View Post
    I have light to voltage chip,
    That's a SOLAR CELL!

    reading the encoder, the encoder is divided into 4 sections, 2 white and two black, read black show ADC below 127 and white ADC above 127.
    I get the feeling you might end up making a small program just to test the ability of your sensor to read the black/white patches in the first place rather than assuming your sensor/PIC will read everything the way you hope it will. Something like this:

    Code:
    ........setup.........
    ledout var port...some port here
    main: adcon0.2=1 'Start Conversion
    waitonadc: if adcon0.2 = 1 then waitonadc
    oldoutput_pot = adresh *256 + adresl
    if oldoutput_pot > 127 then
         ledout = 1
    else
         ledout = 0
    endif
    goto main
    Change the value 127 above to find a 'trip point' for the counter itself.
    See what happens with that. If that works for you, then you should be all set.
    (Also, you may want to check the manual for your use of the ADCIN command)

  4. #4
    Join Date
    May 2004
    Location
    NW France
    Posts
    3,653


    Did you find this post helpful? Yes | No

    Wink

    Quote Originally Posted by skimask View Post

    That's a SOLAR CELL!
    Not compulsory ...

    OPB 608/704 / CNY 70 i.e. are reflective Opto-couplers ...

    Alain
    ************************************************** ***********************
    Why insist on using 32 Bits when you're not even able to deal with the first 8 ones ??? ehhhhhh ...
    ************************************************** ***********************
    IF there is the word "Problem" in your question ...
    certainly the answer is " RTFM " or " RTFDataSheet " !!!
    *****************************************

  5. #5
    Join Date
    Sep 2006
    Posts
    747


    Did you find this post helpful? Yes | No

    Default

    I just want to count the revolution, so even if the trip point is not on the 'dot' it do not matter. What matters here is that I want to be able to calculate the transitions from black to white and white to black. After four transistions I get a revolution .
    The problem in my program is that it is not showing anything on the LCD.

    ken

  6. #6
    Join Date
    Sep 2006
    Posts
    747


    Did you find this post helpful? Yes | No

    Default

    crap.. I forgot to define my ADC:

    Define ADC_BITS 8 ' Set number of bits in result
    Define ADC_CLOCK 3 ' Set clock source (3=rc)
    Define ADC_SAMPLEUS 50 ' Set sampling time in uS

    ken

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


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by lerameur View Post
    crap.. I forgot to define my ADC:

    Define ADC_BITS 8 ' Set number of bits in result
    Define ADC_CLOCK 3 ' Set clock source (3=rc)
    Define ADC_SAMPLEUS 50 ' Set sampling time in uS

    ken
    So it is working now???
    Dave
    Always wear safety glasses while programming.

  8. #8
    Join Date
    Sep 2006
    Posts
    747


    Did you find this post helpful? Yes | No

    Default

    I dont know if it works, I m at work now, I will see when I get home tonight

    skimask, what do you mean by tripping?
    :is this it...

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

  9. #9
    skimask's Avatar
    skimask Guest


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by lerameur View Post
    I just want to count the revolution, so even if the trip point is not on the 'dot' it do not matter. What matters here is that I want to be able to calculate the transitions from black to white and white to black. After four transistions I get a revolution .
    The problem in my program is that it is not showing anything on the LCD.
    Right, but if it's not tripping in the first place, you won't get any counts in the last place...
    And the ADC, yes, that's part of it. The other part is 'starting' the ADC itself.

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


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by lerameur View Post
    The problem in my program is that it is not showing anything on the LCD.
    Or is this the problem
    Code:
    DEFINE LCD_BITS 4 ' Set LCD bus size (4 or 8 bits) '4 therefore put wire at 4, 5, 6 and 7 of LCD
    Dave
    Always wear safety glasses while programming.

  11. #11
    Join Date
    Nov 2005
    Location
    Bombay, India
    Posts
    970


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by lerameur View Post
    Jerson,

    this is very simple encoder. I have light to voltage chip, reading the encoder, the encoder is divided into 4 sections, 2 white and two black, read black show ADC below 127 and white ADC above 127.

    ken
    Precisely. Depending on the way you've wired the sensor, you could see a logic 1 for black or a logic 0 for black. You can just read the digital input after configuring the pins tris register for input mode. Easier than reading the ADC and all its associated overhead. This overhead would eventually cause you to lose counts. I will still prod you into looking at the interrupt option.

    What you've done will work, but at speeds relatively slower than the speed at which you read the ADC.

    A simple routine could have an interrupt set up possibly on RB0. And the interrupt code would do something as simple as this

    Code:
    CounterISR:
         dummyread = PortB      ' clear the cause of the interrupt
         Counter = Counter+1
         return                        ' from interrupt
    This code will ensure that you catch each and every pulse that comes its way irrespective of the Pauses in your mainline code.

    This code is just a guide, please dont hold me to it.

    JF

  12. #12
    Join Date
    Sep 2006
    Posts
    747


    Did you find this post helpful? Yes | No

    Default

    OOo I get the digital part now, no need for ADC.
    I have never used interrupt, can you explain the code snippet you provided above?


    should this work?

    Mainloop:

    'Calculate the distance
    Output_Pot = PortB.3

    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

    ken

  13. #13
    Join Date
    Sep 2006
    Posts
    747


    Did you find this post helpful? Yes | No

    Default

    still nothing showing on the lcd...

    k

  14. #14
    skimask's Avatar
    skimask Guest


    Did you find this post helpful? Yes | No

    Default

    Well, then get rid of the digital inputs and make sure the LCD is working in the first place...

    And besides, in the beginning of the program, OldOutput_Pot = 0 and Output_Pot = 0 therefore, they're both equal and Mainloop keeps executing! Unless you've preset one or the other to a different value...

  15. #15
    Join Date
    Sep 2006
    Posts
    747


    Did you find this post helpful? Yes | No

    Default

    I got the circuit working now without the ADC, thats the one I will use.
    BUT,I also tried the ADC, it only works in 10 bit mode when I try the 8 bit mode, nothing appears on the LCD. Here the progrm, but before here is the two lines I changed for the 8 bit mode:

    ADCON1 = %10000010
    Define ADC_BITS 8 ' Set number of bits in result

    why is this happening?

    INCLUDE "modedefs.bas" 'Includes supoprt for PicBasic language
    @ DEVICE pic16F88, INTRC_OSC, CCPMX_ON
    OSCCON=$60 ' use internal 4MHZ osc

    ANSEL = 0
    CMCON = 7 ' Turn OFF the comparators so pins can be used as digital I/O-pins
    ADCON1 = %00000010 ' Analog to digital configuration register (ADCON)
    ' Set PORTA to digital

    ' Define ADCIN parameters
    Define ADC_BITS 10 ' Set number of bits in result
    Define ADC_CLOCK 3 ' Set clock source (3=rc)
    Define ADC_SAMPLEUS 50 ' Set sampling time in uS

    ADCON1 = %10000010 ' Analog to digital configuration register (ADCON)
    ' Set PORTA to digital

    '/////////////////////////
    '// 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 1000


    '/////////////////////////
    '// PIN configuration //
    '/////////////////////////

    TRISA = %11100111 ' Set PORTA to all input
    TRISB = %00001100 ' Set PORTB to all output
    PortA = 0

    '///////////////////////////////////////////////
    '// 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 initial value
    'ADCON0.2 = 1 'Start Conversion
    ADCIN 1, OldOutput_Pot 'analog pin 1 (RA1) get the 8 bit result
    pause 50
    if OldOutput_Pot > 512 then
    OldOutput_Pot =1
    else
    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 > 512 then
    Output_Pot =1
    else
    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

  16. #16
    skimask's Avatar
    skimask Guest


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by lerameur View Post
    BUT,I also tried the ADC, it only works in 10 bit mode when I try the 8 bit mode, nothing appears on the LCD. Here the progrm, but before here is the two lines I changed for the 8 bit mode:
    Did you set it for left justify or right justify? Makes a difference...

Similar Threads

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