avatar_Mucit23

Ana döngüde kesmenin açılıp kapanması

Başlatan Mucit23, 13 Eylül 2011, 13:01:18

Mucit23

Merhabalar Ete hocam. Protonda GLCD ile yaptığım bir uygulamada Bazı yerlerde Timer kesmesi kullanmam gerekiyor. Çok araştırmama rağmen anlamsız ve çözüm bulamadığım bir sorunla karşılaştım. Programda kesme çalıştığı zaman grafik lcdye veri gönderirken verilerde bozulma oluyor sanırım. Çünkü ekranda rastgele bölümler silinmeye başlıyor. Çok gerçekten çok fazla araştırdım bunu fakat hiçbiryerden tatmin edici bir cevap alamadım. En sonunda Bende Ekrana verilerin gönderildiği kısmı tek bir alt programa toplayıp, Bu alt programa dallanmadan önce kesmeleri kapatıp çıkarkende tekrardan açıyorum. Bu şekildesorun çözüldü. Ekranda görüntü bozulmuyor. Görünürde kesme düzenli çalışıyor. Kesme alt programındada yaptığım şey basit. Bir sayacı saydırıyorum. sayacın değerine göre ekranda bazı değerleri yakıp söndürüyorum. Buda görünürde düzenli çalışıyor. Fakkat Uzun vadede çalışan bir sistem için nekadar sağlıklı bir çözüm yolu oldu aklımı karıştırıyor. Yani progra çalıştığı sürece kesmenin sürekli açılıp kapanmasının bir problem çıkarması ne derece olağandır.
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

ete

Normal şartlarda ekranın bozulmaması gerekir. Ancak kesme kısmında ne kadarlık bir zaman kaybedilihyor unuda bilmek lazım. Belliki program kesme kısmında epeyce zaman kaybediyor buda GLCD nin ekranı tazleme işini engelliyor yada anlamadığımız başka bir şey var.
Bu sorun tabiiki kesme anında GLCD ye yollanan verilerin bozulması ilede oluşabilir.  Normal şartlarda veri bozulması diye bir şeyinde söz konusu olmaması gerekir ama işin ASM tarafında register değerlerinin bozulması şeklinde açıklayabiliriz bu bozulmayı. Araştırmak ve sorunun asıl kaynağını bulmak lazım bence.

Ete

inventor

Benzer bir sorunla Protonda bende uğraşıyorum. 4x20 lcd kullanılan bir projede usart kesme yapıyorum. Kesme olduğu anda lcd sapıtıyor. Aynı arkadaşımız gibi bazı noktalarda kesmeyi kapatarak sorunu çözüyorum ama gecikmelere neden oluyor. Aynı programı tmr0 kesmesi ile pbp da yazdığımda sorunsuz çalışıyor. Kesmeler farklı ama protona yeni geçtiğim için bilmediğim ya da gözden kaçırdığım bir şey var diye düşünüyorum.
İlmin en büyük düşmanı, sabırsızlıktır. (Şems-i Tırmizi)

est32

Bana kalırsa lcd'ye göre de bunlar değişiyor.Elimde yaklaşık 25 tane grafik ekran var.Hepsi de aynı marka ve model,aralarında sadece üretim tarihi farkları var.
Board üzerinde deneme yapıyorum,sadece birini söküp diğerini takıyorum,program yine aynı program,buna rağmen bazı lcdler fontlu yazıları bozuk yazabiliyor fakat protonun dahili fontunda sorun çıkarmıyor nedense.Hepsi aynı marka model ama bazısı fontlu yazılarda sorun çıkarırken bazıları sorun çıkarmıyor nedense.

Mucit23

Ben çözüm bulamadım..
Karakter lcdlerle denemedim ama GLCDlerde sorun oluyor. Bence protonla alakalı bir durum.
LCD yi 8 satır 128 sütün olarak düşünürsek, lcd yapısına göre her satırdaki bir sütün 8 bitden oluşuyor. Benim incelemede satırlardaki sütünlar ya komple siliniyor yada tamamen kararıyor. Değişik bir durum.
Önerebileceğiniz başka bir çözüm yolu varmıdır.
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

ete

Konu proton olunca dilim tutuluyor maalesef. Zira birkaç defa program denemem oldu. Birkaç da bana mail atan kişilerin programları ile ilgilendiğim oldu. Bunlara bakarak Protonda hala bazı BUG lar olduğuna inanıyorum. O nedenle protonla kod yazma konusuna sıcak bakamıyorum bir türlü.  GLCD konusunda çok faydalı komutları var elbette kesin kullanılması gerekir ama şayet sorun var ise bence kısa yoldan terk etmen de iyi olur. Tabiiki asıl sorun, nasıl anlayacağız sorunun derleme sorunumu yoksa programlama sorunumu yoksa Proton'un genel bir sorunumu olduğunu? işte buna cevap veremiyorum maalesef. İyi düşünüp denemeler yaparak karar vermek en doğrusu olurdu.

Ete

3mZ

Mucit 23
Benzeri bir sitede bu sorunu okumuştum ayrılalım siteden 1 yıl oluyyor baktım bulamadım ama çözümün kristalde bittiğini hatırlıyorum devrende normal 4Mhz kullandıysan 20Mhz takıp dene yada hiç kristal bağlamadan hangi pici kullandıysan kendi osilatörünü devreye sok birde öyle dene ve başka bir nokta ise ekran tazeleme olayı ekran sildirdikten sonraki pause'yi iyi ayarla saygılar iyiçalışmalar

est32

evet protonda bug çok,bazılarını ben de buldum fakat bir şekilde sorunların üstesinden geliniyor.farklı yöntemlerle yine istediğimi elde ettim bugüne kadar.Umarım başka çözüm yolları olan bir durumdur...

F®T

protonda kesmeye giriş var ama çıkış zor oluyor genelde ::)
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

Mucit23

Kullandığım işlemci 18F4620 , Ayrıca 18F4685 ve  18F8722 de denedim malesef aynı sonuç... Şimdiye kadar hep 20 Mhzde çalıştırdım. 4 mhz de hiç denemedim. Aslında birde 40 Mhz de deneyeceğim. Neler olur gerçekte gözlemlerim. Şimdilik 10Mhz kristalim yok. Bugün birtane alıp denerim.
Ben bu sorunun protonun kendisiyle alakalı olduğuna inanıyorum. Protonda iki çeşit kesme var. Birinci Hardware kesmesi diğeri ise normal PBP 'dakiyle aynı şekilde çalışıyor. Hep hardware kesmesini kullanıyorum. Normal kesmeyi kullanınca işler daha berbat oluyor. Yani kesmeye girince lcd ekrana gönderilecek verilerde neden bozulmalar olsunki?. Neden başka registerlerdeki veriler bozulmuyorsa sadece LCD ekrana gönderilen veriler bozuluyor? İşte buna cevap bulamıyorum. (Belkide bozuluyordur))
Acabaprotonun kendi formundamı konu açayım. Belki başka bi fikri olan vardır..
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

inventor

Şimdi tuhaf bir durum ortaya çıktı. Bende Protona HW kesme için geçiş yaptım. Normalde TMR0 kullanarak gerçekleştirdiğim bir proton programını HW kesmesi ile yapınca sorun çıkıyor ekranda. Ama aynı yazılımı SW ile yapınca sorun çıkmıyor. Siz yazılım kesmesi daha çok sorun çıkarıyor demişsiniz. Bende tam tersi oluyor. Sorun bizde olmasın. Acaba protonda bilmediğimiz bir şey mi var?
İlmin en büyük düşmanı, sabırsızlıktır. (Şems-i Tırmizi)

Mucit23

Eğer Sizin için sakıncası yok ise kesme alt programının kodlarını verebilirmisiniz. İncelemek isterim.
Birde bölme oranıyla alakası olabilirmi. HW kesmesinde bölme oranını yükseltince sorun daha az görülmeye başlıyor.
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

inventor

#12
Sakıncası yok tabii ki ancak program kurcalarken çorba oldu. HW ile yapılmak istenen kısmı yazayım buraya. Amaç bir dizi bilgi göndermek ve bunu karşıda işlemek. Göderilen bilgi
 BILGI.0=ID
    BILGI.1=RUN2
    BILGI.2=YILDIZ2
    BILGI.3=BARA2
    BILGI.4=FAZ2
    BILGI.5=TERMIK2
    BILGI.6=EMNIYET
    BILGI.7=BOS2
    HSerOut ["$","R","F",Bin BILGI,$45,$4E,$44,$0D,$0A]


Bilginin alınışı,
  
INT:
Context Save
    HSerIn 5,CIK,[Wait("$RF"),Bin AL] ;HSerOut ["$","R","F",Bin ID,Bin RUN1,Bin BARA1,Bin FAZ1,Bin TERMIK1,Bin YILDIZ1,$45,$4E,$44,$0D,$0A]     
' AL=Temp

CIK:

Context Restore
End


ISIS de adım adım çalıştırdığımda kod gönderme veya almada hiç bir sorun görünmüyor. Gecikme olmadan ,sorun çıkmadan ,veri kaybolmadan bilgi alınabiliyor. Ancak ben bu bilgiyi kullanmak istediğimde ;
EKRAN1:

    If RUN1=0 And EMNIYET=0 Then
            Print At 1,1,"1.MOTOR CALISIYOR   "
                If YILDIZ1=0 Then
                    Print At 2,1,"YILDIZ BAGLANTI     "
                Else
                    Print At 2,1,"                    "
                EndIf
    EndIf


ekranda ki bu görüntü her kesme oluştuğunda ( Sinyal geldiğinde ) komple kararıp tekrar düzeliyor.
İlmin en büyük düşmanı, sabırsızlıktır. (Şems-i Tırmizi)

Mucit23

Anladım demek istediğinizi;
Benzer bir sorun işte. Sizin durum daha kötü. Hiç değilse ben ekran alt programında kesmeleri kapatıp sorunu birazda olsa çözüyordum. Siz öyle birşey yapsanız veri almada sıkıntı yaşayabilirsiniz.
Asıl konuya dönersek. Program işlediği sürecek kesmenin yazılımsal olarak açılıp kapatılması İleriki zamanlarda bir sorun yaratırmı.
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

inventor

Zamanlama gibi konularda kesme kullanmıyorsanız , programın ana döngüsü içerisinde istediğiniz zaman kesmeleri açıp kapatabilirsiniz. Bende zaman zaman  kullanıyorum bu yöntemi. Sadece benim istediğim zamanlarda ya da program döngülerinde kesme gerçekleşebiliyor.

Ancak protondaki HW kesme konusunu mutlaka halletmemiz lazım diye düşünüyorum. Yoksa boşuna protona geçmiş olacağız. En azından sorunun kaynağını bulmak lazım. İçimizde protonun "piri" sayılabilecek birisi yok sanırım. İş yine ete hocama kalacak.

Ete hocam, protondaki HW konusuna birlikte el atsak diyorum. Mutlaka bir şeyler buluruz.
İlmin en büyük düşmanı, sabırsızlıktır. (Şems-i Tırmizi)

Powered by EzPortal