Hi, i have a little problem with my usart communication, please look at my code:
Code:
int main (void)
{
Config32MHzClock();
usartInit();
rxn = -1;
timersInit();
unsigned char PWM_value=0;
stdout = &mystdout;
servo[1] = 42;
servo[2] = 41;
servo[3] = 42;
for(;;){
TC_SetCompareA( &TCD0, servo[1] );
TC_SetCompareC( &TCD0, servo[2] );
TC_SetCompareA( &TCD1, servo[3] );
break;
}
while(1) {
if(flag == 1){
printf("Buffer i = s \n", rxn, buffer);
rxn++;
flag = 0;
//servo control
if(buffer[5] != '\0'){
se1[0] = buffer[0];
se1[1] = buffer[1];
se2[0] = buffer[2];
se2[1] = buffer[3];
se3[0] = buffer[4];
se3[1] = buffer[5];
printf("Se1 = s \n", se1);
printf("Se2 = s \n", se2);
printf("Se3 = s \n", se3);
servo[1] = atoi(se1);
servo[2] = atoi(se2);
servo[3] = atoi(se3);
for(i = 0; i < 7; i++){
buffer[i] = '\0';
}
rxn = 0;
}
}
TC_SetCompareA( &TCD0, servo[1] );
TC_SetCompareC( &TCD0, servo[2] );
TC_SetCompareA( &TCD1, servo[3] );
_delay_ms(500);
}
}
ISR(USARTC0_RXC_vect)
{
USART_RXComplete(&USART_data);
if (USART_RXBufferData_Available(&USART_data)) {
receivedData = USART_RXBuffer_GetByte(&USART_data);
if(rxn == 7){
rxn = 0;
}
buffer[rxn] = receivedData;
flag = 1;
}
}
ISR(USARTC0_DRE_vect)
{
USART_DataRegEmpty(&USART_data);
}
so, i'am sending numbers to my xmega and when buffer is full i'am trying to split them into 3, 2 digit numbers and use atoi(), but i'am getting wierd things in my se1 (char se1[2]), terminal shows this:
Code:
Buffer 0 = 1
Buffer 1 = 12
Buffer 2 = 123
Buffer 3 = 1234
Buffer 4 = 12345
Buffer 5 = 123456
Se1 = 1234
Se2 = 34
Se3 = 56
why se1 shows 1234 ? it should be 12 only... i have tried everything and i'am feeling so stupid right now, how from these lines
Code:
se1[0] = buffer[0];
se1[1] = buffer[1];
se2[0] = buffer[2];
se2[1] = buffer[3];
se3[0] = buffer[4];
se3[1] = buffer[5];
se1 can be 1234 ?
thanks for any help |