interrupt farkı (hardware,software)

Başlatan muhittin_kaplan, 19 Ocak 2009, 13:09:04

muhittin_kaplan

herkese iyi çalışmalar
pwm ie örnek çalışma yaparken Protonda kullanılan "On interrupt" ve On_Hardware_interrupt" tanımlamalarındaki farkı çözemedim.
       Device 16F628A
        
        XTAL=20 
        Dim deger As Byte

        Symbol RBIF = INTCON.0 ' RB Port Interrupt Flag
        Symbol INTF = INTCON.1 ' RB0 External Interrupt Flag
        Symbol T0IF = INTCON.2 ' TMR0 Overflow Interrupt Flag
        Symbol RBIE = INTCON.3 ' RB Port Change Interrupt Enable
        Symbol INTE = INTCON.4 ' RB0 External Interrupt Enable
        Symbol T0IE = INTCON.5 ' TMR0 Overflow Interrupt Enable
        Symbol PEIE = INTCON.6 ' Peripheral Interrupt Enable
        Symbol GIE = INTCON.7  ' Global Interrupt Enable

        OPTION_REG = %10000000
       On_hardware_interrupt GoTo KESME
        GIE=1                           
        INTE=1
        TRISB =%00000001
        CCP1_PIN = PORTB.3
        
tekrar: 
        HPWM  0,deger,7500
        GoTo tekrar
        Disable
        
KESME:  
                       
        INTCON=0
            deger=deger + 10
        INTE=1
        GIE=1
        Resume       
        Enable

Yukarıdaki Kodda ISIS stack hatası veriyor
               
Device 16F628A
        
        XTAL=20 
        Dim deger As Byte

        Symbol RBIF = INTCON.0 ' RB Port Interrupt Flag
        Symbol INTF = INTCON.1 ' RB0 External Interrupt Flag
        Symbol T0IF = INTCON.2 ' TMR0 Overflow Interrupt Flag
        Symbol RBIE = INTCON.3 ' RB Port Change Interrupt Enable
        Symbol INTE = INTCON.4 ' RB0 External Interrupt Enable
        Symbol T0IE = INTCON.5 ' TMR0 Overflow Interrupt Enable
        Symbol PEIE = INTCON.6 ' Peripheral Interrupt Enable
        Symbol GIE = INTCON.7  ' Global Interrupt Enable

        OPTION_REG = %10000000
       [B]On Interrupt GoTo kesme[/B]
        GIE=1                           
        INTE=1
        TRISB =%00000001
        CCP1_PIN = PORTB.3
        
tekrar: 
        HPWM  0,deger,7500
        GoTo tekrar
        Disable
        
KESME:  
                       
        INTCON=0
            deger=deger + 10
        INTE=1
        GIE=1
        Resume       
        Enable

Bunda ise hata vermiyor.
Sebebi Konusunda Yardım Ederseniz Sevinirim.

bymrz

donanımsal kesme de resume enable yazmana felan gerek yok..

kesmeye girince hemen context save diyorsun ve kesmeden çıkarken de context restore diyorsun...

ondan sonrada gayet güzel çalışıyor...

Uzun zamandır Microcode Studionun Pic Basic Pro' sunu kullanıyordum ama Protondaki bu hardware kesme olayından sonra bidaha microcode studio ya dönmem imkansız sanırım  :)

ibrsel

Alıntı Yap
Uzun zamandır Microcode Studionun Pic Basic Pro' sunu kullanıyordum ama Protondaki bu hardware kesme olayından sonra bidaha microcode studio ya dönmem imkansız sanırım
Sevgili arkadaşım..Elinde proton ile ilgili türkçe döküman varmı..Bende uzun zamandır Micro Code Studio kullanıyorum.Protona geçmeyidüşünüyorum,ama çalışmak için Türkçe bir kaynak bulamadım..Help inden faydalanmak istedim ama ingilizce zayıf olunca belirli bir yerden sonra işe yaramıyor..

muhittin_kaplan

kitap mevcut, yanlız help ten çeviri pek hoş değil. benim ing var. belki başka bilgi alırım diye kitabı aldım. ama help dosyasndan birebir ve kötü bir çeviri yapılmış.
http://www.tumkitaplar.com/kitap/index.pl?kitap=79206

teknikelektronikci

Alıntı yapılan: "alone_lover"donanımsal kesme de resume enable yazmana felan gerek yok..

kesmeye girince hemen context save diyorsun ve kesmeden çıkarken de context restore diyorsun...

ondan sonrada gayet güzel çalışıyor...

Uzun zamandır Microcode Studionun Pic Basic Pro' sunu kullanıyordum ama Protondaki bu hardware kesme olayından sonra bidaha microcode studio ya dönmem imkansız sanırım  :)

hocam allah razi olsun ya bu stack hatasi beni deli etmisti cözümün böyle olmasi sevindirdi beni bu arada hardware interrupt cok daha hizli oluyor öyle değilmi? yani yazilim ile gegister kontrolü yapilior donanimda ise tamamen kendisimi?
Ey Türk istikbalinin evlâdı! İşte, bu ahval ve şerâit içinde dahi, vazifen; Türk İstiklâl ve Cumhuriyetini kurtarmaktır! Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!

bymrz

evet hız bakımından kesinlikle iyi oluyor, mesela ben 6 kanallı bir DMX receiver yapmıştım, ve bunu pic basic pro ile yapmıştım. Fakat hep titreşimler oluyordu yeterli hızda pwm basamıyordum. Hardware kesme ile bu sorun tamamen çözüldü...

Protonun diğer çok güzel yanı, her yazdığınız basic kodunun karşılığını assembly view da görüyor olmanız, yani registerı kontrol ediyor mu etmiyor mu assembly view dan bakıp anlayabilirsin...

Grafik LCD vs gibi fonksiyonlarının olması da cabası bence...

Geçen birisi forumda demişti, Proton bu kadar iyi de niçin Basic Pro daha çok kullanılıyor diye... Cevap ise enteresan  :)

Proton da "ETE" yok...

ETE hocam sağolsun bi çok bu işe başlayan kişi onun notlarından yararlanmıştır. Yani diyeceğim Erol  hocamın notlarının Proton üzerine olması lazım ki millet Protona geçsin  :)


Fakat çok farklarda yok aslında, az bir ingilizcesi olan helpinden ve sample larından yararlanarak çözebilir herşeyi...

selvi

donanim kesmesi hangi kesmeler icin gecerlidir.rb0,usart ve serin durumunda kullanilabilir mi?ben rb0 ve usart kesmesini protonda donanim kesmesi ile yapmaya calistim.olmadi.genelde pbp ile program yaziyorum.protonu inceledim.kesmekonusunda daha avantajli  olduklari ne soyleniyor.ben daha avantaji yakalayamadim.
  normalde serin komutu ile beraber rb0 kesmesini kullanmak istiyorum.serin komutu kullanildiginda donanim kesmesiyle  rb0 kesmesi olur mu?
Yaşam anlamlandırıldıkça kutsaldır....

teknikelektronikci

ben de ilk zamanlar pic basic pro kullaniordum fakat uzun zamandir proton kullaniorum ve cokta memnunum ve bu protonun help i ile bu isi ögrendim az bir ingilizce ile rahat rahat ögrenilebiliniyor
Ey Türk istikbalinin evlâdı! İşte, bu ahval ve şerâit içinde dahi, vazifen; Türk İstiklâl ve Cumhuriyetini kurtarmaktır! Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!

Maxim

Alıntı yapılan: "selvi"donanim kesmesi hangi kesmeler icin gecerlidir.rb0,usart ve serin durumunda kullanilabilir mi?ben rb0 ve usart kesmesini protonda donanim kesmesi ile yapmaya calistim.olmadi.genelde pbp ile program yaziyorum.protonu inceledim.kesmekonusunda daha avantajli  olduklari ne soyleniyor.ben daha avantaji yakalayamadim.
  normalde serin komutu ile beraber rb0 kesmesini kullanmak istiyorum.serin komutu kullanildiginda donanim kesmesiyle  rb0 kesmesi olur mu?

pic hangi kesmeyi destekliyorsa o oluyor ,
tabi yapabiliyorsan ,

donanım kesmesi hakkında yardım bulabilmende biraz zor aslında .
ama donanım kesmesi harika .

serin komutu değilde " hserin " kullanmak lazım eğer pic in donanımsal özelliğini kullanmak istersek .

muhittin_kaplan

bir farkta ben söyleyeyim (maxiboost yazmıştı sanırım)
yazılımsal kesmede protonda PBP gibi her rutinin her komuutn önüne "kesmem varmı" komutu koyuyor ve bu hem kodlarda şişme yapıyor hemde rutin işletilirken kesme gelirse algılamıyor.
Örnek
delayms 1000
komutunda 1 saniye bekle anlamına gelirki bu 1 saniyelik sürede eğer kesme gelirse algılamaz..

donanımsal kesmede ise böyle bir durum yok nerede gelirse gelsin çalışıyor

muhittin_kaplan

HrSin,HSerin ve HrSout,HSerOut komutları Donanım uart a sahip MCU lar için asenkron haberleşme için Kullanılır.

selvi

pbp da serin komutu  kullanildiginda kesme islemi olsa bile kesmeye gitmiyor.yani serin komutunda takiliyor.protonla ayni bicimiyle program yazilirsa donanim kesmesi ile kesmeye gider mi?
 dongu:
 AL=0  
      SerIn2 PORTA.1,396,[WAIT ("ARA"),dec AL]
      IF   AL=63 THEN
       portb.3=1
      ENDIF
goto dongu
rb0 kesme:
.
.
.
.
end
Yaşam anlamlandırıldıkça kutsaldır....

teknikelektronikci

gerekli register ayarlamalarini yapip hserin kullanir iseniz pbp dada protondada her iki interrupt durumu ndaa kesmeye gider
Ey Türk istikbalinin evlâdı! İşte, bu ahval ve şerâit içinde dahi, vazifen; Türk İstiklâl ve Cumhuriyetini kurtarmaktır! Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!

Maxim

küçük bir çalışma yaptım ,
sanırım bazı şeyler tam bilinmiyor yada bana öyle geldi .

protonda başında "H" harfi olmayan seri komutları tamamen yazılımsal bir komuttur , mesela "RSOUT" gibi .

protonda başında "H" harfi olanlar ,pic in eğer donanımsal seri çıkışı varsa onu kullanan proton+ komutudur ,mesela "HRSOUT" gibi .

bunlardan hiç biri ,kesme değildir !
kesme, yani interrupt oluşturmak için gerekli kurallar ve komutlar var ,



picbasic ve protonda yazılım kesmesi oluşturmak için ,

" ON INTERRUPT GOTO bilmem ne "
komutu kullanılır ,
bu tip kesmelere yazılım kesmesi deniyor ,
kısacası ,
pic o anda bir işlem yapıyorsa ve tam o anda kesme geldiyse ,
yapılan iş beklenmekte yani bittikten sonra kesmeye gidilmektedir .


Proton da hardware interrupt yani donanımsal kesme oluşturabilmek için ,

" ON_INTERRUPT GOTO bilmem ne "
komutu kullanılır ,
dikkat edin on alt tire interrupt goto diye yazılıyor .

bu tip oluşturulan kesmeler gerçek donanımsal kesmedir .
kısacası ,
picin o anda ne yaptığı önemli değildir ,
kesme geldiği anda kesmeye gidilir.



basit bir test yaptım demiştim :
proton da kullanılan yukarıda yazdığım yazılım ve donanım kullanan komutların ne kadar sürdüklerini proteusta test ettim .

16F628A
osc = 4 mhz

HRSOut komutu :
HRSOut Dec SAY ,13,10


9600 kbps 5.19ms
19200 kbps 2.8ms


RSOUT komutu :
RSOut Dec SAY ,13,10


9600 kbps 6.88ms
19200 kbps 4.28ms

teknikelektronikci

merhabalar maxiboost hocam elinize saglik güzel bir calisma olmuş
fakat bir sey sormak istiyorum kac ms oldugunu nasil ölctünüz acaba?
Ey Türk istikbalinin evlâdı! İşte, bu ahval ve şerâit içinde dahi, vazifen; Türk İstiklâl ve Cumhuriyetini kurtarmaktır! Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!