PBP projects for R/C models


Closed Thread
Results 1 to 40 of 772

Hybrid View

  1. #1
    Join Date
    Nov 2009
    Location
    Fitchburg, Mass
    Posts
    483


    Did you find this post helpful? Yes | No

    Default This drives the wheels very fast backwards.

    Scalerobotics:

    This snippet has the capabiltiy to increment the pulse size a little bit at a time.

    With this code the car starts out driving very fast backwards, then after five to ten seconds it stops, but never starts up forward.

    My theory is that the (PAUSE 20) is what is causing the 50 pulses per second, Is that correct?


    Code:
    duty	VAR	WORD		' Duty cycle value (CCPR1L:CCP1CON<5:4>)
    range   VAR word
    segment   var word 
    		TRISC.2 = 0				' Set PORTC.2 (CCP1) to output
    		CCP1CON = %00001100		' Set CCP1 to PWM 
    		T2CON = %00000101		' Turn on Timer2, Prescale=4
    
    ' Use formula to determine PR2 value for a 1KHz signal, 
    ' 4MHz clock, and prescale=4. (4E6/(4*4*1E3))-1=249
    '		PR2 = 249				' Set PR2 to get 1KHz out
    '		PR2 = 499				' Set PR2 to get 2KHz out
    	
    ' Use formula to determine CCPR1L:CCP1CON<5:4> value for
    ' ends of range 20% to 80%.  (249+1)*4*0.2=200 (20% value)
    ' (249+1)*4*0.8=800 (80% value)
    '       duty = 200	' Set duty cycle to 20%
    
           range = 25
           duty = 1650	' Set duty cycle to 1.65msec      
           segment = 0
    
    mainloop:	CCP1CON.4 = duty.0		' Store duty to registers as
    		CCP1CON.5 = duty.1		' a 10-bit word
    		CCPR1L = DUTY >> 2
    		Pause 20				' Pause 1/50 of second
           duty = duty + 2    ' Increase duty cycle
    
    
    
    
    		IF (duty < (1650 + segment + range)) Then mainloop	' Do it again unless 2 msec
    
    		duty = duty + 2				' Reset to 20% duty cycle
    
    		segment = segment + range
            
            PAUSE 2000      'Pause 2 seconds				
            
           	GoTo mainloop				' Do it forever

  2. #2
    Join Date
    Feb 2006
    Location
    Gilroy, CA
    Posts
    1,530


    Did you find this post helpful? Yes | No

    Default

    Here is the result. It changes from off through the percentage points to all the way on, but the period remains constant at about 1.023ms. (I finally got my oscilloscope USB driver to work today!)

    Attached Images Attached Images  

  3. #3
    Join Date
    Nov 2009
    Location
    Fitchburg, Mass
    Posts
    483


    Did you find this post helpful? Yes | No

    Default PAUSE has no effect it would seem

    Thank you soooo much. What a great tool..

    Two things for me to consider.

    1. PAUSE seems to not have the affect I expected.
    2. The PR2 constant must mean something to PBP, but I can not figure out what.

    Lastly, which version of oscilloscope software do you use? Is it freeware or did it cost money. If so, how much?

    Ken

  4. #4
    Join Date
    Nov 2009
    Location
    Fitchburg, Mass
    Posts
    483


    Did you find this post helpful? Yes | No

    Default Success!!!

    The following code makes the car go full speed backwards, then stop, then full speed forwards, then stop etc. Using the RC system I can control the motor continuously though varying speed. I have not yet figured what HPWM parameters produce various speeds to the ESC. It may be that the over-specification fast pulse frequency is overriding that nuance.

    To really discover what this is doing I need to study and understand the ASM code. I think HPWM is interrupt driven. I am concerned because page 87 of the PBP Manual seems to say that the slowest pulse frequency is 245 hz. I want 50 hz.

    Code:
    '****************************************************************
    '*  Name    : HPWMcommand.BAS                                   *
    '*  Author  : Ken Jones                                         *
    '*  Notice  : Copyright (c) 2010 [select VIEW...EDITOR OPTIONS] *
    '*          : All Rights Reserved                               *
    '*  Date    : 1/27/2010                                         *
    '*  Version : 1.0                                               *
    '*  Notes   : PBP has a HPWM command.  Let's try it.                                                  *
    '*          :                                                   *
    '****************************************************************
    ' Don't forget. The duty cycle is 0 to 256 resolution
    MAINLOOP:
      HPWM 1,110,50     ' Neutral discovered by experiment.
      PAUSE 5000
      HPWM 1,64,50      ' Full backwards
      PAUSE 2000
      HPWM 1,110,50
      PAUSE 5000
      HPWM 1,164,50     ' Full forward
      PAUSE 2000
     goto mainloop

    Ken

  5. #5
    Join Date
    May 2007
    Posts
    604


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by Kenjones1935 View Post
    ....I am concerned because page 87 of the PBP Manual seems to say that the slowest pulse frequency is 245 hz. I want 50 hz.
    Period = [(PR2) + 1] * 4 * TOSC *(TMR2 Prescale Value)
    Frequency = 1/Period

    Therefore with a 4MHz clock, the lowest frequency is 244Hz.

  6. #6
    Join Date
    Nov 2009
    Location
    Fitchburg, Mass
    Posts
    483


    Did you find this post helpful? Yes | No

    Default I a not happy

    I think I am being told that HPWM can not do the job that I need done. Who has a suggestion?

  7. #7
    Join Date
    Feb 2006
    Location
    Gilroy, CA
    Posts
    1,530


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by Kenjones1935 View Post
    I think I am being told that HPWM can not do the job that I need done. Who has a suggestion?
    Did you just open the floor to my broken record again?! Here is my view, but I agree, you (we all) need to hear more viewpoints than mine.

    Darrel Taylor Interrupts using TMR0 for pulse width, and TMR2 for 20ms period, and receiver pulse width sensing with CCP1_INT and TMR1. Your chip has them, just need to utilize them.

    If you always have an RC receiver on, then you can use that as your time base for 20ms. So, you could use the CCP1_INT to read the pulse width coming from the receiver. (This will use TMR1). Then you could use TMR0, or TMR2 for the pulse width. Every time you calculated the pulse from your CCP1_INT, you would send out your servo pulse on whatever pin you like, or control multiple pins, using the same timer.

    You really just need to start playing around with these timers and interrupts, and pulse some pins to get your head around it. But without a scope, it will be pretty difficult in my opinion.

    Here some scope info that you asked me about. It is a stand alone, but has a USB port and free software that comes with it. It cost just under $300.00. http://picbasic.co.uk/forum/showthread.php?t=12483
    Last edited by ScaleRobotics; - 27th January 2010 at 21:45.

Similar Threads

  1. PBP Book
    By Bruce in forum Off Topic
    Replies: 83
    Last Post: - 4th October 2021, 12:55
  2. PBP Extensions, What are they?
    By PJALM in forum PBP Extensions
    Replies: 9
    Last Post: - 28th September 2021, 11:26
  3. Compiler differences between PBP 2.33 & 2.46
    By nikopolis in forum mel PIC BASIC Pro
    Replies: 3
    Last Post: - 2nd May 2006, 19:01
  4. Newby- PBP wont compile for 18F (MPLAB)
    By jd76duke in forum mel PIC BASIC Pro
    Replies: 1
    Last Post: - 17th December 2005, 23:30
  5. Making PBP code more modular
    By forgie in forum General
    Replies: 30
    Last Post: - 25th October 2005, 16:24

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