Strange problem with 'pauseus' command


Results 1 to 6 of 6

Threaded View

  1. #4
    Join Date
    May 2013
    Location
    australia
    Posts
    2,695


    Did you find this post helpful? Yes | No

    Default Re: Strange problem with 'pauseus' command

    Code:
    FOR PERIOD_COUNT = 1 TO 187 '20mS PERIOD
    			IF PERIOD_COUNT > PULSE THEN 'MAKE LINE LOW FOR REST OF 20mS PERIOD
    				SERVO = 0 'MAKE SURE SERVO SIGNAL IS NOW LOW
    			ELSE
    				SERVO = 1 'SERVO SIGNAL LINE HIGH FOR 1.0 OR 2.0mS			
    			ENDIF
    					
            NEXT PERIOD_COUNT
    this for next loop takes 45us to execute when PERIOD_COUNT is a word var even without the pause, it severly limits resolution


    if you do it this way the resolution is 1 uS or thereabouts


    Code:
    
    
    '****************************************************************
    '*  Name    : hobby_servo.BAS                                   *
    '*  Author  : richard                                           *
    '*  Notice  : Copyright (c) 2016 [select VIEW...EDITOR OPTIONS] *
    '*          : All Rights Reserved                               *
    '*  Date    : 11/19/2016                                        *
    '*  Version : 1.0                                               *
    '*  Notes   : 12f683                                            *
    '*          :                                                   *
    '****************************************************************
    #CONFIG
        __config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _MCLRE_ON & _CP_OFF
    #ENDCONFIG
    DEFINE OSC 8 'LETS PBP KNOW WE WILL BE RUNNING AT 8MHZ
    include "dt_ints-14.bas"
    include "REENTERPBP.bas" 
    
    'PIN DEFENITIONS
    'GP2 USED TO DRIVE SERVO (SIGNAL LINE)
    'GP3 USED FOR MCLR AND ICSP PROGRAMMING
    'GP4 USED FOR TRIGGER INPUT
    'GP5 USED FOR LED
    'SET UP THE  REGISTERS
    OSCCON = %01110001  '8MHZ INTERNAL CLOCK USED
    CMCON0 = %00000111 'CIN PINS ARE I/O, COUT PIN IS I/O
    OPTION_REG=%01010111      ;set prescaler and assign it to tmr0
    define NO_WDT 1
    TRISIO = %00011011 'GP5 AND GP2 ARE OUTPUTS, THE REST ARE INPUTS 
    ANSEL = 0 'NO ANALOG PORTS - ALL DIGITAL
    WPU = %00010000 'GP4 WEAK PULL UP ENABLED. GP3 WEAK PULL UP AUTOMATICALLY ENABLED
        'AS THE PIN IS DEFINED AS MCLR
    @Timer1 = TMR1L ; map timer1 registers to a word variable
    Timer1 VAR WORD EXT 
    t1con=0
      
    wsave   VAR BYTE    $20     SYSTEM      ' location for W if in bank0
    ;wsave   VAR BYTE    $70     SYSTEM      ' alternate save location for W 
                                             ' if using $70, comment wsave1-3
    ' --- IF any of these three lines cause an error ?? ------------------------
    '       Comment them out to fix the problem ----
    ' -- Which variables are needed, depends on the Chip you are using -- 
    wsave1  VAR BYTE    $A0     SYSTEM      ' location for W if in bank1
    'wsave2  VAR BYTE    $120    SYSTEM      ' location for W if in bank2
    'Wsave3  VAR BYTE    $1A0    SYSTEM      ' location for W if in bank3
    ' --------------------------------------------------------------------------
     
     
     
    
    asm
    INT_LIST macro
          INT_Handler   TMR0_INT,   _serv,    PBP,  yes
          INT_Handler   TMR1_INT,   _st,      PBP,  yes
          endm
          INT_CREATE
    ENDASM 
    'PIN ALIASES
    SERVO VAR GPIO.2
    TRIGGER VAR GPIO.4
    LED VAR GPIO.5
                                                                                                  
    'VARIABLES                                                                                     
    servo_t VAR word 'pulse TIME  in us
                                                                                                   
    SERVO = 0 'MAKE SURE NO SIGNAL                                                                                
    LED = 0 'MAKE SURE LED IS OFF
    @ int_enable  TMR0_INT
    @ int_enable  TMR1_INT                                                                                               
    MAIN:
      IF TRIGGER = 1 THEN 'CLOSE THE DAMPER
       servo_t = 2000 '2.0mS PULSE TO SERVO
       LED = 1 'TURN ON LED
      ELSE 'OPEN THE DAMPER 
       servo_t = 1000'1.0mS PULSE TO SERVO
       LED = 0 'TURN OFF LED
      ENDIF
     goto main                                                                                  
    END
     
    serv:
    tmr0=tmr0+100
    
    Timer1 = -servo_t
    pir1.0=0
    t1con=$11
    SERVO =1 
       
    @ int_return
     
     
    st:
    t1con=0
    servo=0
    @ int_return
    Last edited by richard; - 19th November 2016 at 03:37.
    Warning I'm not a teacher

Similar Threads

  1. Strange problem with button command and loop
    By CuriousOne in forum mel PIC BASIC Pro
    Replies: 5
    Last Post: - 14th April 2013, 08:10
  2. A strange problem
    By mombasa in forum mel PIC BASIC Pro
    Replies: 11
    Last Post: - 25th January 2012, 22:08
  3. Very strange problem...
    By alanmcf in forum mel PIC BASIC Pro
    Replies: 5
    Last Post: - 7th May 2011, 07:28
  4. strange problem 12f675
    By peterdeco1 in forum mel PIC BASIC Pro
    Replies: 1
    Last Post: - 5th July 2007, 14:47
  5. PAUSEUS command
    By AndrewC in forum General
    Replies: 4
    Last Post: - 10th February 2006, 04:00

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