kesme ile RF kumanda'dan 4 tane kanal okumada sorun yaşıyorum.

Başlatan armas, 06 Mayıs 2016, 22:27:57

armas

Merhabalar,

6 kanallı RF kumanda'nın 4 kanalını okumaya çalışıyorum. Bildiğiniz gibi kanaldan kare dalga geliyor. Yükselen kenarda kesmeye girip süreyi alıyorum ve alçalan kenarda tekrar kesmeye girip buradan aldığım süre bilgisini önceki kesmede bulduğum süre bilgisinden çıkartıyorum. Böylelikle doluluk oranını bulmuş oluyorum. Fakat doluluk oranını kumandadan arttırdığım zaman sonuçlar saçma sapan bir hal alıyor. Ben tanımladığım değişkenlerle ilgili bir sorun olduğunu düşünüyorum ama iki gündür her türlü şeyi denememe rağmen sonuçlar hala düzelmedi. Aşağıda iki kanal için kesme fonksiyonunu paylaşacağım diğer ikisi aynısı zaten. Fonksiyonda kullandığım değişken ve fonksiyonların özellikleri şu şekilde;
volatile uint32_t firstTime = 1;
volatile uint32_t throttle = 0;
volatile uint32_t yawStation= 0;

getUs();  fonksiyonu içerisinde mikrosaniye saydırıyorum. Burada tanımlanan değişkenin tipi static uint32_t.


void GPIO0_IRQHandler(void) {
	Chip_PININT_ClearIntStatus(LPC_GPIO_PIN_INT, PININTCH(portSell_1));
	bool isHigh = Chip_GPIO_GetPinState(LPC_GPIO_PORT, 1, 7);
	if (isHigh == true) {
		firstTime = getUs();
		flag = true;
	} else {
		if (flag == true) {
			flag = false;
			throttle = (getUs() - firstTime);
                        printValue(",", sizeof(",") - 1, (float) throttle );
			NVIC_DisableIRQ(PIN_INT0_IRQn);
			NVIC_ClearPendingIRQ(PIN_INT1_IRQn);
			NVIC_EnableIRQ(PIN_INT1_IRQn);
		}
	}
}

void GPIO1_IRQHandler(void) {
	Chip_PININT_ClearIntStatus(LPC_GPIO_PIN_INT, PININTCH(portSell_2));
	bool isHigh = Chip_GPIO_GetPinState(LPC_GPIO_PORT, 1, 6);
	if (isHigh == true) {
		firstTime = getUs();
		flag = true;
	} else {
		if (flag == true) {
			yawStation = getUs() - firstTime;
			flag = false;
			//printValue(",", sizeof(",") - 1, (float) yawStation);
			NVIC_DisableIRQ(PIN_INT1_IRQn);
			NVIC_ClearPendingIRQ(PIN_INT2_IRQn);
			NVIC_EnableIRQ(PIN_INT2_IRQn);

		}
	}
}


Dediğim gibi veriler genelde doğru geliyor. Ama doluluk oranını arttırdığım zaman sonuçlar bozuluyor.  Bir de kafayı yedirtecek başka bir birşey daha var. 2. fonksiyonda çevrimdışı olan ekrana yazdırma fonksiyonumu çalıştırdığım zaman doluluk oranını çok güzel okuyabiliyorum. Bununla ilgili hiçbir bağlantı kuramadım. Böyle birşey ile ilk defa karşılaştım. Yorumlarınızı bekliyorum. Şimdiden yorumlarınız için teşekkürler