Proton'da Hardware Interrupt hatası

Başlatan mech, 19 Aralık 2008, 16:12:14

mech

Merhaba Arkadaşlar. 18f252 40Mhz(4xPLL'li) ile yaptığım programda, On_interrupt Kesme komutunu kullanuyorum. Ancak Program bazı yerlerde sapıtıyor, değişkenlerin değerleri değişiyor.
 Protonun Help'inde; Hardware interrupt kullanımında kesme alt programı assembler olması daha sağlıklı olacağı yazıyor, ayrıca daha güvenilirlikli çalışması açsından software interrupt kullanımını tavsiye ediyor. Zira, SOFTWARE INTERRUPT yaptığımda düzgün çalışıyor ama programı 14Kb daha büyütüyor. Yani hafıza problemi oluşuyor. Ya hardware kullanmalıyım ya da daha büyük hafızalı bir pice geçmeliyim. Yardımlarınızı bekliyorum, Teşekkürler...
Symbol GIE = INTCON.7 ' Global Interrupt Enable 
Symbol PEIE = INTCON.6 'peripheral interrupt enable 

'------------INT0 INTERRUPT------------------- 
Symbol INTEDG0 = INTCON2.6       ' External Interrupt Edge selection          
Symbol INT0IE = INTCON.4        ' External INT0 Interrupt Enable 
Symbol INT0IF = INTCON.1        ' External Interrupt Flag 

INTEDG0 = 1 'çıkan kenarda interrupt oluşur 

PEIE = 0  'pherepheral interruptlar açıldı. 
While GIE=1 : GIE=0 : Wend         ' make sure to disable the Global interrupt 

INT0IE = 0

'------------------------------------------------------------------------ 
GIE=1                              ' Enable Global interrupt ( 0 disable) 
            T0CON=%10000001   'Pull up dirençleri İPTAL- Bölme oranı 1/64.
            INTCON=%10100000  'Kesmeler aktif ve TMR0 kesmesi aktif
On_INTERRUPT GoTo kesme          ' If interrupted go to MY_ISR 
.
.
.
kesme:
PIE1.5=0
.
.
.
INTCON.2=0:PIE1.5=1
retfie fast
Context Restore
Bilginin Efendisi Olmak İçin Çalışmanın Kölesi Olmak Şarttır

mech

Kesme alt programının hemen başına CONTEXT SAVE yazınca biraz düzeldi.
Yani restore demeden önce kaydetmek gerekiyor sanırım ama bir şeyler daha var.

Şu metni inceler misiniz?
kesme ip uçları.pdf
Bilginin Efendisi Olmak İçin Çalışmanın Kölesi Olmak Şarttır

mech

değişken aktarımı için bir plugin mevcutmuş
plugin

ben kurdum ama kullanamıyorum. Bunu kullanabilen var mı?
Bilginin Efendisi Olmak İçin Çalışmanın Kölesi Olmak Şarttır

mech

Bu sitede çok iyi anlatılmış. Plugin işe yaradı sanırım. Şimdilik bir sıkıntı gözükmüyor.
Bilginin Efendisi Olmak İçin Çalışmanın Kölesi Olmak Şarttır

Maxim

ben bu plug-in ne işe yarıyor anlamadım ,
biraz anlatabilirmisin ?

mech

Anladığım kadarıyla; kesme rutini içindeki basic komutlarının kullandığı geçici değişkenlerle hardware interruptın kullandığı system değişkenleri çakışabiliyor. Yani; kesme rutini içinde ne kadar çok basic komutu varsa, hata riski o kadar artıyor. Bende bu sorun çıktı ve bunu önlemek için bir proton geliştiricisi böyle bir yama tarzı program geliştirmiş sağolsun. Bu plugin kendini picbasic içine ekliyor ve araç çubuklarında gözüküyor. Açıklamalar ingilizce. Eğer okursanız; kesme rutininin başlangıcına INT#STARTH:
sonuna yani context restore'dan hemen önce INT#ENDH:
etiketlerini yazıyorsunuz.
sonra derleyip plugini çalıştırıyorsunuz. Onun ürettiği Dim'leri ve Macroları programa ekleyip. Bu sefer yine kesme rutini başına SYSTEM_SAVEH (18 serisi picler için bundan önce bir de Context Save yazıyoruz), sonuna SYSTEM_RESTOREH (context restore'dan önce) yazıp derliyoruz(ben ayrıca en son kısımda bunların üstüne retfie fast yazdım). Artık sorunsuz çalışıyor. Bu plugin bence büyük bir nimet. Gerçi kesme rutinini asm ile yazınca bir sorun çıkmıyormuş.
Bilginin Efendisi Olmak İçin Çalışmanın Kölesi Olmak Şarttır

muhittin_kaplan

usb ve kesme sıkıntıı bundan olsa gerek.. birde bunu deneyelim

Maxim

mech ,

rica etsem basit bir interrupt örneği koyabilirmisin ?
hatta örnek bir bas dosyasını verebilirmisin ?

ne hikmetse ben başarılı olamadım bir türlü ,

plug-in çalıştıktan sonra ekrana boş geliyor  :(


EDIT :
sanırım benim kodda bir sorun var ,
örnekteki kod ile oluyor ,
ben biraz daha uğraşayım bakayım .

mech

kesme rutininin başına sonuna anlattığım gibi etiketleri yazıp derleyin. Ondan sonra plugini çalıştırın.
Bilginin Efendisi Olmak İçin Çalışmanın Kölesi Olmak Şarttır

inventor

Konu hortlatmış gibi olacağım ama bu plugini bir türlü bulamadım. Adı , kendisi veya linki adresi olan var mı?

muhittin_kaplan


inventor

Teşekkürler Muhittin Hocam,
Tek ümit Maxim de sanırım


Maxim

öncelikle neden buna ihtiyaç duydunuz sormak isterim
zira, bisvs eklentisi yanlışım yoksa 2005 yılına ait
güncel protonda buna ihtiyaç varmı ?

inventor

#14
İki yıl önce proton USART kesmesini rahat kullanabilmek için geçmiştim. RF modülleri ile haberleşmem gerekiyordu. PBP kullanırken protona geçince "bana göre" saçma bazı olaylar gelişti programımda.  Ortaya çıkan sıkıntıları bu forumda dile getirmiştim. Şu linkten hatırlayabilirsiniz.
https://www.picproje.org/index.php/topic,31795.0.html

Burada sorunumuzu çözemeyince bende yarı software kesme yarısı başka bir türden ruhaf bir şekilde sistemi çalıştırmıştım. ama arada enerjileri kesip resetlemek gerekiyordu.

Aradan iki yıl geçti. Protonla bir çok proje yaptık ama iş yine usart kesmeye geldi dayandı. Ve iki yıl önceki sorun yine tekrarladı. İsiste sorunsuz çalışan proje reelde çalışmadı. Yazılımdaki bütün fazlalıkları atıp sadece butona bas,veri gitsin,slave bunu alıp işlesin derseniz oluyor. Yani pcb,kablo,kesme ayarları vb. sorun görünmüyor. Yazılım biraz şişince sıkıntı başlıyor.

Bu forumda buna benzer bir sıkıntı dile getirilmiş. Donanımsal kesmede kesme rutini asm ile yazılmalı diye. Aynı konu yurt dışı kaynaklı bazı yerlerdede tartışılmış. Benimkine benzer sorunlar ortaya çıkmış ve asm ile çözmüşler.

Plugini bu nedenle istemiştim.

Birde biz bakalım derseniz slave ve master yazılımlarını ekleyeyim. Ancak isis ile çalıştırmamız çok anlam ifade etmeyecek. Yapılanları benim hemen boardda deneme gerekecek. Sorun değil denerim.

Selam

mesaj birleştirme:: 13 Şubat 2013, 13:44:14

Alıntı yapılan: fofo - 13 Şubat 2013, 10:53:54
http://www.yukletr.com/download.php?file=7c75040230c2e2790144817055e3ddfe buradan indirebilirsiniz.

http://www.yukletr.com/download.php?file=e7742d734bf8d78a8a8297b36361fdb0    açıklamalar


Teşekkür ederim. Hemen indirip deneyeyim