Picproje Elektronik Sitesi

DERLEYİCİLER => Proton+ => Konuyu başlatan: private_korsan - 17 Nisan 2014, 12:48:45

Başlık: proton Hardware_Interrupt
Gönderen: private_korsan - 17 Nisan 2014, 12:48:45

Kesme:               
        Context Save
        INTF=0
'***************************************************
'*       PORTB.4=1:PORTB.3=1:PORTB.2=1:PORTB.1=1                 *
'*        While PORTB.0=0                                                              *
'*        filtre=filtre+1                                                                     *
'*        Wend                                                                                *
'*        if filtre>say then fff=1                                                       *
'*        filtre=0                                                                              *
'***************************************************
        Context Restore

kesme nin içine işaretlediğim kodları yazınca kesme saçma sapan çalışıyor. bazen kesmeye gidiyor bazen gitmiyor
fakat kesmenin içine herhangibir kod yazmasam çok güzel çalışıyor
forumda daha öncede konuşulmuştu Hardware_Interrupt kullanımında kesme içerisinde asm kullanılmalıdır diye.bu kodları bir de asm kullanarak denemek istiyorum fakat asm konusunda hiç bilgim yok
rica etsem bir arkadaşım bu kodları asm ye çevirebilirmi?
Başlık: Ynt: proton Hardware_Interrupt
Gönderen: ferit06 - 17 Nisan 2014, 13:21:15
Kesme  ne ile oluşuyor?

Kesmeye girdiğinde tekrar kesme oluşmaması garantiniz altında mı?
Başlık: Ynt: proton Hardware_Interrupt
Gönderen: private_korsan - 17 Nisan 2014, 13:54:21
kesme portb.0 kesmesi
kesme oluştuğunda yeni kesme oluşması zaten donanımsal olarak engellenmiş durumda
Başlık: Ynt: proton Hardware_Interrupt
Gönderen: F.T - 17 Nisan 2014, 18:48:14
proteuseta deniyorsan bende aynı sorunla karşılaşmıştım saçmalıyor.
Başlık: Ynt: proton Hardware_Interrupt
Gönderen: mehmet - 18 Nisan 2014, 00:31:06
Hem kesme oluşacak hem de PB0 low olacak (kontak sıçraması olmadan!).
Bu iki ihtimal zorluk çıkarmıyor mu acaba?

Sadece bir değişken 1/0 yapılsa ana döngü içerisinde, bu değişkene
göre işlem yapılsa; kesme içinde beklemesek olmaz mı acaba?
Başlık: Ynt: proton Hardware_Interrupt
Gönderen: Veli B. - 18 Nisan 2014, 03:33:10
Kodlama mantığınız çok hatalı.
İstediğiniz bölümler kesinlikle kesme dışında kullanılmalı.
Kesme işlemi; MCU ne ile meşgul olursa olsun, dış dünyayı ve iç kontrolleri(Timer vb) takip edebilsin diye vardır. Bu bilgileri işleme sokmak MCU nun işidir. Program içerisinde yaparsınız.
Bir başka konu;
PORTB.0 kesmesi yerine RBChange kesmesini kullanırsanız, while rutinine gerek kalmaz.
Aynı şekilde PORTB nin düşük 4 bitini (Low Nibble);
PortB=PortB | %00001111
şeklinde yaparsanız çok daha hızlı ve az kod kullanımı ile kotarırsınız.
Başlık: Ynt: proton Hardware_Interrupt
Gönderen: Erol YILMAZ - 18 Nisan 2014, 08:35:10
Kesme içinde ASM yazmak diye bir şart kesinlikle yok.

Kesme oluştuğu anda cpu,  birkaç komutta işini bitirip çıkmalı.
Kesme içinde cpu'yu While ile bekletirseniz "ortaya çok karışık" bir kodlama çıkmış olur.

Ayrıca butonun kontak sıçraması her kontak basışta defalarca kesmeye sebep oluyorsa, problem başlar.
Öncelikle donanımda kesme kaynaklarından temiz sinyal gelmesi sağlanmalı...
Hangi hızla, ne geleceği netleştirildikten sonra kesmeler kullanılabilir.

Hep bahsetmişimdir bir arkadaşım var ASM de yazan...

İnterrupt kullanmıyor, herşeyi sorgulayarak yapmaya çalışıyor ki,
belki cpu'nun %0.01 zamanını alması gereken bir rutin için %30 luk zaman ayırıyor.
O çok övündüğü optimizasyonun yerinde yeller esiyor.

Interruptları iyi anlamak lazım Mcu kodlamada...
Başlık: Ynt: proton Hardware_Interrupt
Gönderen: ferit06 - 18 Nisan 2014, 09:49:15
Alıntı yapılan: private_korsan - 17 Nisan 2014, 13:54:21
kesme portb.0 kesmesi
kesme oluştuğunda yeni kesme oluşması zaten donanımsal olarak engellenmiş durumda

Bu donanımsal engellemeyi bir sakıncası yok ise açıklayabilirmisiniz?

Sizin kesme rutininizde kesmeleri yazılımsal olarak engellemediğiniz için  program
INTF=0  satırından itibaren sürekli kesmeye gidiyor ve stack owerflow oluyor. ISIS de  denerseniz ilk kesmeden itibaren  alacağınız hata sonucu bu olacak.
Başlık: Ynt: proton Hardware_Interrupt
Gönderen: private_korsan - 18 Nisan 2014, 14:06:16

Disable
kesme:               
        PORTB.4=1:PORTB.3=1:PORTB.2=1:PORTB.1=1   
        While PORTB.0=0                         
        filtre=filtre+1                         
        Wend                                     
        If filtre<say Then cikis                 
        ttt=sure/4
        If sn>ttt Then z=z+1
       
        If z=c1 Then sayi=sayi+1:z=0:sn=0:EWrite 0,[sayi.LowByte]:EWrite 1,[sayi.HighByte]
cikis:
        filtre=0                                         
        INTCON.1=0       
        Resume
        Enable


bu şekilde yazımsal kesme de hiç bir sıkıntı çıkmıyor sorunsuz çalışıyor
denemelerimi devre üzerinde yapıyorum proteus kullanmıyorum
while döngüsünün içinde değişken ismimdende anlaşılacağı gibi filtreleme yapıyorum kontak sıçraması,parazit gibi durumlarda işlem yapmadan keseden çıkmak için
fakat  Hardware_Interrupt olayını birtürlü başaramadım aynı kodlar orada çalışmıyor
Başlık: Ynt: proton Hardware_Interrupt
Gönderen: ferit06 - 18 Nisan 2014, 14:13:00
işlemci nedir? 16F1827 gibi yeni nesil mi?
Başlık: Ynt: proton Hardware_Interrupt
Gönderen: private_korsan - 18 Nisan 2014, 14:18:14
16F628A