Chief Delphi

Chief Delphi (http://www.chiefdelphi.com/forums/index.php)
-   Programming (http://www.chiefdelphi.com/forums/forumdisplay.php?f=51)
-   -   need help with our default code (http://www.chiefdelphi.com/forums/showthread.php?t=54196)

coolguybigt 15-02-2007 15:30

need help with our default code
 
Our program and the motor is not working correctly. Our program is not going to the victor 884 and the joystick is not controlling th motor. Well, it only controls one side at a time.

If you have any site or code that could help?
please send it to us.

Thanks

fallen751 15-02-2007 15:48

Re: need help with our default code
 
alright, first post what code you have on there now. tell us what configuration your running the motors in, so 2-wheel tank drive, or 4 wheel tank drive or what. Tell us if you want to use one or two joysticks to control your robot, and after that we can tell you what you need to do.

coolguybigt 15-02-2007 19:39

Re: need help with our default code
 
we kind of got it to run
but our 2 motor are runing 2 different way
it is useing pwm 1 and 2
this is the code we are useing
this is the code w
Code:

/*******************************************************************************
* FILE NAME: user_routines.c <FRC VERSION>
*
* DESCRIPTION:
*  This file contains the default mappings of inputs 
*  (like switches, joysticks, and buttons) to outputs on the RC. 
*
* USAGE:
*  You can either modify this file to fit your needs, or remove it from your
*  project and replace it with a modified copy.
*
*******************************************************************************/

#include <stdio.h>

#include "ifi_aliases.h"
#include "ifi_default.h"
#include "ifi_utilities.h"
#include "user_routines.h"
#include "user_Serialdrv.h"

extern unsigned char aBreakerWasTripped;

/*** DEFINE USER VARIABLES AND INITIALIZE THEM HERE ***/
/* EXAMPLES: (see MPLAB C18 User's Guide, p.9 for all types)
unsigned char wheel_revolutions = 0; (can vary from 0 to 255)
unsigned int  delay_count = 7;      (can vary from 0 to 65,535)
int          angle_deviation = 142; (can vary from -32,768 to 32,767)
unsigned long very_big_counter = 0;  (can vary from 0 to 4,294,967,295)
*/

/*******************************************************************************
* FUNCTION NAME: Limit_Switch_Max
* PURPOSE:      Sets a PWM value to neutral (127) if it exceeds 127 and the
*                limit switch is on.
* CALLED FROM:  this file
* ARGUMENTS:   
*    Argument      Type            IO  Description
*    --------      -------------    --  -----------
*    switch_state  unsigned char    I    limit switch state
*    *input_value  pointer          O  points to PWM byte value to be limited
* RETURNS:      void
*******************************************************************************/
void Limit_Switch_Max(unsigned char switch_state, unsigned char *input_value)
{
  if (switch_state == CLOSED)
  {
    if(*input_value > 127)
      *input_value = 127;
  }
}


/*******************************************************************************
* FUNCTION NAME: Limit_Switch_Min
* PURPOSE:      Sets a PWM value to neutral (127) if it's less than 127 and the
*                limit switch is on.
* CALLED FROM:  this file
* ARGUMENTS:   
*    Argument      Type            IO  Description
*    --------      -------------    --  -----------
*    switch_state  unsigned char    I    limit switch state
*    *input_value  pointer          O  points to PWM byte value to be limited
* RETURNS:      void
*******************************************************************************/
void Limit_Switch_Min(unsigned char switch_state, unsigned char *input_value)
{
  if (switch_state == CLOSED)
  {
    if(*input_value < 127)
      *input_value = 127;
  }
}


/*******************************************************************************
* FUNCTION NAME: Limit_Mix
* PURPOSE:      Limits the mixed value for one joystick drive.
* CALLED FROM:  Default_Routine, this file
* ARGUMENTS:   
*    Argument            Type    IO  Description
*    --------            ----    --  -----------
*    intermediate_value    int    I   
* RETURNS:      unsigned char
*******************************************************************************/
unsigned char Limit_Mix (int intermediate_value)
{
  static int limited_value;
 
  if (intermediate_value < 2000)
  {
    limited_value = 2000;
  }
  else if (intermediate_value > 2254)
  {
    limited_value = 2254;
  }
  else
  {
    limited_value = intermediate_value;
  }
  return (unsigned char) (limited_value - 2000);
}


/*******************************************************************************
* FUNCTION NAME: User_Initialization
* PURPOSE:      This routine is called first (and only once) in the Main function. 
*                You may modify and add to this function.
* CALLED FROM:  main.c
* ARGUMENTS:    none
* RETURNS:      void
*******************************************************************************/
void User_Initialization (void)
{
  Set_Number_of_Analog_Channels(SIXTEEN_ANALOG);    /* DO NOT CHANGE! */

/* FIRST: Set up the I/O pins you want to use as digital INPUTS. */
  digital_io_01 = digital_io_02 = digital_io_03 = digital_io_04 = OUTPUT;
  digital_io_05 = digital_io_06 = digital_io_07 = digital_io_08 = INPUT;
  digital_io_09 = digital_io_10 = digital_io_11 = digital_io_12 = INPUT;
  digital_io_13 = digital_io_14 = digital_io_15 = digital_io_16 = INPUT;
  digital_io_18 = INPUT;  /* Used for pneumatic pressure switch. */
    /*
    Note: digital_io_01 = digital_io_02 = ... digital_io_04 = INPUT;
          is the same as the following:

          digital_io_01 = INPUT;
          digital_io_02 = INPUT;
          ...
          digital_io_04 = INPUT;
    */

/* SECOND: Set up the I/O pins you want to use as digital OUTPUTS. */
  digital_io_17 = OUTPUT;    /* Example - Not used in Default Code. */

/* THIRD: Initialize the values on the digital outputs. */
  rc_dig_out17 = 0;

/* FOURTH: Set your initial PWM values.  Neutral is 127. */
  pwm01 = pwm02 = pwm03 = pwm04 = pwm05 = pwm06 = pwm07 = pwm08 = 127;
  pwm09 = pwm10 = pwm11 = pwm12 = pwm13 = pwm14 = pwm15 = pwm16 = 127;

/* FIFTH: Set your PWM output types for PWM OUTPUTS 13-16.
  /*  Choose from these parameters for PWM 13-16 respectively:              */
  /*    IFI_PWM  - Standard IFI PWM output generated with Generate_Pwms(...) */
  /*    USER_CCP - User can use PWM pin as digital I/O or CCP pin.          */
  Setup_PWM_Output_Type(IFI_PWM,IFI_PWM,IFI_PWM,IFI_PWM);

  /*
    Example: The following would generate a 40KHz PWM with a 50% duty cycle on the CCP2 pin:

        CCP2CON = 0x3C;
        PR2 = 0xF9;
        CCPR2L = 0x7F;
        T2CON = 0;
        T2CONbits.TMR2ON = 1;

        Setup_PWM_Output_Type(USER_CCP,IFI_PWM,IFI_PWM,IFI_PWM);
  */

  /* Add any other initialization code here. */
 
  Putdata(&txdata);            /* DO NOT CHANGE! */

  Serial_Driver_Initialize();

  printf("IFI 2006 User Processor Initialized ...\r");  /* Optional - Print initialization message. */

  User_Proc_Is_Ready();        /* DO NOT CHANGE! - last line of User_Initialization */
}

/*******************************************************************************
* FUNCTION NAME: Process_Data_From_Master_uP
* PURPOSE:      Executes every 26.2ms when it gets new data from the master
*                microprocessor.
* CALLED FROM:  main.c
* ARGUMENTS:    none
* RETURNS:      void
*******************************************************************************/
void Process_Data_From_Master_uP(void)
{
  static unsigned char i;

  Getdata(&rxdata);  /* Get fresh data from the master microprocessor. */

  Default_Routine();  /* Optional.  See below. */

  /* Add your own code here. (a printf will not be displayed when connected to the breaker panel unless a Y cable is used) */

  printf("Port1 Y %3d, X %3d, Fire %d, Top %d\r",pwm01,pwm05,p1_sw_trig,p1_sw_top);  /* printf EXAMPLE */

  Generate_Pwms(pwm13,pwm14,pwm15,pwm16);

  /* Example code to check if a breaker was ever tripped. */

  if (aBreakerWasTripped)
  {
    for (i=1;i<29;i++)
    {
      if (Breaker_Tripped(i))
        User_Byte1 = i;  /* Update the last breaker tripped on User_Byte1 (to demonstrate the use of a user byte)
                            Normally, you do something else if a breaker got tripped (ex: limit a PWM output)    */
    }
  }

  Putdata(&txdata);            /* DO NOT CHANGE! */
}

/*******************************************************************************
* FUNCTION NAME: Default_Routine
* PURPOSE:      Performs the default mappings of inputs to outputs for the
*                Robot Controller.
* CALLED FROM:  this file, Process_Data_From_Master_uP routine
* ARGUMENTS:    none
* RETURNS:      void
*******************************************************************************/
void Default_Routine(void)
{
 
 /*---------- Analog Inputs (Joysticks) to PWM Outputs-----------------------
  *--------------------------------------------------------------------------
  *  This maps the joystick axes to specific PWM outputs.
  */

  pwm01 = p1_y;
  pwm02 = p2_y; 
  pwm03 = p3_y; 
  pwm04 = p4_y; 
  pwm05 = p1_x; 
  pwm06 = p2_x; 
  pwm07 = p3_x; 
  pwm08 = p4_x; 
  pwm09 = p1_wheel;
  pwm10 = p2_wheel; 
  pwm11 = p3_wheel; 
  pwm12 = p4_wheel; 
 
 /*---------- 1 Joystick Drive ----------------------------------------------
  *--------------------------------------------------------------------------
  *  This code mixes the Y and X axis on Port 1 to allow one joystick drive.
  *  Joystick forward  = Robot forward
  *  Joystick backward = Robot backward
  *  Joystick right    = Robot rotates right
  *  Joystick left    = Robot rotates left
  *  Connect the right drive motors to PWM13 and/or PWM14 on the RC.
  *  Connect the left  drive motors to PWM15 and/or PWM16 on the RC.
  */ 
  pwm13 = pwm14 = Limit_Mix(2000 + p1_y + p1_x - 127);
  pwm15 = pwm16 = Limit_Mix(2000 + p1_y - p1_x + 127);
 
 /*---------- Buttons to Relays----------------------------------------------
  *--------------------------------------------------------------------------
  *  This default code maps the joystick buttons to specific relay outputs. 
  *  Relays 1 and 2 use limit switches to stop the movement in one direction.
  *  The & used below is the C symbol for AND                               
  */
  relay1_fwd = p1_sw_trig & rc_dig_in01;  /* FWD only if switch1 is not closed. */
  relay1_rev = p1_sw_top  & rc_dig_in02;  /* REV only if switch2 is not closed. */
  relay2_fwd = p2_sw_trig & rc_dig_in03;  /* FWD only if switch3 is not closed. */
  relay2_rev = p2_sw_top  & rc_dig_in04;  /* REV only if switch4 is not closed. */
  relay3_fwd = p3_sw_trig;
  relay3_rev = p3_sw_top;
  relay4_fwd = p4_sw_trig;
  relay4_rev = p4_sw_top;
  relay5_fwd = p1_sw_aux1;
  relay5_rev = p1_sw_aux2;
  relay6_fwd = p3_sw_aux1;
  relay6_rev = p3_sw_aux2;
  relay7_fwd = p4_sw_aux1;
  relay7_rev = p4_sw_aux2;
  relay8_fwd = !rc_dig_in18;  /* Power pump only if pressure switch is off. */
  relay8_rev = 0;
 
  /*---------- PWM outputs Limited by Limit Switches  ------------------------*/
 
  Limit_Switch_Max(rc_dig_in05, &pwm03);
  Limit_Switch_Min(rc_dig_in06, &pwm03);
  Limit_Switch_Max(rc_dig_in07, &pwm04);
  Limit_Switch_Min(rc_dig_in08, &pwm04);
  Limit_Switch_Max(rc_dig_in09, &pwm09);
  Limit_Switch_Min(rc_dig_in10, &pwm09);
  Limit_Switch_Max(rc_dig_in11, &pwm10);
  Limit_Switch_Min(rc_dig_in12, &pwm10);
  Limit_Switch_Max(rc_dig_in13, &pwm11);
  Limit_Switch_Min(rc_dig_in14, &pwm11);
  Limit_Switch_Max(rc_dig_in15, &pwm12);
  Limit_Switch_Min(rc_dig_in16, &pwm12);
 
 /*---------- ROBOT FEEDBACK LEDs------------------------------------------------
  *------------------------------------------------------------------------------
  *  This section drives the "ROBOT FEEDBACK" lights on the Operator Interface.
  *  The lights are green for joystick forward and red for joystick reverse.
  *  Both red and green are on when the joystick is centered.  Use the
  *  trim tabs on the joystick to adjust the center.   
  *  These may be changed for any use that the user desires.                     
  */   
 
  if (user_display_mode == 0) /* User Mode is OFF */
   
  { /* Check position of Port 1 Joystick */
    if (p1_y >= 0 && p1_y <= 56)
    {                    /* Joystick is in full reverse position */
      Pwm1_green  = 0;    /* Turn PWM1 green LED - OFF */
      Pwm1_red  = 1;      /* Turn PWM1 red LED  - ON  */
    }
    else if (p1_y >= 125 && p1_y <= 129)
    {                    /* Joystick is in neutral position */
      Pwm1_green  = 1;    /* Turn PWM1 green LED - ON */
      Pwm1_red  = 1;      /* Turn PWM1 red LED  - ON */
    }
    else if (p1_y >= 216 && p1_y <= 255)
    {                    /* Joystick is in full forward position*/
      Pwm1_green  = 1;    /* Turn PWM1 green LED - ON  */
      Pwm1_red  = 0;      /* Turn PWM1 red LED  - OFF */
    }
    else
    {                    /* In either forward or reverse position */
      Pwm1_green  = 0;    /* Turn PWM1 green LED - OFF */
      Pwm1_red  = 0;      /* Turn PWM1 red LED  - OFF */
    }  /*END Check position of Port 1 Joystick
   
    /* Check position of Port 2 Y Joystick
          (or Port 1 X in Single Joystick Drive Mode) */
    if (p2_y >= 0 && p2_y <= 56)
    {                    /* Joystick is in full reverse position */
      Pwm2_green  = 0;    /* Turn pwm2 green LED - OFF */
      Pwm2_red  = 1;      /* Turn pwm2 red LED  - ON  */
    }
    else if (p2_y >= 125 && p2_y <= 129)
    {                    /* Joystick is in neutral position */
      Pwm2_green  = 1;    /* Turn PWM2 green LED - ON */
      Pwm2_red  = 1;      /* Turn PWM2 red LED  - ON */
    }
    else if (p2_y >= 216 && p2_y <= 255)
    {                    /* Joystick is in full forward position */
      Pwm2_green  = 1;    /* Turn PWM2 green LED - ON  */
      Pwm2_red  = 0;      /* Turn PWM2 red LED  - OFF */
    }
    else
    {                    /* In either forward or reverse position */
      Pwm2_green  = 0;    /* Turn PWM2 green LED - OFF */
      Pwm2_red  = 0;      /* Turn PWM2 red LED  - OFF */
    }  /* END Check position of Port 2 Joystick */
   
    /* This drives the Relay 1 and Relay 2 "Robot Feedback" lights on the OI. */
    Relay1_green = relay1_fwd;    /* LED is ON when Relay 1 is FWD */
    Relay1_red = relay1_rev;      /* LED is ON when Relay 1 is REV */
    Relay2_green = relay2_fwd;    /* LED is ON when Relay 2 is FWD */
    Relay2_red = relay2_rev;      /* LED is ON when Relay 2 is REV */

    Switch1_LED = !(int)rc_dig_in01;
    Switch2_LED = !(int)rc_dig_in02;
    Switch3_LED = !(int)rc_dig_in03;
   
  } /* (user_display_mode = 0 ) (User Mode is OFF) */
 
  else  /* User Mode is On - displays data in OI 4-digit display*/
  {
    User_Mode_byte = backup_voltage*10; /* so that decimal doesn't get truncated. */
  } 

} /* END Default_Routine(); */


/******************************************************************************/
/******************************************************************************/
/******************************************************************************/


Mark McLeod 15-02-2007 20:43

Re: need help with our default code
 
To reverse one side do this:
pwm01 = p1_y;
pwm02 = 255-p2_y;

If that reverses the wrong side then do the opposite:
pwm01 = 255-p1_y;
pwm02 = p2_y;

Bharat Nain 15-02-2007 21:42

Re: need help with our default code
 
Quote:

Originally Posted by Mark McLeod (Post 579097)
To reverse one side do this:
pwm01 = p1_y;
pwm02 = 255-p2_y;

If that reverses the wrong side then do the opposite:
pwm01 = 255-p1_y;
pwm02 = p2_y;

Or you can switch the leads on the speed controller of the motor which is going in reverse direction.

coolguybigt 15-02-2007 23:21

Re: need help with our default code
 
where do i put those code in my set of code?

Mark McLeod 15-02-2007 23:42

Re: need help with our default code
 
Towards the bottom of what you posted...
Code:

void Default_Routine(void)
{
 
 /*---------- Analog Inputs (Joysticks) to PWM Outputs-----------------------
  *--------------------------------------------------------------------------
  *  This maps the joystick axes to specific PWM outputs.
  */
 
  pwm01 = p1_y;
  pwm02 = 255-p2_y
  pwm03 = p3_y; 
  pwm04 = p4_y; 
  pwm05 = p1_x; 
  pwm06 = p2_x; 
  pwm07 = p3_x; 
  pwm08 = p4_x; 
  pwm09 = p1_wheel;
  pwm10 = p2_wheel; 
  pwm11 = p3_wheel; 
  pwm12 = p4_wheel;


Bharat's suggestion is also an easy way to do it.

coolguybigt 16-02-2007 09:08

Re: need help with our default code
 
thank for helping

coolguybigt 16-02-2007 09:22

Re: need help with our default code
 
the code that you guy give me did not help
the problem is that when we move our joystick
the 2 motor go different way
please help
p.s how do you switch the leads on the speed controller

Alan Anderson 16-02-2007 09:43

Re: need help with our default code
 
Quote:

Originally Posted by coolguybigt (Post 579405)
p.s how do you switch the leads on the speed controller

1. Remove the wires going from the Victor speed controller to the motor.

2. Swap the red and black wires.

3. Reattach the wires to the Victor speed controller.

This will reverse the direction that the motor runs. That's what you want, right?

coolguybigt 16-02-2007 09:45

Re: need help with our default code
 
if i change the wire
will it burn out the victor?

Alan Anderson 16-02-2007 09:51

Re: need help with our default code
 
If the Victor is working with the output connected the way it is now, it should still work after the output wires are swapped.

(Please don't ask the same question in both the public forum and a private message at the same time.)

coolguybigt 16-02-2007 12:29

Re: need help with our default code
 
i am srry
i am new to this

coolguybigt 19-02-2007 09:33

Re: need help with our default code
 
how do you make you motor go slower

Alan Anderson 19-02-2007 10:17

Re: need help with our default code
 
To reduce the speed of a motor connected to a Victor speed controller, send the Victor a pwm value closer to 127. To stop the motor entirely, send it a 127. To make it really stop the motor, right now, also configure the Victor to use dynamic braking by changing the brake jumper from pins B and C to pins A and B.


All times are GMT -5. The time now is 11:26.

Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Copyright © Chief Delphi