Kesme içinde GLCD sorunu

Başlatan kartal0689, 21 Mart 2016, 10:58:25

kartal0689

Arkadaşlar merhaba,

dsPIC30F6014 30MIPS (120Mhz) çalışan projemde TMR3 kesmesi içinde KS0108 Grafik LCD ekrana
verileri bastığımda saçma şeyler ile birlikte basıyor. TMR3 süresini 200ms bile denedim ama olmadı.
Kesme içinde ekrana neden veri basamıyorum.

tekosis

kesmeden çıkmadan önce tmr3 registerini sıfırlayıp öyle çıkın. çünkü kesme içinde siz oyalanırken sayıcı arttırımına devam ediyor.
İlim ilim bilmektir, ilim kendin bilmektir, sen kendin bilmezsin, bu nice okumaktır.

kartal0689

Şu anda aşağıdaki kod yüklü.Register ı temizliyorum. ama yine sorun oluşuyor anlamadım.

procedure Timer3Interrupt(); iv IVT_ADDR_T3INTERRUPT;// 10ms
 begin
     IEC0.7   := 0;
     
     Glcd_Dot(SarjA, SarjB, 2);
      


     IEC0.7   := 1;
     IFS0.7   := 0;
     T3CON   := 0x8010;
       
 end;





F493

Selam,
   Kesme içinde kesinlikle yapılmaması gereken bir işlem. Nedenini bilmiyorum ama interrupt stack'i ile ilgili olabilir. Onun yerine, interrupt içinde bir flag i set ederek bu islemi yapın. Bu işi bilenler bu şekilde yapar.

main
..
..
if (LcdUpdateFlag == 1)
{
LcdUpdateFlag = 0;

verileri lcd ye gonder.

}

.. TimerInterruptVector ..
..
..
 LcdUpdateFlag = 1;
...
..

tekosis

f493 ün de dediği gibi siz kesmenin içindeyken glcd komutları çok sayıda alt fonksiyon çağırabilir. kesme içinde işlem yapmayın.
İlim ilim bilmektir, ilim kendin bilmektir, sen kendin bilmezsin, bu nice okumaktır.

kartal0689

Muhtemelen stack sorunu oluşuyor. Hazır library lerde genelde bu tarz sorunlar çıkabiliyor maalesef.
bende dediğiniz gibi timer dışında şart oluşunca görüntüyü basıyorum.
ilgilerinizden dolayı teşekkür ederim.

dursuncemal

bu tip kritik zamanlamalarsa fonksiyonuuzun harcadigi zamani olcerseniz sikintiyı cok daha rahat bulursunuz. ama interrupt icindeki fonksiyonlarimizda cok fazla yayilma luxumuz yok dikkatli olmak lazim.
:=