Ynt: MSP430 UART to C#

Başlatan baran123, 26 Şubat 2016, 16:28:12

baran123

MSP430 ile MPU6050 verilerini okuyup paket halinde c# a aktarmak istiyorum fakat paket kısmında anlamadığım bir nokta var ki bu işlemi gerçekleştiremiyorum.Biliyorum yine çok basit bir noktayı kaçırıyorum ama...

Şu şekilde bir msp kodu hazırladım.
void main(void)
{
	uint8_t i;
	uint8_t MPU6050_Ready = 0;
	uint8_t MPU6050_Buffer[16];
	//MPU6050_DataTypeDef	MPU6050_DataStructure;

	FREQ_Init();
	GPIO_Init();
	UART_Init();

	MPU6050_Ready = (MPU6050_Init()) ? 1 : 0;

	MPU6050_Buffer[0] = '&';
	MPU6050_Buffer[1] = '+';

	for(;;)
	{
		if(MPU6050_Ready)
		{
			LED_1;

			I2C_ReadMulti(MPU6050_RA_ACCEL_XOUT_H, MPU6050_Buffer, 14);

			for(i=2; i<16; i++) {
				UART_SendData(MPU6050_Buffer[i]);
			}

			__delay_cycles(5000000);
		}
	}
}


Bu 16'ı byte ı almak için ise c# rx kesmesi şöyle
if (DataOk)
            {
                DataOk = false;
                lblAccX.Text = "Accelerometer X : " + (Receive_Buffer[0] << 8 | Receive_Buffer[1]); 
            }
            
            switch (state)
            {
                case 0:
                    if (ReceivedByte == 38) // &
                    {
                        state = 1;
                        byteSayac = 0;
                    }
                    break;

                case 1:
                    if (ReceivedByte == 43) // +
                    {
                        state = 2;
                    }
                    break;

                case 2:
                    if (byteSayac == 16)
                    {
                        DataOk = true;
                        state = 0;
                    }
                    Receive_Buffer[byteSayac] = ReceivedByte;
                    ++byteSayac;
                    break;
            }

Nerede hata yaptığımı bulamadım. :/
Not : PC de sürekli veri geliyor fakat istediğim sırayla gelmiyor ve bu yüzden DataOk = true olmuyor.

Çizgi Tagem

Uart üzerinden pc ye veri göndermek göründüğü kadar kolay değil maalesef. Şöyle yapabilirsin; c# ta veri gelince received event oluşur. Yani ilk byte gelince event oluşacak. Event içinde sleep komutu ile 1 saniye kadar bekle sonra SerialPort.ReadExisting Method () metodu ile alınan bütün veriyi okuyabilirsin. Bu şekilde sıralı olarak okuyabilirsin. Ama yinede veride kayma vs. gibi durumlar oluşabilir. Bu yüzden paketin başına tanımlayıcı karakter ve sonuna checksum bilgileri ekleyebilirsin.