示例#1
0
void poll_MM(void)
{
  ///Temporary variables for magnetometer readings
  int16_t x, y, z;
  uint8_t tmp;
  
  ///Send the poll command
  send_MM_cmd("*00P\r");
  
  x = ((int16_t)receive_MM()) << 8;
  x &= 0xFF00;
  x |= (int16_t)receive_MM();
  
  
  y = ((int16_t)receive_MM()) << 8;
  y &= 0xFF00;
  y |= (int16_t)receive_MM();
  
  z = ((int16_t)receive_MM()) << 8;
  z &= 0xFF00;
  z |= (int16_t)receive_MM();
  
  receive_MM();
  
  char buf[100];
  sprintf(buf,"%d %d %d\r",  x, y, z);
  send_preflight(buf, strlen(buf));
    
  ///Convert the readings to Gauss
  Current_state.mm.B_x = ((float) x) / 15000;
  Current_state.mm.B_y = ((float) y) / 15000;
  Current_state.mm.B_z = ((float) z) / 15000;
}
示例#2
0
int main(void)
{
    
    /// Define Variables to store Magnetic field
//    char array[40];
//    char array1[40];
//    char array2[40];

   
    
    
    /// Blink LED to show that program is successfully running
     DDRA = 0xF0;
     PORTA = 0xF0;
     _delay_ms(500);
     PORTA = 0x00;
     _delay_ms(500);
     PORTA = 0xF0;
     _delay_ms(500);
     PORTA = 0x00;
     _delay_ms(500);
    
    
    /// Inittialise UART0 for Transmission to terminal
     init_UART0();
    
    
    /// Transmit "Hello" String
     transmit_UART0('H');
     transmit_UART0('e');
     transmit_UART0('l');
     transmit_UART0('l');
     transmit_UART0('o');

    
//     sprintf(array1,"\tThis is PRATHAM's OBC-Master code...");
//     sprintf(array2,"\rCurrent MagnetoMeter and Torquer state is =\t");
//     transmit_string_UART0(array1);
//     transmit_string_UART0(array2);
    
    /// Configure the Magnetometer
     init_UART_MM();
    
    /// Configure the Torquer
     configure_torquer();
    
    
    /// Define 3 strings for storing Magnetometer field values
     char sx[20];
     char sy[20];
     char sz[20];
    
    
    Time = 0;
//    timer_reset_teo_sec();
    
       while (1)
       {
           /// check for 2 seconds
//           if(tot_overflow >= 30)
//           {
//               Time += 2;
//               reset_PWM();
//               send_MM_cmd("*00P\r");
//               poll_MM();
//               TCNT1 = 0;
//               tot_overflow = 0;
//           }
           
           /// Read Magmeter every time Simulink sends something whether 0 or non-zero
//           read_MM();
           
           Bx=(int16_t)receive_MM();
           Bx=(Bx<<8);
           Bx &= 0xFF00;
           Bx|=(int16_t)receive_MM();
           
           By=(int16_t)receive_MM();
           By=(By<<8); By &= 0xFF00;
           By|=(int16_t)receive_MM();
           
           Bz=(int16_t)receive_MM();
           Bz=(Bz<<8);
           Bz &= 0xFF00;
           Bz|=(int16_t)receive_MM();
           
           /// Receive carriage return and ignore
           receive_MM();
           
           /// when atleast one of the values is non-zero, execute the control Law
           if (Bx !=0x00 || By != 0x00 || Bz != 0x00)
           {
               /// Apply control Law
               control();
               set_PWM();
               
               
               
               /// Transmit Magnetic field Data to terminal
               sprintf(sx,"%d",Bx);
               transmit_UART0('X');
               transmit_string_UART0(sx);
               transmit_UART0(' ');
               
               sprintf(sy,"%d",By);
               transmit_UART0('Y');
               transmit_string_UART0(sy);
               transmit_UART0(' ');
               
               sprintf(sz,"%d",Bz);
               transmit_UART0('Z');
               transmit_string_UART0(sz);
               transmit_UART0(' ');
               transmit_UART0('\r');
               ////////////////////////////////////////////
               
               sprintf(sx,"%d",vg[0]);
               transmit_UART0('A');
               transmit_string_UART0(sx);
               transmit_UART0(' ');
               
               sprintf(sx,"%d",vg[1]);
               transmit_UART0('B');
               transmit_string_UART0(sx);
               transmit_UART0(' ');
               
               sprintf(sx,"%d",vg[2]);
               transmit_UART0('C');
               transmit_string_UART0(sx);
               transmit_UART0(' ');
               transmit_UART0('\r');
               
               ////////////////////////////
               
//               sprintf(sx,"%d",norm_vect);
//               transmit_UART0('D');
//               transmit_string_UART0(sx);
//               transmit_UART0(' ');
//               transmit_UART0('\r');
               
               ///////////////////////////
               
//               sprintf(sx,"%d",Bdot[0]);
//               transmit_UART0('P');
//               transmit_string_UART0(sx);
//               transmit_UART0(' ');
//               transmit_UART0('\r');
//
//               sprintf(sy,"%d",Bdot[1]);
//               transmit_UART0('Q');
//               transmit_string_UART0(sy);
//               transmit_UART0(' ');
//               transmit_UART0('\r');
//
//               sprintf(sz,"%d",Bdot[2]);
//               transmit_UART0('R');
//               transmit_string_UART0(sz);
//               transmit_UART0(' ');
//               transmit_UART0('\r');
//               
//               //////////////////////////
//               
//               sprintf(sx,"%d",temp[0]);
//               transmit_UART0('L');
//               transmit_string_UART0(sx);
//               transmit_UART0(' ');
//               transmit_UART0('\r');
//               
//               sprintf(sy,"%d",temp[1]);
//               transmit_UART0('M');
//               transmit_string_UART0(sy);
//               transmit_UART0(' ');
//               transmit_UART0('\r');
//               
//               sprintf(sz,"%d",temp[2]);
//               transmit_UART0('N');
//               transmit_string_UART0(sz);
//               transmit_UART0(' ');
//               transmit_UART0('\r');
               
//               sprintf(sz,"%d",temp);
//               transmit_UART0('M');
//               transmit_string_UART0(sz);
//               transmit_UART0(' ');
//               transmit_UART0('\r');
               
               
               
//                              Current_state.pwm.x_dir = 0;
//               Current_state.pwm.y_dir = 0;
//               Current_state.pwm.z_dir = 0;
               
               
               /// Transmit Torquer Current Data to the Terminal
               sprintf(sx,"%d",Current_state.pwm.x);
               transmit_UART0('X');
               transmit_string_UART0(sx);
               transmit_UART0(' ');
               
               sprintf(sy,"%d",Current_state.pwm.y);
               transmit_UART0('Y');
               transmit_string_UART0(sy);
               transmit_UART0(' ');
               
               sprintf(sz,"%d",Current_state.pwm.z);
               transmit_UART0('Z');
               transmit_string_UART0(sz);
               transmit_UART0(' ');
               transmit_UART0('\r');
               
               
//               
               
               
               
           }
           
           
           
           
       }
    return 0;  
}
示例#3
0
int main(void)
{
    
    /// Define Variables to store Magnetic field
    char array[40];
    char array1[40];
    char array2[40];
    char array3[40];
    

    int16_t Bx;
    int16_t By;
    int16_t Bz;
    
    
    /// Blink LED to show that program is successfully running
     DDRA = 0xF0;
     PORTA = 0xF0;
     _delay_ms(1000);
     PORTA = 0x00;
     _delay_ms(1000);
     PORTA = 0xF0;
     _delay_ms(1000);
     PORTA = 0x00;
     _delay_ms(1000);
    
    
    /// Inittialise UART0 for Transmission to terminal
     init_UART0();
//    init_UART1();
//    
    
    /// Transmit "Hello" String
     transmit_UART0('\r');
     transmit_UART0('\r');
     transmit_UART0('H');
     transmit_UART0('e');
     transmit_UART0('l');
     transmit_UART0('l');
     transmit_UART0('o');
    
     sprintf(array,"\t..This is IITB's Student Satellite...\r");
     transmit_string_UART0(array);
    
     sprintf(array1,"\tThis is PRATHAM's OBC-Master code...");
     sprintf(array2,"\rCurrent MagnetoMeter state is =\t");
     sprintf(array3,"\rGenerating Torquer Current for =\t");
    
     transmit_string_UART0(array1);
//     transmit_string_UART0(array2);
//     transmit_string_UART0(array3);
    
    
    
    
    
    /// Initialise UART1 for Magnetometer Reception of Data and Transmission of Poll
     init_UART_MM();
    /// Configure the torquer to output the required current values
     configure_torquer();
    
    
    /// Define 3 strings for storing Magnetometer field values
     char sx[2];
     char sy[2];
     char sz[2];
    
    

    float A[4] = {1,0.75,0.50,0.25};
    timer_init();
    /// Start while loop
	   while (1)
       {
          

           /// Receive and store Bx,By,Bz
           Bx=(int16_t)receive_MM();
           Bx=(Bx<<8);
           Bx &= 0xFF00;
           Bx|=(int16_t)receive_MM();
           
           By=(int16_t)receive_MM();
           By=(By<<8);
           By &= 0xFF00;
           By|=(int16_t)receive_MM();
           
           Bz=(int16_t)receive_MM();
           Bz=(Bz<<8);
           Bz &= 0xFF00;
           Bz|=(int16_t)receive_MM();
           
           /// Receive carriage return and ignore
           receive_MM();
           
           /// Transmit Carriage return
           transmit_UART0('\r');
           

           if (Bx != 0x00 || By != 0x00 || Bz != 0x00)
           {
               

           
           transmit_UART0('z');
           transmit_string_UART0(sz);
           transmit_UART0(' ');
           
           sprintf(sz,"%d",By);
           transmit_UART0('y');
           transmit_string_UART0(sz);
           transmit_UART0(' ');
       
           sprintf(sz,"%d",Bx);
           transmit_UART0('x');
           transmit_string_UART0(sz);
           transmit_UART0(' ');
           transmit_UART0('\r');
           
       
            
           transmit_string_UART0(array3);
           transmit_UART0(' ');
           transmit_UART0('X');
           transmit_UART0(' ');
           transmit_UART0('Y');
           transmit_UART0(' ');
           transmit_UART0('Z');
           transmit_UART0('\r');
        if (dir==0)
            dir=1;
        else
            dir=0;
           Current_state.pwm.x_dir = dir;
           Current_state.pwm.x = 32768*2*Bx/5225;
           Current_state.pwm.y_dir = dir;
           Current_state.pwm.y = 32768*By*2/5225;
           Current_state.pwm.z_dir = dir;
           Current_state.pwm.z = 32768*Bz*2/5225;
           set_PWM();
          

            }
      
}
    return 0;
}
示例#4
0
int main(void)
{
    
    /// Define Variables to store Magnetic field
    char array[40];
    char array1[40];
    char array2[40];

    int16_t Bx;
    int16_t By;
    int16_t Bz;
    
    
    /// Blink LED to show that program is successfully running
     DDRA = 0xF0;
     PORTA = 0xF0;
     _delay_ms(1000);
     PORTA = 0x00;
     _delay_ms(1000);
     PORTA = 0xF0;
     _delay_ms(1000);
     PORTA = 0x00;
     _delay_ms(1000);
    
    
    /// Inittialise UART0 for Transmission to terminal
     init_UART0();
    
    
    /// Transmit "Hello" String
     transmit_UART0('\r');
     transmit_UART0('\r');
     transmit_UART0('H');
     transmit_UART0('e');
     transmit_UART0('l');
     transmit_UART0('l');
     transmit_UART0('o');

    
     sprintf(array1,"\tThis is PRATHAM's OBC-Master code...");
     sprintf(array2,"\rCurrent MagnetoMeter state is =\t");
     transmit_string_UART0(array1);
     transmit_string_UART0(array2);
    
    /// Initialise UART1 for Magnetometer Reception of Data and Transmission of Poll
     init_UART_MM();
    /// Configure the torquer to output the required current values
//     configure_torquer();
    
    
    
    /// Define 3 strings for storing Magnetometer field values
     char sx[20];
     char sy[20];
     char sz[20];
    
    /// Initialise the Timer
    timer_init();
    
    /// Start while loop
	   while (1)
       {
//            if(tot_overflow >= 15)         // find out what the value of x will be for a delay of 2 seconds
//            {
//                
//               send_MM_cmd("*00P\r");
//                tot_overflow = 0;
//                TCNT1 = 0;
//            }
//           
           
                

               /// Receive and store Bx,By,Bz
               Bx=(int16_t)receive_MM();
               Bx=(Bx<<8);
               Bx &= 0xFF00;
               Bx|=(int16_t)receive_MM();
               
               By=(int16_t)receive_MM();
               By=(By<<8); By &= 0xFF00;
               By|=(int16_t)receive_MM();
               
               Bz=(int16_t)receive_MM();
               Bz=(Bz<<8);
               Bz &= 0xFF00;
               Bz|=(int16_t)receive_MM();
               
               /// Receive carriage return and ignore
               receive_MM();


               /// Transmit Carriage return
               transmit_UART0('\r');
               
               if (Bx != 0x00 || By != 0x00 || Bz != 0x00)
               {
                   
                   Current_state.mm.B_x=Bx;
                
                   /// Copy Bx,By,Bz into Strings for transmiting
                   sprintf(sx,"%d",Current_state.mm.B_x);
                   
                   
                   transmit_UART0('x');
                   transmit_string_UART0(sx);
                   transmit_UART0(' ');
                   
                   transmit_UART0('y');
                   sprintf(sx,"%d",Bz);
                   
                   transmit_string_UART0(sx);
                   transmit_UART0(' ');
                   
                   transmit_UART0('z');
                   sprintf(sx,"%d",Bz);
                   
                   transmit_string_UART0(sx);
                   transmit_UART0('\r');
                   
                   transmit_string_UART0("Hello this is Naveen from IITB");
                   transmit_UART0('\r');
               
               }
                
           read_GPS();
           
       }
    
           
           
           
    
    return 0;  
}