Kesme program içerisinde kapatılabilirmi ?

Başlatan mustafa_cmbz, 09 Şubat 2019, 07:30:38

mustafa_cmbz



Merhabalar..

Bu aralar usart kesmeleriyle epey uğraşıyorum.

Şöyle bir durum var.Mesela değişkenlerden sonra kesmeleri aktif ettiğimde sorun yaşamıyorum gayet güzel çalışıyor fakat.:

yukarıdaki resimdeki gibi kesmeyi aktif ettiğimiz kısım basit bir gosub komutunun altına gelirse haberleşmem çalışmıyor.Sizce bunun sebebi ne olabilir..?

RaMu

Bence kesmenin kurulumu ile ilgili problem var,
datasheet ten örnek kuruluma bakıp gereken tüm register ları kurmak lazım.
Uart ile ilgili hata bitleri ve temizlemesi işlemlerinide yapmak lazım.
Hatta kesme kurulmadan önce kesme bayrağıda silinebilir,
oluyorsa rcbuf receive buffer temizlenebilir.

Kesmenin nerede kurulup aktif edildiğinin bir önemi yoktur,
gerekli şartlar yerine getirilip programın herhangibir yerinde kurulup aktif edilebilir, öyle lazımsa pasif edilebilir,
tekrar aktif edilebilir.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

MB_77

Selamlar,

Gosub altında kesmeyi açtığınızda sorun oluyorsa bu büyük ihtimalle reciever bufferını temizlemekte geç kalındığında modül kilitleniyordur. Anladığım kadarıyla kesmeyi iptal ettiğiniz durumda data gelmeye devam ediyor ve siz bufferı kesme rutini içinde temizliyorsunuz. Durum böyleyse iki yol olabilir. Baud hızına göre uygun sürelerde satır aralarında buffer temizlersiniz. Ki bunu tavsiye etmem. Diğer yol kesmeleri iptal etmek yerine uart alıcısını devre dışı bırakırsınız ve gerektiğinde devreye alırsınız ya da ilgili pin fonksiyonu seçimli ise pin fonksiyonunun rx ile bağlantısını kesersiniz.

mustafa_cmbz

10 Şubat 2019, 04:09:45 #3 Son düzenlenme: 10 Şubat 2019, 04:12:41 mustafa_cmbz
Hocam şöyle bir durum da var karta bağlı olan mhz-16 co2 sensörü kart ile birlikte enerjileniyor ve enerjiyi aldığından itibaren 4-5 kez daha gönderiyor sanırım sorun bunla alakalı dediğiniz gibi.

Bufer temizleme olayı şöyle sayacı kurıyorum 8bytı aldıysam sorun yok diyip değişkene çekip bufferi temizliyorum.

Yarın rx i kapatmayı deniyeceğim..

Birde:

 
Alıntıilgili pin fonksiyonu seçimli ise pin fonksiyonunun rx ile bağlantısını kesersiniz.

Bu kısmı tam olarak anlamadım.biraz açma şansınız varmı hocam.

MB_77

10 Şubat 2019, 14:29:40 #4 Son düzenlenme: 10 Şubat 2019, 14:39:16 MB_77
MCUya bağlı olarak, modülün rx pini farklı pinlere bağlanabiliyorsa (PPS fonksiyonu gibi) bu bağlantı da isteğe bağlı olarak iptal edilebilir mi datasheet bu açıdan kontrol edilebilir. edilemiyorsa rx pini kapatma istendiğinde boş bir pine yönlendirilebilir. veya pin giriş değilde data alımını engellemek için çıkış yapılabilir mi.

MB_77

Kesmeyi engellemek şart değilse şöyle bir yöntem de değerlendirilebilir,

Kesme hep açık kalır ama istendiğinde görmezden gelinir. Bu maksatla
bir değişken tanımlanır ve kesme içinde koşul yazılır.
Eğer değişken 1 ise, normal rutin. Değilse, buffer temizleme yapılır.

Ana programda sadece bu değişken kontrol edilir.

Kılıç

Kod Seç
Declare Hserial_Clear On      ' Clear Buffer Before Receiving
Bu tanım faydalı.

mustafa_cmbz

Alıntı yapılan: Kılıç - 10 Şubat 2019, 17:14:11
Kod Seç
Declare Hserial_Clear On      ' Clear Buffer Before Receiving
Bu tanım faydalı.

Bu tanımlama kodumun başında mevcut zaten...Fakat yanlış hatırlamıyorsam kesme takılır yada hatalı bir durum olursa belirli bir süre sonra siliyor.

Şuan kartımdaki seri röle ile birlikte dimmer kısmım lambayı devreye soktuğunda haberleşme kilitleniyor.Sanırım bir süre sonra bu sizin yazdığınız tanımlama dan dolayı buffer temizlenip tekrar normale dönüyor..