Newbie remote control question?


Closed Thread
Results 1 to 5 of 5
  1. #1
    Join Date
    Jul 2009
    Posts
    4

    Question Newbie remote control question?

    Dear friends I have a remote control transmitter / receiver and I trying to convert the signal (1ms - 2ms) to a binary value and store in a variable eight-bit (BYTE) (0 to 255).

    When using a potentiometer and converts a voltage is easy ... However I can not understand how to convert the pulse width!?

    I need to multiply or divide a value to having the other binary value?? And store in variable?!?

    I will use this value to control the speed of a small motor connected in (PORTC.2)... And the pulse is read in (PORTB.0)... PIC16F877 is used.

    Look at the code I'm trying to use:


    DEFINE OSC 10
    DEFINE CCP1_REG PORTC ' Hpwm 1 pin port pin 17 rc2 ccp1
    DEFINE CCP1_BIT 2 ' Hpwm 1 pin bit
    ADCON1 = 2 ' Config. all porta as analog and porte as digital

    TRISA = %11111111 ' Set all porta as input (analogs)
    TRISB = %11111111 ' Set all portb as input
    TRISC = %00000011 ' Set all portc as output except RC0 and RC1
    TRISD = %00000000 ' Set all portd as output
    TRISE = %00000000 ' Set all porte as output

    rx_sp VAR PORTB.0 ‘ Pin port connected RX remote control
    speed VAR BYTE ‘ My var to storage the pulse value ????????????

    led1 VAR PORTD.0 ‘ Pin’s portD driving LED’s no used now.
    led2 VAR PORTD.1
    led3 VAR PORTD.2
    led4 VAR PORTD.3
    my_pwm VAR BYTE ‘ Used to update value of (HPWM) ‘command…

    start:
    PULSIN rx_sp,1,speed
    My_pwm = speed
    HPWM 1,my_pwm,1000
    GOTO start
    END

    Thanks for the help.

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


    Did you find this post helpful? Yes | No

    Default

    Clodoaldo, you cannot transfer the pulsin value to the duty cycle without some math manipulation.

    Let's assume you want keep the velocity constant.

    You measure the pulse width using the pulsin function (use a word variable)

    You will have your motor running with duty cycle = 50%

    Now the millisecs returned in the word variable is the speed of your motor and you have to decide which value rappresent the speed that you want to keep put this value into the variable Your_Speed.

    Once you have done that, then the math could be as follow:

    Code:
    Read_Speed  Var Word
    Your_Speed  Var Word
    Deviation      Var Word
    Duty            var Byte
    Error_Flag       Var Bit
    
    Duty = 50
    
    Your_Speed = ?????
    
    Calculation:
    
    Deviation = Read_Speed * 100 / Your_speed
    
    Error_Flag = 0
    
    If Deviation > 100 then Duty=Duty-(Deviation-100)
    
    If Deviation <100 the Duty = Duty +(100-Deviation)
    
    If Duty > 100 the Error_Flag = 1
    
    Return
    Check Error_Flag before passing the new duty value to the PWM comand.
    A Pause value, to give the motor the time to gain the new speed is recommended.


    Al.
    Last edited by aratti; - 14th July 2009 at 07:19.
    All progress began with an idea

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


    Did you find this post helpful? Yes | No

    Default

    Let's assume you want to controll the velocity and you have no feedback from the motor.

    You will give the word variable Max_Speed an arbitrary value that you will never exceed (this will reppresent duty = 100%).

    You measure the pulse width using the pulsin function (using a word variable)

    Once you have done that, then the math could be as follow:

    Code:
    Read_Speed  Var Word ' value that you will send via RC
    Max_Speed  Var Word  ' arbitrary value = to 100 Duty cycle
    Duty            var Byte
    Error_Flag       Var Bit
    
    
    
    Max_Speed = ????? ' you enter here your arbitrary value
    
    Calculation:
    
    Error_Flag = 0
    
    Duty = (Read_Speed * 100 / Max_speed) 
    
    IF Duty > 100 Then Duty = 100 : Error_Flag = 1
    
    Return
    If Error_Flag = 1 then you have sent a value greater than the permissible one.

    You can add a line saying that if Read_Speed is minor then X duty = 0

    (If Read_Speed < xxx then Duty = 0) in case Read_Speed could never be zero.

    Remember that HPWM duty cycle 100% = 255.

    Al.
    Last edited by aratti; - 14th July 2009 at 09:16.
    All progress began with an idea

  4. #4
    Join Date
    Nov 2003
    Location
    Greece
    Posts
    3,807


    Did you find this post helpful? Yes | No

    Default

    If you loose your RF signal, what should your motor do?

    Please note that frequency in HPWM is a word sized variable, so it must in Pulsin also.

    Ioannis

  5. #5
    Join Date
    Jul 2009
    Posts
    4


    Did you find this post helpful? Yes | No

    Lightbulb New ideas...

    See the speed control does NOT return automatically. It is a simple equipment so if I fail to reset the speed the engine should not stop...

    Now I did NOT know that the variable for (HPWM) is (WORD) ... I try to use the examples of ARATTI and change the code to new test...

    For now thanks for the support. Once back with results.

Similar Threads

  1. Remote PIC input question
    By Adrian in forum mel PIC BASIC Pro
    Replies: 2
    Last Post: - 1st September 2007, 15:44
  2. IR Remote Control Issues
    By Kamikaze47 in forum mel PIC BASIC Pro
    Replies: 20
    Last Post: - 28th August 2007, 14:12
  3. No one-way approach to learning ir remote control frequencies
    By selbstdual in forum mel PIC BASIC Pro
    Replies: 41
    Last Post: - 22nd June 2007, 13:26
  4. IR Remote Control
    By mychangl in forum mel PIC BASIC Pro
    Replies: 2
    Last Post: - 25th March 2007, 07:01
  5. Remote control
    By Radiance in forum General
    Replies: 2
    Last Post: - 6th August 2003, 15:13

Members who have read this thread : 1

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