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; }
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; }
void transmitSunSensorUart(int temp) { //Function for Sending Sunsensor data through UART transmit_UART0(temp & 0xff); transmit_UART0(temp >> 8); }
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'); */ }
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; }
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]; /// 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]; 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; }