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 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?

  2. #2
    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 22:45.

  3. #3
    Join Date
    May 2007
    Posts
    604


    Did you find this post helpful? Yes | No

    Default

    Ken,

    Can you do a LED blinky without using PAUSE (or any other delay commands)? Try to do a 1 second blinky using a timer. When you can do that, you will be well on your way to solving your motor ESC problem.

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


    Did you find this post helpful? Yes | No

    Default I need documentation

    Guys and maybe Gals,

    I am getting frustrated. I can not find the documentation that I need. I need Assembler Language details for the 16-bit chips. I need 16-bit BASIC libraries (Microchip talks C, not Basic). Darrel Taylor is rebuilding his site. He is not accepting new members.

    Microchip has screwed up on this link:

    MPLAB Assembler, Linker and Utilities for 16-Bit Devices User's Guide
    which points to-->
    http://ww1.microchip.com/downloads/e...Doc/51317G.pdf

    But when you download51317G you discover it is about the 24-BIt devices. It is the same document that -->

    DS51317 - MPLAB Assembler, Linker and Utilities for PIC24 MCUs and dsPIC DSCs User's Guide

    points to.

    What is the number for the 16-Bit devices user's guide?? I have not found a complete list of Assembly language code, syntax, structure whatever! Without that I do not see how I can understand what this 16F887 is doing.

    Also it is late. I am going to bed.

    Ken

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


    Did you find this post helpful? Yes | No

    Default

    Ken,

    Darrel's site must have been down for what evere reason. It seems to work now.
    http://www.PBPgroup.com/

    ASM instuctions are normally in the devices data sheet. But... Please do not take this the wrong way. If you are having trouble with Basic I doubt it ASM will do much good.

    I like remto's sugesstion about blinky. Give that a shot.
    Dave
    Always wear safety glasses while programming.

  6. #6
    Join Date
    May 2007
    Posts
    604


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by mackrackit View Post
    Ken,

    ....ASM instuctions are normally in the devices data sheet. But... Please do not take this the wrong way. If you are having trouble with Basic I doubt it ASM will do much good.

    I like remto's sugesstion about blinky. Give that a shot.
    Ken, I highly recommend taking Dave's advise. You need a better understanding of what makes a PIC tick (hint, read the free book I linked to). When you have that under your belt, then the coding is the really easy part. It doesn't matter whether you use C, BASIC (PBP or some other variant) or ASM - the situation is the same.

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


    Did you find this post helpful? Yes | No

    Default 12f683 servo pass through

    Here is some code that will measure an RC receiver pulse width coming in on GPIO.2, perform a little math on the value, and put out the wave form out on GPIO.1, using DT Interrupts.

    It's on a little 12F683 and was written for 8mhz internal. Looks pretty good on the scope. I need to test it on a motor controller though. But time for bed.....

    Code:
    <html>
    <head></head>
    <body><!--StartFragment--><pre><code><font color="#000080"><i>
    </i></font><b>DEFINE </b>OSC 8
    <b>INCLUDE </b><font color="#FF0000">&quot;DT_INTS-14.bas&quot;</font><font color="#000080"><i>;interrupt routines
    </i></font><b>INCLUDE </b><font color="#FF0000">&quot;sub16.inc&quot;     </font><font color="#000080"><i>; subtract 16 bit macro
    
    </i></font><b>DEFINE </b>DEBUG_REG	GPIO
    <b>DEFINE </b>DEBUG_BIT	0
    <b>DEFINE </b>DEBUGIN_BIT	1
    
    <b>DEFINE </b>DEBUG_BAUD	38400
    <b>DEFINE </b>DEBUG_MODE	0
    
    INTCON = %10101000      <font color="#000080"><i>'
    </i></font>OSCCON = %01110000      <font color="#000080"><i>'set for 8mhz internal
    </i></font>CMCON0 = 7              <font color="#000080"><i>'TURN COMPARITORS OFF
    </i></font>ANSEL  = %00000000      <font color="#000080"><i>'Set A/D OFF
    </i></font>ADCON0 = %00000000      <font color="#000080"><i>'Analog converter OFF 
    </i></font>TRISIO = %010100        <font color="#000080"><i>'Set GSIO 4 and 2 to INPUT, others to OUTPUT
    </i></font>OPTION_REG = %11000010
    T1CON  = %00110001
    T2CON  = %01001110
    CCP1CON = %00000101
    
    risetime <b>VAR WORD       </b><font color="#000080"><i>;used for pulse width measure start of pw
    
    </i></font>falltime <b>VAR WORD       </b><font color="#000080"><i>;time at end of pulse width
    </i></font>falltime_l <b>VAR </b>falltime.Byte0
    falltime_h <b>VAR </b>falltime.Byte1
    risetime_l <b>VAR </b>risetime.Byte0
    risetime_h <b>VAR </b>risetime.Byte1
    pulsewidth <b>VAR WORD
    </b>pulsewidth_l <b>VAR </b>pulsewidth.Byte0
    pulsewidth_h <b>VAR </b>pulsewidth.Byte1
    
    ServoOut <b>VAR </b>GPIO.1
    ServoOut = 0
    pulse <b>VAR BYTE
    
    </b>TMR0 = 0
    pulse = 255
    bittest <b>VAR BIT
    
    ASM
    </b><font color="#008000">INT_LIST  macro    </font><font color="#000080"><i>; IntSource,        Label,  Type, ResetFlag?
            </i></font><font color="#008000">INT_Handler   TMR0_INT,   PulseOut,   ASM,  yes
            INT_Handler   TMR2_INT,   period,     ASM,  yes
            INT_Handler   CCP1_INT,   PWMeasure,  ASM,  yes
        endm
        INT_CREATE               </font><font color="#000080"><i>; Creates the interrupt processor
    
        </i></font><font color="#008000">INT_ENABLE  TMR0_INT     </font><font color="#000080"><i>; Enable pulseout interrupts  
        </i></font><font color="#008000">INT_ENABLE  TMR2_INT     </font><font color="#000080"><i>; enable period interrupt (20ms)
        </i></font><font color="#008000">INT_ENABLE  CCP1_INT     </font><font color="#000080"><i>; enable interrupt to increment pulse width (test)
    </i></font><b>ENDASM
        PAUSE </b>200
    Main:
        <b>PAUSE </b>20
        <font color="#000080"><i>;debug dec pulsewidth,&quot; &quot;,10,13
        </i></font>pulse = ((pulsewidth * 8)/10)-167 <font color="#000080"><i>;scale to fit into a byte
        </i></font>pulse = 255 - pulse               <font color="#000080"><i>;reverse the stick 
        
    
    </i></font><b>GOTO </b>Main
    
    <font color="#000080"><i>'---[TMR0_INT - interrupt handler]------------------------------------------
    
    </i></font><b>ASM
    </b><font color="#008000">PulseOut
        btfsc _bittest      </font><font color="#000080"><i>;test status of bittest bit
        </i></font><font color="#008000">goto $+7            </font><font color="#000080"><i>;if high skip 7 lines
        </i></font><font color="#008000">bcf INTCON,5        </font><font color="#000080"><i>;stop timer
        </i></font><font color="#008000">movf _pulse,w       </font><font color="#000080"><i>;load TMR0 with value of pulse variable
        </i></font><font color="#008000">movwf TMR0
        bsf _bittest        </font><font color="#000080"><i>;set bittest bit, indicating we are on second half
        </i></font><font color="#008000">bsf INTCON,5        </font><font color="#000080"><i>;start timer again for second interrupt
        </i></font><font color="#008000">goto $+3            </font><font color="#000080"><i>;skip to return from interrupt
        </i></font><font color="#008000">bcf INTCON,5        </font><font color="#000080"><i>;stop timer
        </i></font><font color="#008000">bcf _ServoOut       </font><font color="#000080"><i>;bring ServoOut pin low for end of pulse width
        </i></font><font color="#008000">INT_RETURN
    
    
    
    </font><b>ENDASM
    </b><font color="#000080"><i>'---[TMR2_INT - interrupt handler]------------------------------------------
    </i></font><b>ASM
    </b><font color="#008000">period
        movlw d'72'          </font><font color="#000080"><i>;fine tune timer2 period
        </i></font><font color="#008000">movwf TMR2    
        bcf INTCON,2         </font><font color="#000080"><i>;clear timer flag if set
        </i></font><font color="#008000">movlw d'17'          </font><font color="#000080"><i>;set timer0 first 1ms time base
        </i></font><font color="#008000">movwf TMR0    
        bsf INTCON,5         </font><font color="#000080"><i>;enable timer0 interrupt 
        </i></font><font color="#008000">bsf _ServoOut        </font><font color="#000080"><i>;set ServoOut pin high (begin pulse width)
        </i></font><font color="#008000">bcf _bittest
        INT_RETURN
    </font><b>ENDASM
    </b><font color="#000080"><i>'---[CCP1_INT - interrupt handler]------------------------------------------
    </i></font><b>ASM
    
    </b><font color="#008000">PWMeasure
    
        BTFSS   CCP1CON, CCP1M0 </font><font color="#000080"><i>; Check for falling edge watch
        </i></font><font color="#008000">GOTO    FALL_EDGE       </font><font color="#000080"><i>; Go pick up the falling edge
        </i></font><font color="#008000">MOVF    CCPR1L,W        </font><font color="#000080"><i>; else store leading edge value
        </i></font><font color="#008000">MOVWF   _risetime_l         </font><font color="#000080"><i>; into 16 bit word risetime
        </i></font><font color="#008000">MOVF    CCPR1H,W
        MOVWF   _risetime_h
        BCF     CCP1CON, CCP1M0 </font><font color="#000080"><i>; Now capture the trailing edge
        </i></font><font color="#008000">GOTO    ISR_2           </font><font color="#000080"><i>; Exit the interrupt service routine
            
    </i></font><font color="#008000">FALL_EDGE:
        BSF     CCP1CON, CCP1M0 </font><font color="#000080"><i>; Re-set for trailing edge capture
        </i></font><font color="#008000">MOVF    CCPR1L,W        </font><font color="#000080"><i>; Store the captured value into
        </i></font><font color="#008000">MOVWF   _falltime_l         </font><font color="#000080"><i>; falltime_l and ...
        </i></font><font color="#008000">MOVF    CCPR1H,W
        MOVWF   _falltime_h       </font><font color="#000080"><i>;             ... falltime_h
        ;
        ; 16 bit subtract 
        ;     falltime = falltime - risetime
        ;
        </i></font><font color="#008000">SUB16   _falltime, _risetime   </font><font color="#000080"><i>;do 16 bit subtraction to find width
        </i></font><font color="#008000">movf _falltime_l,w
        movwf _pulsewidth_l
        movf _falltime_h,w
        movwf _pulsewidth_h
    ISR_2
        INT_RETURN
    
    
    </font><b>ENDASM
    
    
    </b></code></pre><!--EndFragment--></body>
    </html>

  8. #8
    Join Date
    May 2007
    Posts
    604


    Did you find this post helpful? Yes | No

    Default

    Firstly, your PIC16F887 is a 14-bit core device and the ASM manual is here MPASM™ Assembler, MPLINK™ Object
    Linker MPLIB™ Object Librarian User’s Guide


    Next thing you really need to download is the data sheet PIC16F887

    Also, download this FREE book and read it to understand how a PIC works PIC Microcontrollers

    The last one is the most useful - I pointed this out to you in an earlier post.

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


    Did you find this post helpful? Yes | No

    Default

    Ken,
    I do not know anything about RC stuff, but here is something to play with.
    Code:
    <font color="#000080"><i>'16F887 INT RUPT
    '44 PIN DEMO BOARD
       </i></font>@ <font color="#0000FF"><b>__config _CONFIG1</b></font>, <font color="#0000FF"><b>_INTRC_OSC_NOCLKOUT </b></font>&amp; <font color="#0000FF"><b>_WDT_ON </b></font>&amp; <font color="#0000FF"><b>_MCLRE_OFF </b></font>&amp; <font color="#0000FF"><b>_LVP_OFF </b></font>&amp; <font color="#0000FF"><b>_CP_OFF
       INTCON</b></font>.<font color="#800000"><b>5 </b></font>= <font color="#800000"><b>1    </b></font><font color="#000080"><i>'ENABLE TMR0  DATA SHEET SECTION 14.3.2
       </i></font><font color="#0000FF"><b>OSCCON </b></font>= <font color="#800000"><b>%01110000 </b></font><font color="#000080"><i>'8 Mhz
       </i></font><font color="#0000FF"><b>OPTION_REG </b></font>= <font color="#800000"><b>%10000111  </b></font><font color="#000080"><i>' 1:256 PRESCALE
       </i></font><font color="#FF0000"><b>ON INTERRUPT GOTO </b></font><font color="#0000FF"><b>TLOOP
       CNT  </b></font><font color="#FF0000"><b>VAR BYTE
       </b></font><font color="#0000FF"><b>D    </b></font><font color="#FF0000"><b>VAR BYTE
       </b></font><font color="#0000FF"><b>D </b></font>= <font color="#800000"><b>0
       
       </b></font><font color="#0000FF"><b>START</b></font>:
       <font color="#FF0000"><b>FOR </b></font><font color="#0000FF"><b>CNT </b></font>= <font color="#800000"><b>0 </b></font><font color="#FF0000"><b>TO </b></font><font color="#800000"><b>150
       </b></font><font color="#FF0000"><b>PWM </b></font><font color="#0000FF"><b>PORTD</b></font>.<font color="#800000"><b>7</b></font>,<font color="#0000FF"><b>D</b></font>,<font color="#800000"><b>100
       </b></font><font color="#0000FF"><b>D </b></font>= <font color="#0000FF"><b>D </b></font>+ <font color="#800000"><b>2
       </b></font><font color="#FF0000"><b>NEXT </b></font><font color="#0000FF"><b>CNT
       </b></font><font color="#FF0000"><b>GOTO </b></font><font color="#0000FF"><b>START
       
       </b></font><font color="#FF0000"><b>DISABLE
       </b></font><font color="#0000FF"><b>TLOOP</b></font>:
       <font color="#0000FF"><b>INTCON</b></font>.<font color="#800000"><b>2</b></font>=<font color="#800000"><b>0 </b></font><font color="#000080"><i>' DATA SHEET SECTION 14.3.2
       </i></font><font color="#FF0000"><b>TOGGLE </b></font><font color="#0000FF"><b>PORTD</b></font>.<font color="#800000"><b>4
       </b></font><font color="#FF0000"><b>RESUME
       ENABLE
    </b></font>
    Dave
    Always wear safety glasses while programming.

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


    Did you find this post helpful? Yes | No

    Default

    Dave
    Always wear safety glasses while programming.

Similar Threads

  1. PBP Book
    By Bruce in forum Off Topic
    Replies: 83
    Last Post: - 4th October 2021, 13:55
  2. PBP Extensions, What are they?
    By PJALM in forum PBP Extensions
    Replies: 9
    Last Post: - 28th September 2021, 12: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, 20:01
  4. Newby- PBP wont compile for 18F (MPLAB)
    By jd76duke in forum mel PIC BASIC Pro
    Replies: 1
    Last Post: - 18th December 2005, 00:30
  5. Making PBP code more modular
    By forgie in forum General
    Replies: 30
    Last Post: - 25th October 2005, 17:24

Members who have read this thread : 2

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