Picproje Elektronik Sitesi

DERLEYİCİLER => MikroC - PIC => Konuyu başlatan: EMG81 - 25 Ekim 2012, 04:32:06

Başlık: Mikroc uart sıkıntıları
Gönderen: EMG81 - 25 Ekim 2012, 04:32:06
Merhaba,

Geçen sene mikroc kullanırken tamamladığım bir proje üzerinde restorasyonlar yapmam gerekli. Uzun süredir mikroc yi kullanmıyordum. Menülerini bile unutmaya başlamışım..
Sorun şu;

Uarttan "%" karakteri ile başlayan ve ardından 300-350 kadar devam eden bir paket veri alıyorum. Ben "%" karakteri ve sonraki 200 karakter ile ilgileniyorum. Gerisi benim için önemli değil. Mikroc help inden kurcaladığım kadarı ile,

if (UART1_Data_Ready())
{

}


altında i,j,k gibi bir array i arttırıp UART1_Read(); fonksiyonu ile de okuyoruz.
Örneğin,

Test=UartVeri[0];
if(Test== '%' && M==11) M=0; M++;
UartVeri[M] = UART1_Read();


ile 10 byte bilgiyi alabiliyorum.


Test=UartVeri[0];
if(Test== '%' && M==201) M=0; M++;
UartVeri[M] = UART1_Read();


bunun ilede 200..
200 karakterden sonra ne kadar daha byte geldiğini bilmiyorum ve dediğim gibi bununla ilgilenmiyorum.

Nette ki örnekler hep yukarıda anlattığım gibi yazılmış. Bunlar ile gelen paket uzunluğunu bildiğimiz sürece çalışabiliriz. Ancak ben dediğim gibi "%" karakterinden sonraki 200 karakter ile ilgilenip diğerleri ile ilgilenmemek istiyorum..

Elinde bu tarz örneği olan varmı?
Başlık: Ynt: Mikroc uart sıkıntıları
Gönderen: LukeSkywalker - 25 Ekim 2012, 08:25:16
Hocam önce % karakterini ayrica komtrol edip eger o karakter geldiyse ardindan gelenleri dizi icerisine alin.
Başlık: Ynt: Mikroc uart sıkıntıları
Gönderen: EMG81 - 25 Ekim 2012, 16:20:22
Şöyle,

Test = Uart[0]; şeklinde test i gelen ilk byte ile eziyorum. Uart[0] ın '%' olduğunu kontrol ediyorum. Sonra ne alacaksak alıyorum(500 byte buffer tanımladım). Sonra da for döngüsü ile bufferdan ilk 200 ünü çekiyorum.

Sorun şu.

Gelen datanın uzunluğunu bilmediğimizden(300-400-456-476 vs ne ise) M değişkenini ne zaman 0 lamamız gerektiğini anlayamıyoruz. Şöyleki ilk 200 geldikten sonra 100msn kadar uartı kapatabilsem veya X byte kadar veri alıyor olalım. X byte ın bitişini anlayabilsem M yi sıfırlarım ve sorun ortadan kalkar. Ama biz mesela M yi 200 de sıfırlayıp 250 byte veri alıyorsak M 200 de sıfırlanıyor ve artan 50 byte ı ilk 200 ün üzerine yazıyor ve böylece hem '%' bilgisi kayboluyor hemde ilk 49 byte bozulmuş oluyor.

Sabah işlemciye bir oyun oynayıp onu kandırmıştım ve sorun ortadan kalkmış gibiydi. ilk 200 ü çekebiliyordum. Ama 15-20 dk lık bir çalışmadan sonra işlemci takılıyor. Pek sağlıklı bir yöntem olmadı. (Yani yine 200 den sonra artan veri sayısını bilmediğimizden 10-15 dk da 1-2 veri kaçırıyor ve işlemci uart rutininde sıkışıp kalıyor.)

En sağlıklısı ilk 200 den sonra uartı kapatabilmek, beklemek, devamını kabul etmemek vs. Mikroc de bu nasıl yapılıyor anlamadım.
Başlık: Ynt: Mikroc uart sıkıntıları
Gönderen: Klein - 25 Ekim 2012, 19:10:04
200. veriden sonraki veriler içerisinde '%' karakteri olma ihtimali var mı?
Eğer yoksa  M'yi  % karakterini gördüğünde sıfırla. sayacın 200 den küçükse veriyi al. aksi durumda alma.
Başlık: Ynt: Mikroc uart sıkıntıları
Gönderen: EMG81 - 25 Ekim 2012, 20:16:04
Aynen. Sabah bende böyle kandırdım işlemciyi ama 200 den sonrasında da % karakteri gelebiliyor.
Başlık: Ynt: Mikroc uart sıkıntıları
Gönderen: Klein - 25 Ekim 2012, 20:25:25
iki paket arasında boşluk varsa timeout olup olmadığına bakabilirsin.  eğer bu sürede veri gelmemişse  M'yi sıfırlayıp '%' karakterini beklersin.