Pic Kontrolörde, Tact Buton Okumaları İçin, Tavsiyeye ihtiyacım var.

Başlatan picmanya, 17 Haziran 2024, 23:10:43

picmanya

30F lerde 1 en düşük 7 en yüksek öncelikli kesme priority level-numarasıdır bunu iyi biliyorum.

Kesme içinde kesmede kesinlikle çalışıyor, burda kesmelerin önceliğinin hiç bir önemide yok.
INTCON1, NSTDIS = 1 ayarını hiç kullanmadım, ama bu register ayarıyla, bu çalışma tarzı değiştirilebiliyor olarak görünüyor.
Yani sizin dediğiniz gibide çalıştırmak mümkün gibi. 8 bit 16F-18F lerden bir farkı olsun yani.

Bence bir kesme içinde başka kesmeninde çalışması istenilen yerler olabilir, bu bana daha uygun geldi.
Her iki kesmeyide idare edecek ikisinde işini bir ondan bir bundan deyip görecek. Birnevi paralel çalışma yapacak yani.
_____________________________________________________________________________________________________________________________
Bu vektör numarasının belirttiğinizin dışında başka yerlerde de işe yaradığı oluyor mu?
Birde tüm kesmelerin Alternatif interrupt vektörü diye bir şey yazıyor bu ne amaçlı oluyor biliyormusunuz?

Buton kontrol devremi tek buton için istediğim gibi tamamladım. Diğer butonlarada bir fonksiyon yardımıyla kopyalarım artık.
Birşeyi ilk kez yapmak çok zahmetli olabiliyor. Değerli yardımlarından dolayı herkese teşekkür ederim.

Tagli

Alıntı yapılan: picmanya - 19 Haziran 2024, 20:52:3430F lerde 1 en düşük 7 en yüksek öncelikli kesme priority level-numarasıdır bunu iyi biliyorum.
Evet, öyle imiş. Az önce ben de referans manual'den baktım.

Alıntı yapılan: picmanya - 19 Haziran 2024, 20:52:34Kesme içinde kesmede kesinlikle çalışıyor,
Bu mümkün, NSTDIS = 1 yapılmadığı sürece varsayılan ayar da zaten bu. Ancak bunun olmasının tek yolu var: Düşük öncelikli bir kesme çalışırken yüksek öncelikli bir kesme gelecek. Tersi mümkün değil. Benzer şekilde, aynı önceliğe sahip iki kesme de birbirini kesemez.

Alıntı yapılan: picmanya - 19 Haziran 2024, 20:52:34burda kesmelerin önceliğinin hiç bir önemide yok.
Bu kesinlikle mümkün değil. NSTDIS = 1 yapılırsa tüm kesmeler aynı önceliğe sahip olur. Ancak bu durumda bile birbirlerini kesemezler.

Alıntı yapılan: picmanya - 19 Haziran 2024, 20:52:34Bence bir kesme içinde başka kesmeninde çalışması istenilen yerler olabilir, bu bana daha uygun geldi.
Aynı fikirdeyim. Kesme öncelikleri bunun için var zaten.

Alıntı yapılan: picmanya - 19 Haziran 2024, 20:52:34Her iki kesmeyide idare edecek ikisinde işini bir ondan bir bundan deyip görecek. Birnevi paralel çalışma yapacak yani.
Tek çekirdekli bir işlemcide bu şekilde bir işleyiş mümkün değil. dsPIC30F için durum bu en azından. İstisnai mimariler olabilir. Padauk'un öyle garip bir işlemcisi vardı aklımda yanlış kalmadıysa, sanki 2 thread var gibi donanımsal olarak bir ondan bir bundan kod çalıştırıyordu.

@picmanya bence senin yazılımında gözünden kaçan bir durum var. Veya belki de derleyicide bir bug vardır. Durumu analiz etmenin en pratik yolu şüpheli kesmelerin giriş-çıkışlarında birer pini 1-0 yapmak. Sonra da bunları bir lojik analizör ile gözlemle. Benim sıklıkla kullandığım bir debug yöntemidir ve çok faydasını gördüm. Ben CN kesmesinin bouncing sebebiyle beklediğinden daha fazla sayıda geldiğinden şüpheleniyorum. Ya da belki kesme önceliklerini atamayla ilgili bir problem vardır.
Gökçe Tağlıoğlu

Tagli

Alıntı yapılan: picmanya - 19 Haziran 2024, 20:52:34Bu vektör numarasının belirttiğinizin dışında başka yerlerde de işe yaradığı oluyor mu?
Bildiğim kadarıyla hayır. Sadece aynı önceliğe sahip kesmeler arasında karar verilmesinde kullanılıyor.

Alıntı yapılan: picmanya - 19 Haziran 2024, 20:52:34Birde tüm kesmelerin Alternatif interrupt vektörü diye bir şey yazıyor bu ne amaçlı oluyor biliyormusunuz?
Çalışma sırasında kesme fonksiyonunun değiştirilmesine olanak veriyor. Gerçi bir değişkenle de dallanma yapılabilirdi belki. İşlemcide aynı anda yüklü olan ancak aynı anda çalışmayacak iki uygulama varsa işe yarayabilir. Akla ilk gelen örnek bootloader'lar sanırım.
Gökçe Tağlıoğlu

picmanya

Anladım. Bilgilendirmeler için sağolun.
Ben devremi herhangibir lojik analizöre bağlamadım. Gözümle gördüğümü söyledim.
Buton bouncing kısmınıda;
Butona basıldığında, otomatik olarak, CN kesmenin içine gidildiğinde,
en başta ilk olarak 1,5 msn. gecikme döngüsü vererek sonra butonları okuyarak aştım. 1 msn. de yeterli oluyor. garanti olsun dedim.
hatta bu zamanıda menüden ayarlama imkanı sağladım. çalışma zamanında istenirse kullanıcı-operatör tarafından değiştirilebilecek.
CN kesmede çoklu tetikleme olduğunu sanmam, displeyden ve ledlerden devreyi gözlemleyebiliyorum.
Display rakamlarının her tıklamada yalnızca tek tek artırabiliyordum. Çoklu artma hiç olmadı. Taki ben son anda butona uzun basılma yordamını ekleyene kadar.
_____________________________________________________________________________________________
Okan AKÇA ya teşekkür ederim. Mesajını ilk seferinde iyi anlamamışım.
Devremi dediğiniz gibi düzenleyip yapmış oldum. Butona uzun basılma olayını algılama kısmı ana döngü while() içinde timer ile oldu.