rb0 kesme sorunu

Başlatan feridunarslan, 09 Şubat 2007, 09:55:34

feridunarslan

arkadaslar ben hala soruma bi yanıt bulamadım Prof.EleCTroN arkadasımın söyledigi yazılımı denedim ama normalde calısan devrem calısmaz oldu baska bi oneriniz var mı?

XX_CİHAN_XX

Dostum verdıgın bilgilerle yapabılecegın en dogru yontemı zaten soyledım prof.electronun verdıgı kodları zaten sımulasyon yaptıgında hatayı ap acık goruyorsun sende kendı kodlarını mplabda sımulasyon yapabılırsın.
Tam olarak ne yapmaya calıstıgını acıkca soylesen belkı daha kesın bir yolda gosterebılırız.
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

Prof.EleCTroN

Rica ederim lakin bende isis ve proteus destekli mplab da denedim bir problem olmadı. Çalıştı.

__config _WDT_OFF

eklemezseniz bir problem çıkabilir.

@feridunaslan
yazdığın programı buraya koyman mümkünse sana daha fazla yardımcı olabilirm.

XX_CİHAN_XX

Alıntı yapılan: "Prof.EleCTroN"Rica ederim lakin bende isis ve proteus destekli mplab da denedim bir problem olmadı. Çalıştı.

__config _WDT_OFF

eklemezseniz bir problem çıkabilir.

@feridunaslan
yazdığın programı buraya koyman mümkünse sana daha fazla yardımcı olabilirm.
Arkadaşım bu programın proteusta çalışması cok normal hatayı tabiiki goremezsın.Çünkü dediğim gibi mplabda simule etmen gerekir.
Sebebi ise sadece led yakıp sonduren pasif bir program olması.Alt program cesıtlılıgı yok tek alt yordam var dolayısıyla ozellıkle proteusta gozle gorulur bır sasırma fark edemzsın.Dediğim gibi mplabta simule etseydın demek istediğimi anlardın.Bunu kanıtlamak ıcınde oturup kod yazardım ama sonucu bellı olan bır sey ıcın bosa harcıyacak zamanım yok dogrusu mplabın sımulasyonunda stack tasmasından sonra nasıl hata olustugunu gorebılırsın....
Feridun arakadaşım yapmaya çalıştıgın programı daha acık yazarsan daha net cevaplar alabilirsin!!!
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

picusta

Beyler, kesme, stack kullanacaksaniz hiç PIC ile ugrasmayin.
AVR kullanin ne güzel int. vektör, soft stack PIC'ten 4 kez daha hizli komut süresi..  Adamlar soft USB bile yapmis.

aYe

Picusta hocam stack'siz çalışan mcu var mı ki?

Yada yazdığı programda interrupt kullanmayan birileri?

Ben bu önerinizi ve dayanaklarını pek mantıklı bulamadım açıkcası.
Dünyada iki şey sonsuzdur. İnsanın aptallığı ve evren. Ancak ikincisinden o kadar emin değilim... (Einstein)

picusta

Olay güdümlü, bol kesme kullanan programlar için int. vektör çok faydali oluyor.
Stacksiz MCU'lar nadir, fakat stack üzerinde islemler benim bildigim PIC16'da yapilmiyor (Return vs. hariç). Preemptif program yazilacaksa kullanmak sart.
Genel olarak AVR'in komut seti C'ye daha yakin oldugundan programlar da genelde hem daha hizli isliyor hem Flash'ta daha az yer kapliyor. MCU'nun çekirdeginin mimarisi daha karisik tabii.
Bu mcu'ya gicik oldugunuzu biliyorum, üstelik kolaylikla nem kapiyorlar, ayrica Atmel'in durumu ortada, yani size AVR kullanmanizi tavsiye etmiyorum. Sadece mimarisi PIC'ten daha gelismis, bakmaya deger. ilk baslarken PIC ile değil de AVR ile baslasaydim diger daha karisik islemcilere daha çabuk geçerdim.

Prof.EleCTroN

@XX_CİHAN_XX
Mplab sadece stack taştı hatası veriyor. PIC çalışmaz demiyor. Microchip in hazırladığı "PICmicro™ Mid-Range MCU Family Reference Manual" dosyasında sayfa 100 e bakarsan (özellikle Figure 6-3 'e) benim dediklerimin doğru olduğunu anlayacaksın (Şekli yorumlarsan tabiki) ve adamlar 8 lik stağa 10 kere yazma yapmışlar (Benim gibi). Kısaca denebilirki stack alanında stack pointerın gösterdiği bir adrese n dersek 8 tane veri atıldığında n adresindeki eski veri silinip üzerine yeni veri yazılır.

"PICmicro™ Mid-Range MCU Family Reference Manual" sayfa 100 'ü okuyunuz. Microchip yazmış.

zafzaf82

PIC'in ne kadar amatörce tasarlanmış bi mimariye sahip oldugunu birkez daha görmüş olduk. Nasıl tasarlanmış bi işlemcidirki bu PIC yığını sınırlı olsun. Hadi diyelimki 16 serisi ilkel, 18 serisidemi ilkel tasarıma sahip onlarda da stack alanı sınırlı. 80li yılların mimarisine sahip işlemci olan 8051dirki onda bile kullanıcı stack için RAM'da istediği kadar yer ayırabiliyorsunuz. Kısacası şu PIC denilen popüler mikrodenetleyiciler tamamen magazin kokuyor. Şöyleki 35 komutluk asm dili bile o kadar dandirik ki; 2kb tı geçen uygulamalarınızda bilem bir sürü sorun çıkarıyo ve hızlı denilen işlemcide çarpma veya bölme yapmak için verilen ugraşta cabası. Sonuç olarak PIC mikro kullanmayı ögrenmek için iyi bir işlemcidir. Ancak ileri seviye tasarımlar içinse boştur. Bi de şu teorik bir birikime sahip değilseniz mikroişlemciyle yapabileceğiniz şeylerde saat, termometre vs. şeylerle sınırlı kalır. Yani mikroişlemci bir araçtır. Bu kadar kafa yormak mantıksızdır.
Mikroişlemci bi araçtır, amaç değil.....

sitenindelisi

Şöyle dersek yanlış olmaz sanırım. Stack, mod 8 çalışır. Dolayısı ile üst üste stack üzerine, atıyorum 14 defa yazılmış ise, returnlerde sadece son 6 adım doğru çalışacaktır. Level 1 e döndüğümüz anda return dersek dönüş adresi olarak hangi leveldeki adres alınır?
Stack pointer level 1 i gösteriyor. 8 e geri dönemeyeceğine göre( dönerse yukarı ve aşağı doğru ring şeklinde çalışıyor demek olur)
Bu durumda level 1 deki adres ile stack yazan rutin(örn periyodik bir kesme ve 9. stack yazmayı yapsın) arasında  bir sonsuz döngü oluşur mu?

kurumahmut

C18 ve PIC18 serisine ilgimden kısa bir araştırma yaptım. İlk elde ettiğim bulgular şöyledir:

PIC18 serisinde 32seyiye stack var. PIC16 dan diğer bir farkı yığının başlangıç adresini değiştirebilen yazmaçlar TOSU, TOSL, TOSH. Bunlar sayesinde software stack yapılarak bank ya da banklar yığın olarak kulllanılabiliniyor. C18 C Compiler ile yığının boyutu rahatça ayarlanabiliniyor...

kemalak

8051 mimarisinde kesmeden istediğin adrese dönebilirsin
çünkü yığının başlangıç adresini  programcı isterse değiştirebilir (SP)
Yığındaki değerlerle istediğin gibi oynayabilirsin
önce yığındaki dönüş adresi yeni adres ile değiştirilip RETI komutu ile
yığındaki yeni adres PC ye yüklenir

arslan74

Merhaba,

Arkadaşlar aslında sizin kast ettiğiniz şeyin kısa adı RTOS dur "Real time operating system". PIC için yazılmış çeşitli RTOSlar var. RTOS lu bir işletim sisteminde aynı PC gibi aynı andan iki program çalışabilir. Birini kapatip bir diğer progrmaı çalıştırabilir.
Temel bir işletim sistemi var. Programlar arasındaki ilişkiyi ayarliyor.

RTOS işletim sistemi için enaz PIC18 sersini kullanmanız gerek. PIC12 veya PIC16 serisiyle bu mümkün değil. PIC18 serisinde ayrıca reset komutu var. İşlemciye yazılımla reset atabiliyorsunuz.

Selamlar