Haberler:

Eposta uyarılarını yanıtlamayınız ( ! ) https://bit.ly/2J7yi0d

Ana Menü

interrupt

Başlatan elektroombank, 01 Ekim 2005, 20:16:19

elektroombank

merhabalar arkadaşlar içinde çıkamadığım bie sorunum var..
PIC Basic Pro kullanıyorum...

ON INTERRUPT GOTO KESMEALTPROGRAMI
 INTCON = 10010000 '

ANAPROGRAMIM:
       ................
      ................
       ..............
KESMEALTPROGRAMI:
  HİGH LED0
 RESUME



YUKARIDAKİ GİBİ BİR PROGRAMIMIM var.Devrede RB0'A PULL-UP YAPILMIŞ buton bağlı.Bu butona basınca kesmealprogramına gitmsini istiyorum..Ama bir yandan PORTB'nin diğer uçlarına
diğer butonlarım ve lcd lerim bağlı..

Ama yukarıdaki programla proteusta simule ettiğmde kesme oluşturmuyor..

Bilmediğim bir noktamı var...

Birde burdaki ıntconun bitlerini anlamı nedir acaba?

yardımıcı olursanız sevinirim

mhk

INTCON register.
Bit 7 genel kesmeyi aktif yada pasif yap ( 1 aktif, 0 pasif)
Bit 6 çevresel kesmeleri ( AD dönşüm kesmesi , seri haberkleşme kesmesi vs. )aktif yada pasif yap ( 1 aktif, 0 pasif)
Bit 5 TMR0 taşma kesmesini aktif yada pasif yap ( 1 aktif, 0 pasif)
Bit 4 RB0/INT  kesmesini aktif yada pasif yap ( 1 aktif, 0 pasif)
Bit 3 PORTB değişiklik kesmesini aktif yada pasif yap ( 1 aktif, 0 pasif)
Bit 2 TMR0 taşma oluştuğunda bu bit 1 olur değilse 0 olur
Bit 1 RB0/INT (portb.0) kesmesi oluştuğunda bu bit 1 olur değilse 0 olur
Bit 0 PORTB değişiklik kesmesi oluştuğunda bu bit 1 olur değilse 0 olur. PORTB7---PORTB4 arasındaki değişiklik için geçerlidir.

RB0 ve TMR0 kesmeleri için OPTION registerini'de ayarlamalısın.TMR0 kullanmıyorsan option reg içindeki tmr0 ayarlarını yapman gerekmez, lakin RB0/INT kesme kenarı seçimini yamalısın. Yazında , "portb'yi pull-up yaptım" pull-up da , portun durumu 1 olacağı için sen kesme kenar seçmesini 0 a ayarlamalısın.Yani butona bastığında port girişi 0 olacağı için , 0 olduğunda kesme alt programına gitmeli. Bunun için OPTION_REG te RB0/INT biti düşen kenarda olarak ayarlamalısın( BIT 6=0)
Yanlış mı yazdın bilmiyorum lakin,
OPTION_REG = 0
 INTCON = %10010000
on interrupt goto kesme 

anaprogram:
...
...
...
goto anaprogram

DISABLE
   kesme:
   ...
   ...
   ...
   INTCON.1=0  ' RB0 da Kesme oluştuğu için bu bit 1 olmuştu.0 yapmak gerekir.
RESUME

END


Şeklinde olmalıydı. Kesme olduğunda kesmeyi oluşturan bit 1 olur ve öyle kalır. Kesme alt programına gidip işlemleri yaptıktan sonra kesmeyi oluşturan bit 0 yapılmalıdır. INTCON ve OPTION registerleri ayrıntılı bilgileri için , 16F877 datasheet sayfa 19-20 iyi incelemeni tavsiye ederim.
"Ya olduğun gibi görün, Ya da göründüğün gibi ol..." Mevlana

elektroombank

sağol un sorunumu halletim ama başka bir sorunum çıktı::D

Kesme alt programına gidiyor verdiğim işlmeleri yapıyor.Ben bunun sonunda pıc'in sleep konumuna geçmesini istiyorm yani resume olmasın

ama olmuyo kitliyo pıc'i

kısır bir  donguye sokuyorum.o oluyofakat bu döngüde RA.5 portuna basılıp basılmadığını denetliyom.Ok  oda tama ama ra.52e basınca tekrar kesme oluşturuyo ve kesme alt programım başına gidiyor.Üstelik alt porgrammımn başına dısable yapmama rağmen

elektroombank

madde madde yapmak istediğimi yazayazı sırası ile karıştırdım böyle.

1-PIC çalışsın
2-Ana Programmı Çalışsın ve bir yandan RB0 ucunu test etsin(yani kesme)

Eğer RB0'a basıldı ise yani 0 ise KESMEALTPROGRAMINA: gitsin.

kesme alt programına gıdılsın gerekli işlemler yapılsın.İşte değişkenler piv f877'nin dahili eeproom'una yazılsın..

 Sonra program kaldığı yerden devam etmesi grektiği yere dönmesin.YAni RESUME olmasın..

Bu sefer RA5 butonunu test etsın.Ama kesme olarak değil..ufak bir dongude yapsın bunu.eğer RA5'E basıldı ise yani 0 ise o zaman ana programın oralarda söylediğim etikete gitsin..


Buraya kadar anlattıklarımdan ra5 butonuna kadar test etmeye geliyom
butonu test ediyorum bir dongude.ama basıldığında goto  xxxx
dediğimde.XXXX'e değil..

KESMEALTPROGRAMIM başına gidiyor.halbuki ben kesme alt programında
kesmeleri dısable yaptım.her donfunun başında kesmeler kapalı.Zaten ra5 kesme butonu değil..

büyük ihtimal resume olmamasından oluyor.

ne yapmalıyım.

HEXF2

Dostum PBP de RESUME komtundan sonra bir etiket yazıp programın kaldığı yerden değilde başka bir adresten devam etmesini sağlayabilirsin

RESUME [I]Etiket

gibi

elektroombank

sağol un arkadaşlarım resume xxxx gibi yapınca olmuyodu.Ama şimdi oldu.Çünkü disablelerde hatam vardı.Onları düzletince oldu.

Şimdi bikaç şey sorcam

eagle ile çizcem devremi.Daha sonrada pcb yapcam.
Ama eagle de mesela xtal seççcem noyutları filan farklı olan var.Hangisini seçcem.Sonuçta hepsi uyar herhalde ama tam otursun istiyorum.

Bilenleriniz varsa açıklarsa karşılıklarını sevinirim..(eagledede)

1-)xtal 4 mhz osilator
2-)22 pf capacitor
3-)PIc 16f877 (altın soketli olan lılıfını yapcam)
4-)Led (Normal bildiğim led)
5-)hitachi hd44780 LCd (eaglede bulamadım)
6-)Butonlar (PIC için kullandığımız mini butonlar işte)
7-)470R resistor
8-)10k resistor
9-)hd44780 constrat ayarı için potans
10-)Roleler (PIC'in 5 v ile büyük bir motor sürmek için)
mod notu: Arkadaşlar lütfen konuları ilgili başlıklar altında devam ettirelim.

mhk

Sevgili elektroombank senden çok küçük bir ricam olacak. Lütfen yapcam etcem kescem gibi kelimeler hoş olmuyor. Lütfen yanlış anlama , bu benim düşüncem. İster düzeltirsin istersen düzeltmezsin.  ;)  Yanlış anlamadığını umarım. Bu arada eğer proteusla çizecek olsaydın sana açıklayabilirdim eagle'a pek alışamadım. Kolay gelsin
"Ya olduğun gibi görün, Ya da göründüğün gibi ol..." Mevlana

elektroombank

Hakılısın gerçekten dostum.Yapcam filan ağız alışkanlığı işte.Ama kescem filan demedimiğimi zannadiyorum:D

 Kusurum varsa bağoşlayın gerçekten.

Abi dediğin gibi devreyi proteusta çizmeye çalışıyorum.Yalnız rolelerde bir sıkıntım var.Roleler hakkında bir açıklama yapabilirmisizin..

elektroombank

Şema Burada

Yukarıya şemasının linkii veriyorum.Rolelerde aklımın almadığı bişey yapmaya çalışıyorum.Şu an ki sistemide zar zor arkadaşların vastısa ile çıkarabildik.Anlayacağınız rolelerden hiç anlamıyorum..

 Devremde ana beslme bu 12 V.Şeihr ceryanını düşürüp alıyoruz bu kaynağı.Birde 9v'luk pilim var.Buda elektrik kesintisi durumunda R1 rolesi vastıası ile devreye giriyor.Ve devre işlemlerini bu şekilde devam ettirebiliyor.Ama tabi pilinde bir değeri var.Pil bitti diyelim sistem yarıda kalır.Bunun için PIC'in RB0 'ını kesme biti yaptık.Elektrik kesildiğinde RL2 vasstası ile bu kesme oluşturuluyor.Bu nu yapmamın sebebi PIC' e elektriğin kesildiğini bildirmek.PIC bu kesmeyi aldıktan sonra kesme alt programına gidiyor.Ve kaydetmesi gereken önemli değişkenleri dahili eeprom'una kaydediyor.Bu sure yaklaşık 1 dk sürdüğünü varsayıyorum.
Bu süre zarfında PIC 9V'luk pil üzerindem besleniyor.PIC değişkenleri kaydetttiği için artık PIC'in elektrikler gelene kadar çalışmasına gerek yok.
Boşuna 9v luk pili bitirmesin istiyorum.Çünkü zaten sistemi durdurmuş ve değişkenleri saklamış oluyorum.Bunun için PIC'in artık 9v' pilden akım çekmesini engellemek .Yani PIC'i kapamak istiyorum.

  Bunun için değişkenlerimi PIC içinde eeprom'a kaydettikten sonra RCO
çıkışından bir sinyal (+5) gönderiyorum.Bu sinyalin role vasıtası ile 9v pili beslemesini bırakmasını artık elektrik var yada yok ana  beselemeden güç alacak konuma gelmesini istiyorum.  
 İşte bu noktada R1 rolesini kullanma gerektiğini düşünüyorum.Bu role sistemi kuramadım..Sizce nasıl olmalı.Roleleri bir türlü kuramıyorum

z

Bir kaç bin microfaratlık kapasitedeki birikmiş enerji, elektrik kesintisinde PIC in verileri saklamak için ihtiyaç duyacağı enerjiyi karşılar. Bunun için
elektrik kesildiğini anlar anlamaz LCD, led vs akım çeken birimleri derhal devre dışı bırakırsan kapasitedeki enerji yeterli olur yetmezse kapasitör değerini artırırsın.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

elektroombank

hıım evet benim eproomdaki yadedeceğim veri 10 byte

her bir kayıtta 10 ms beklemek gerekiyor.yani toplam 100 ms çalışsa benim için yetiyor.

 7805'in ordaki 100uF bunun için yeterlimi.Yeterli sei birde şöyle bir durum var.Normal konumda bu kondansatörler gucu düşürürmü...

elektroombank

dediğiniz gibi tüm akım çekenleri kapam istiyorum.Peki lcd'yi nasıl kapayacağım??

bdgi

herkese selamlar. bir proje için 16f628 kullanıcam da bana iki tane interrupt girişi lazım.bir tanesini RB0 olarak ayarladım da diğeri için "RB Port Change Interrupt" ı ayarlarsam,  RB4,RB5,RB6 yı çıkış olarak ayarlayıp sadece RB7 yi giriş olarak kullanırsam bu interrupt sağlıklı bir şekilde çalışır mı???

bdgi

kendim sordum kendim cevaplıyorum. datasheet den alıntı:
"Four of PORTB's pins, RB7:RB4, have an interrupt on change feature. Only pins configured as inputs can cause this interrupt to occur (i.e., any RB7:RB4 pin configured as an output is excluded from the interrupt
on change comparison). using the interrupt on change feature." çıkış olarak yönlendirilen pinler bu interruptın dışında kalıyormuş...

oneflyman

Alıntı yapılan: "bdgi"kendim sordum kendim cevaplıyorum. datasheet den alıntı:
"Four of PORTB's pins, RB7:RB4, have an interrupt on change feature. Only pins configured as inputs can cause this interrupt to occur (i.e., any RB7:RB4 pin configured as an output is excluded from the interrupt
on change comparison). using the interrupt on change feature." çıkış olarak yönlendirilen pinler bu interruptın dışında kalıyormuş...

bende buna delı oluyorum ıste o kadar programı yazıyosun yazıyosun bır hata hemde ufacık bır sey gozden kacan bısey butun zamanını yıyo
ne bıcım ıs deeeemi :D
bilbikce hicbişey bilmedigini anlıyosun..