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; }
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; }
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; }
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; }