Esempio n. 1
0
void set_PWM(void)
{
  
  ///If current direction of axis X/Y/Z opposite of default set pin
  if(Current_state.pwm.x_dir)
    PORTC |= _BV(PC5);
  else
    PORTC &= ~(_BV(PC5));
    
  if(Current_state.pwm.y_dir)
    PORTC |= _BV(PC4);
  else
    PORTC &= ~(_BV(PC4));
    
  if(Current_state.pwm.z_dir)
    PORTC |= _BV(PC3);
  else
    PORTC &= ~(_BV(PC3));
    char txt[6];
    itoa(Current_state.pwm.x, txt, 10);
    transmit_string_UART0(txt);
    transmit_UART0('\t');
    itoa(Current_state.pwm.y, txt, 10);
    transmit_string_UART0(txt);
    transmit_UART0('\t');
    itoa(Current_state.pwm.z, txt, 10);
    transmit_string_UART0(txt);
    transmit_UART0('\r');
    transmit_UART0('\n');
    ///Set PWM values
  OCR3A = Current_state.pwm.x;
  OCR3B = Current_state.pwm.y;
  OCR3C = Current_state.pwm.z;
}
Esempio n. 2
0
void poll_SS(void)
{
	//***************ADC Variables************************
	uint8_t valh1;//High byte of first sunsensor
	uint8_t vall1;//Low byte of first sunsensor
	uint8_t valh2;
	uint8_t vall2;
	uint8_t valh3;
	uint8_t vall3;
	uint8_t valh4;
	uint8_t vall4;
	uint8_t valh5;
	uint8_t vall5;
	uint8_t valh6;
	uint8_t vall6;

	uint16_t val[6];//First sunsensor combined 16 bit value
	int8_t data_r;
  PORTB |= (1<<PB0);//Set Slave select of Slave OBC to 1
  PORTB &= ~(1<<PB5);// Set slave select of ADC to 0
  //SPCR |=(1<<SPE);
  _delay_ms(1);
  data_r=SPI_transfer(0xFF); //Dummy transaction. Tell ADC that data transmission should begin now.
  _delay_ms(1);
  //transmit_UART0(data_r);
  PORTA = 0xFF;
  vall1=SPI_transfer(0xFF);//First data byte
  _delay_ms(1);
  valh1=SPI_transfer(0xFF);
  _delay_ms(1);


  vall2=SPI_transfer(0xFF);
  _delay_ms(1);
  valh2=SPI_transfer(0xFF);
  _delay_ms(1);




  vall3=SPI_transfer(0xFF);
  _delay_ms(1);
  valh3=SPI_transfer(0xFF);
  _delay_ms(1);



  vall4=SPI_transfer(0xFF);
  _delay_ms(1);
  valh4=SPI_transfer(0xFF);
  _delay_ms(1);



  vall5=SPI_transfer(0xFF);
  _delay_ms(1);
  valh5=SPI_transfer(0xFF);
  _delay_ms(1);



  vall6=SPI_transfer(0xFF);
  _delay_ms(1);
  valh6=SPI_transfer(0xFF);
  _delay_ms(1);
  val[0]=convert(vall1,valh1);
  val[1]=convert(vall2,valh2);
  val[2]=convert(vall3,valh3);
  val[3]=convert(vall4,valh4);
  val[4]=convert(vall5,valh5);
  val[5]=convert(vall6,valh6);

  for (int i=0;i<6;i=i+1)
  {
	  Current_state.ss.read[i] = (float)(val[i]*(3.3/1024));
  }
  
  uint8_t sen;
  transmit_UART0('A');
  for(int i=0;i<6;i=i+1)
  {
	  sen = (Current_state.ss.read[i]*255/3.3);
	  transmit_UART0(sen);
  }
 
  PORTB |= (1<<PB5);
  //_delay_ms(1000);
  ///Power Down PD low
  //cbi(PORTB, PB6);
//return;  
}
Esempio n. 3
0
void transmitSunSensorUart(int temp) { //Function for Sending Sunsensor data through UART
	transmit_UART0(temp & 0xff);
	transmit_UART0(temp >> 8);
}
Esempio n. 4
0
void poll_MM1(void)
{
	 char sx[20];
	 char sy[20];
	 char sz[20];
	 int16_t Bx1;
	 int16_t By1;
	 int16_t Bz1;
	 
	 uint16_t Bx;
	 uint16_t By;
	 uint16_t Bz;
	 uint8_t c= 80;
	 
	 transmit_UART0(c);
	 Bx=(uint16_t)receive_UART0();
	 Bx=(Bx<<8);
	 Bx &= 0xFF00;
	 Bx|=(uint16_t)receive_UART0();
	 Current_state.mm.B_x = ((float) Bx) / 15000;
	 // sprintf(sx,"x is %f",Current_state.mm.B_x);
	 
	 //transmit_UART0('x');
	 By=(uint16_t)receive_UART0();
	 By=(By<<8);
	 By &= 0xFF00;
	 By|=(uint16_t)receive_UART0();
	 Current_state.mm.B_y = ((float) By) / 15000;
	 //sprintf(sx,"x is %f",Current_state.mm.B_y);
	 
	 //transmit_UART0('y');
	 Bz=(uint16_t)receive_UART0();
	 Bz=(Bz<<8);
	 Bz &= 0xFF00;
	 Bz|=(uint16_t)receive_UART0();
	 Current_state.mm.B_z = ((float) Bz) / 15000;
	 //sprintf(sx,"x is %f",Current_state.mm.B_z);
	 
	 //transmit_UART0('cr');
	 //receive_MM();
	 
	 if(Bx > 30000)
	 {   Bx1 = Bx - 65536;
		 Current_state.mm.B_x = ((float) Bx1) / 15000;
		 //sprintf(sx,"x is %f",Current_state.mm.B_x);
	 }
	 
	 if(By > 30000)
	 {   By1 = By - 65536;
		 Current_state.mm.B_y = ((float) By1) / 15000;
		 // sprintf(sy,"y is %f",By1);
	 }
	 
	 if(Bz > 30000)
	 {Bz1 = Bz - 65536;Current_state.mm.B_z = ((float) Bz1) / 15000;
		 // sprintf(sz,"z is %f",Bz1);
	 }
	  /*transmit_string_UART0(sx);
      transmit_UART0(' ');
      transmit_string_UART0(sy);
      transmit_UART0(' ');
      transmit_string_UART0(sz);
      transmit_UART0('\r');
	  */
}
Esempio n. 5
0
int main(void)
{
	char array[40];
	char array1[40];
	char array2[40];
	
	DDRA = 0xF0;
	PORTA = 0xF0;
	_delay_ms(1000);
	PORTA = 0x00;
	_delay_ms(1000);
	PORTA = 0xF0;
	_delay_ms(1000);
	PORTA = 0x00;
	_delay_ms(1000);
	
	init_UART0();
  
	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 HUSSAIN's OBC-Master code...");
	sprintf(array2,"\rCurrent GPS state is =\t");
		
/************************************************************/
	init_UART_GPS();
	
	///* Switch on Global interrupts
	sei();
  
    //uint8_t GPS_data[159];
    uint8_t temp;
/************************************************************/
	while(1)
    {
        
        while (!(UCSR0A & _BV(RXC0)));
        temp =  UDR0;
        transmit_UART0('A');

        
        
//        for (i=0;i<159;i++)
//        {
//            GPS_data[i] = receive_GPS();
//            
//        }
//        
//        for(i=0;i<4;i++)
//        {
//            temp = temp >> 8;
//            temp &= 0x00FFFFFF;
//            temp |= ((uint32_t) GPS_data[i])<<24;
//            
//        }
//        sprintf(array,"x = %lu \n",temp);
//        transmit_string_UART0(array);
        
        
    //process_GPS();
    //	read_GPS();
    //while(UCSR0B & _BV(RXCIE0));
    
//	send_preflight((char *)&Current_state.gps, sizeof(struct GPS_reading));
//	sprintf(array,"x = %lu \n",Current_state.gps.x);
//    transmit_string_UART0(array);
//        
//	sprintf(array,"y = %lu \n",Current_state.gps.y);
//    transmit_string_UART0(array);
//        
//	sprintf(array,"z = %lu \n",Current_state.gps.z);
//    transmit_string_UART0(array);

//	sprintf(array,"x = %x\n",Current_state.gps.x);transmit_string_UART0(array);
//	sprintf(array,"y = %x\n",Current_state.gps.y);transmit_string_UART0(array);
//	sprintf(array,"z = %x\n",Current_state.gps.z);transmit_string_UART0(array);	
	
//    sprintf(array,"%lu ",Current_state.gps.v_x);
//    transmit_string_UART0(array);
//        
//	sprintf(array,"%lu ",Current_state.gps.v_y);
//    transmit_string_UART0(array);
//        
//	sprintf(array,"%lu ",Current_state.gps.v_z);
//    transmit_string_UART0(array);
	
/************************************************************/
	}
	return 0;
}
Esempio n. 6
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;
}
Esempio n. 7
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;  
}
Esempio n. 8
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;  
}