PIC18F2550 Assembly İle 2 Motorun Belirli Koşullara Göre Sürülmesi
Kontrol devresi şekilde de görüldüğü gibi bir sıfırlama(RESET) girişi, 2 motorun denetimini yapan 1-başlat, 1-durdur buton girişi, Aşırı Akım Rölesinden gelen 2 sinyal bilgisi girişi, 2 hata düzeltildi onay butonu girişi, 2 adet Motor1 ve Motor2 çıkışı, 2 hata göstergesi çıkışı ve sayaç devresini süren 3 uçtan oluşmaktadır. 6-harici giriş, 4-harici çıkış ve 3-dahili çıkış olmak üzere toplam 13 adet giriş-çıkış ucu kullanılmıştır.
Sayaç devresi de 1Hz saat darbesi üreteci, 2x7-Parçalı LED gösterge, göstergeleri süren 2xCD4026 7-Parçalı gösterge sürücü entegresinden oluşmaktadır. Gerekirse entegrelerin LED sürücü uçlarına direnç bağlanabilir.
Not: Burada çoğu şeyi ayrıntılarıyla anlattığım için açıklama biraz uzun oldu. Böyle olması konuya tam hakim olmayanlar tarafından konunun rahatlıkla anlaşılabilmesi içindir.
EKLER:
- Veribeti (Datasheet) indirmek için tıklayınız.
- Devrenin çalışmasını bu bağlantıdan izleyebilirsiniz.
- P18F2550ile2MotorKontrol_Proteus.zip
- P18F2550ile2MotorKontrol_MPLAB.zip
2. Devrenin Çalışması:
Devreye enerji verildiğinde, Kontrol devresi kullanıcının BAŞLA butonuna basmasını bekler.
Kullanıcı başla butonuna bastığında;
- 1. Motor devreye girer,
- Ardından gösterge etkinleşir,
- Timer0 etkinleşir ve 10 saniye için gösterge saymaya başlar.
- 10 saniyenin dolması beklenir.
- 10 saniye dolunca, 2. motor devreye girer
- Sayaçlar sıfırlanır ve 30 saniye için kurulur.
- Gösterge 30 saniye saymaya başlar.
- Ancak 1. motor 10sn çalıştıktan ve 2. motor da 30sn çalıştıktan sonra devre DUR butonuyla durdurulabilir. Bu süreden önce DUR butonu işlevsizdir.
- Süreler dolunca DUR butonuna basıldığında önce 2. motor durur. Dur butonuna ikinci kez basıldığında ise tüm devre durur ve kullanıcıdan gelecek başlatma komutunu bekler.
- Herhangi bir esnada RE3/MCLR/VPP bacağına bağlı sıfırlama butonuna basıldığında devre ilk konumuna geri döner ve kullanıcıdan BAŞLAT komutunu vermesini bekler.
2.1. Hata Durumu:
Güç devresinde bir aşırı yüklenme ya da başka bir hata dolayısıyla AAR1(Aşırı Akım Rölesi) ve AAR2 girişlerinden bir hata bilgisi geldiğinde şu senaryolar gerçekleşecektir:
I. Eğer 1. motor 10sn dolmadan önce hata verirse:
- Motor-1 durdurulur.
- Göstergeler kapanır ve sıfırlanır.
- Timer0 durdurulur ve sıfırlanır.
- Motor-1 hata göstergesi yanıp sönmeye başlar.
- Güç devresindeki hatanın giderilmesi beklenir.
- Ardından hata düzeltme onay butonuna basılması beklenir.
- Yukarıdaki işlemler tamamlandığında motor-1 yeniden 10sn çalıştırılmak üzere yazılım içinde kurulur ve ardından motor-1'e yeniden çıkış verilir.
- Sonra göstergeler etkinleşir ve 10sn için sayar.
II. Eğer 1. motor 10sn dolduktan sonra hata verirse ve 2. motor çalışıyors ama 30sn dolmamışsa:
- Motor-1 durdurulur.
- Göstergeler kapanır.
- Timer0 durdurulur.
- Motor-1 hata göstergesi yanıp sönmeye başlar.
- Hatanın giderilip hata düzeltme onay butonuna basması beklenir.
- Motor-2 çalışıyor olduğu için motor-1'in yeniden 10sn çalışmasına gerek yoktur. Bu yüzden sayaçlar sıfırlanmaz.
- Motor-1'e yeniden çıkış verilir.
- Sayaç 30sn bitirmek için kaldığı yerden saymaya devam eder.
III. Eğer 1. motor 10sn ve 30sn süreleri dolduktan sonra hata verirse:
- Motor-1 durdurulur.
- Göstergeler kapanır.
- Timer0 durdurulur.
- Motor-1 hata göstergesi yanıp sönmeye başlar.
- Hatanın giderilip hata düzeltme onay butonuna basması beklenir.
- Motor-2 çalışıyor olduğu için motor-1'in yeniden 10sn çalışmasına gerek yoktur. Bu yüzden sayaçlar sıfırlanmaz.
- Motor-1'e yeniden çıkış verilir.
- Sayaç sistemi etkinleştirilmez çünkü sayma işlemleri bitmiştir.
IV. Eğer 2. motor 30sn dolmadan hata verirse:
- Motor-2 durdurulur.
- Göstergeler kapanır ve sıfırlanır.
- Timer0 durdurulur ve sıfırlanır.
- Motor-2 hata göstergesi yanıp sönmeye başlar.
- Hatanın giderilip hata düzeltme onay butonuna basması beklenir.
- Sayaçlar sıfırlanır ve yeniden kurulur.
- Motor-1 durdurulur ve yeniden 10sn çalışması için kurulur.
- Motor-1 yeniden devreye alınır.
- Timer0 yeniden kurulur ve etkinleştirilir.
- Göstergeler etkinleştirilir ve 10sn için saymaya başlar.
V. Eğer 2. motor 30sn dolduktan sonra hata verirse:
- Motor-2 durdurulur.
- Göstergeler kapanır.
- Timer0 durdurulur.
- Motor-2 hata göstergesi yanıp sönmeye başlar.
- Hatanın giderilip hata düzeltme onay butonuna basması beklenir.
- Motor-2'ye yeniden çıkış verilir.
- Sayaç sistemi etkinleştirilmez çünkü sayma işlemleri bitmiştir.
3. Donanım:
Bu örnek devrede Timer0 ve kesme donanımlarının PIC18 Assembly içinde nasıl düzenlenip programlanabileceği ve işletilebileceği açıklanmıştır. Ayrıca harici bir sayaç devresi ve 1Hz/s'lik bir saat kaynağı devresi kullanılmıştır. Bu sayede 7-Parçalı(burada ortak katotkullanılmıştır) göstergelerin CD4026 ile nasıl sürülebileceği ve 555 entegresi ile nasıl bir saat darbesi kaynağı oluşturulabileceği de görülecektir. Devre bredboard üzerinde kurulmuş ve denenmiştir.
Not: Vidyoyu kaydettikten bu yana yazılım içinde birkaç iyileştirme yaptım. Bu yüzden devre denendiğinde vidyodaki çalışma şeklinden biraz daha farklı olacaktır. Bu iyileştirmeler hata senaryolarının daha kararlı işletilmesi için yazılımın çeşitli bölgelerinde uygulanmıştır.
Aşağıda PIC18F2550 mikrodenetçisinin bacak düzeni ve ardından kontrol devresinin giriş-çıkış uçlarının işlevleri verilmiştir:
28-Pin PDIP, SOIC
1) RA1 (giriş): Motor-1 için hata düzeltildi onay butonu girişi.
2) RA2 (giriş): Motor-2 için hata düzeltildi onay butonu girişi.
3) RA3 (çıkış): 4026 Entegresinin Gösterge Etkinleştirme/Display Enable In(DEI) ucunu denetler.
4) RA5 (çıkış): 4026 Entegresinin Saat Engelleme / Clock Inhibit(INH) ucunu denetler.
5) RB1 (harici kesme girişi): 1. Motorun aşırı akım rölesi kontak bilgisi girişi ve 1. harici kesme ucudur.
6) RB2 (harici kesme girişi): 2. Motorun aşırı akım rölesi kontak bilgisi girişi ve 2. harici kesme ucudur.
7) RB3 (giriş): BAŞLA butonu giriş ucudur.
8) RB4 (giriş): DUR butonu giriş ucudur.
9) RC0 (çıkış): 4026 Entegresinin Sıfırlama / Reset(MR) ucunu denetler.
10) RC1 (çıkış): Motor-1 için hata göstergesi çıkışı.
11) RC2 (çıkış): Motor-2 için hata göstergesi çıkışı.
12) RC6 (çıkış): 1. Motoru süren uçtur.
13) RC7 (çıkış): 2. Motoru süren uçtur.
-
Osilatör kaynağı olarak mikrodenetleyicinin dahili 8Mhz'lik osilatör kaynağı kullanılmıştır. Bu kaynak yazılım içinde 1MHz hızda çalışacak şekilde ayarlanmıştır. Bu sayede osilatör giriş ve çıkış pinleri özgür bırakılmış olup, dijital giriş-çıkış olarak kullanılabilecektir.
-
Sürevci(zamanlayıcı) olarak 18F2550 denetleyicisinin dahili Timer0 donanımı kullanılmıştır. Yazılım bölümünde Timer0'ın hesaplamaları verilecektir.
-
Sayaç devresinin saat kaynağı olarak; saniyede yaklaşık 1Hz'lik darbe üreten bir 555 devresi kullanılmıştır. Ancak istenildiği takdirde saat üreteci olarak yeterli donanıma sahipse, kullanılan mikrodenetleyiciden de yararlanılabilir.
edilebilir. Uygulamada kullandığım 555 saat üreteci devresi ve eleman değerleri aşağıda görülmektedir.
Benim vidyoda kullandığım 555 entegreli devrede saat darbeleri tam olarak her 1sn'de bir üretilmez ancak burada çok hassas zamanlı bir proje yapmadığımız için bu durum göz ardı
-
Uygulamada 555 entegresinin çıkış bacağı olan 3. bacak ve R10 arasından bir kablo ile 1. haneyi süren 4026 entegresinin 1. bacağına (Clock) bağlayın. Böylece sayaç saat kaynağını sağlamış olursunuz.
Eğer 555 sinyal üreteç devresinin nasıl çalıştığıyla ve nasıl hesaplandığıyla kafa yormak istemiyorsanız AŞAĞIDAKİ BİLGİLERİ OKUMADAN GEÇİN.
555 Sinyal Üreteci Devresinin Çalışması ve Hesaplamaları:
-
555 Entegresi burada astable/kararsız kipte çalışmaktadır.
-
Hızlıca: Devreye eneji verildiğinde C2 kondansatörü R8 ve R9 üzerinden dolmaya başlar. C2 uygulanan gerilime tamamen dolduğunda, R9 ve 7.bacak üzerinden 555 entegresi içinde bulunan bir boşaltma transistörü üzerinden şaseye batırılır ve bu yol üzerinden boşalmaya başlar. C2 artı kutbundaki gerilim uygulama geriliminin 1/3 düzeyine gelince 555, 3 numaralı bacağından yüksek çıkış verebilmek için 2 numaralı bacağından gerekli tetiklemeyi almış olur ve ardından 555 çıkışı lojik 1 ya da yüksek seviyededir. Sonra kondansatör R8 ve R9 dirençleri üzerinden yeniden dolmaya başlar. C2 uygulama geriliminin 2/3 düzeyine dolduktan sonra 555 tetikleme durumundan çıkar ve çıkışı lojik 0 ya da düşük seviyeye çeker. İşte kondansatörün dirençler üzerinden dolup, yine direnç ve entegre üzerinden boşalırken geçen zaman T süresini verir ve oluşturduğu testere dişi sinyal, 555 tarafından kare dalga sinyale dönüştürülür. Oluşan bu sinyal bizim gösterge devresi için kullanacağımız saat sinyalidir.
-
Yukarıdaki şekilde boşaltma(discharge) direnç(R9) değeri 14,7k(10k ve 4,7k iki direncin seri bağlanmasıyla oluşturuldu) kullanılmıştır. Dilenirse 14,7k direnç yerine 50k bir potansiyometre bağlanıp gereken değere ayarlanarak 1 saniyeye daha yakın bir süre elde edilebilir. Kondansatör dolarken 1k + 14,7k dirençleri üzerinden dolmakta, boşalırken de 14,7k direnci boyunca 555'in 7.(discharge) ucu aracılığıyla boşalmaktadır. Bu da %50'ye yakın bir görev çevrimi/duty cycle oranı vermektedir (tam oran = %51,13647).
-
Bu değerlerle 555 entegresinin veribetinde(datasheet) verdiği süre formülünü kullanarak hesaplayacak olursak:
T = 0,693 x (R8 + 2 x R9) x C2
T = 0,693 x ([1x103] + 2 x [14,7x103]) x (47x10-6)
T = 0,693 x (1000 + [2 x 14700]) x 0,000047
T = 0,693 x 30400 x 0,000047
T = 0,9901584 saniye (1 saniyeden 9,8416 milisaniye eksik :) )
Yukarıdaki sonuca göre frekansı bulmak istersek şu formülle hesaplayabiliriz:
f = 1 / t
f = 1/0,9901584 = 1,009939419793843Hz
-
Sayaç devresi 2x7-parçalı (7-segment) LED göstergeleri ve bu göstergeleri süren 2xCD4026 birimlerinden oluşur. 10 ve 30 saniyelik süreler mikrodenetleyicinin dahili sürevcisinde üretilir ve bu süreler boyunca gösterge devresi 4026 entegresinin denetim esnekliğinin olması sayesinde; mikrodenetleyicinin RA3, RA5 ve RC0 uçları tarafından denetlenir.
CD4026 entegresinin bacak yapısı aşağıda gösteriliyor.
-
Donanım bölümünde son olarak 7-parçalı ortak katot LED göstergenin şeklini ve iç yapısını paylaşacağım:
Yukarıdaki şekilde göstergenin bacak bağlantısı ve iç yapısının mantığı görülüyor.
Buna göre 4026 entegresinin "a,b,c,d,e,f,g" uçları göstergenin karşılık gelen "a,b,c,d,e,f,g" uçlarına dirençler aracılığıyla ya da doğrudan bağlanabilir.
Eğer daha güvenli olması açısından direnç bağlamaya karar verilirse 7 adet 220 ohm değerinde direnç bağlanabilir.
4. Yazılım:
Yazılımda kullanılan neredeyse tüm yazmaçların/dosyaların, etiket ve komutların Türkçe açıklamaları yapılmıştır. Burada kesmelerin ve Timer0 sürevcisinin hazırlanması, Timer0 hesabı, yazılım bayrakları ve yazılım sayaçlarının açıklamaları yapılacak.
-
Timer0 önce 10 saniye sonra da 30 saniyelik süreleri üretmesi için kullanılmıştır. PIC18F2550'de Timer0'ın önölçekçisi(prescaler) PIC16 serisinde olduğu gibi WatchDog Timer ile paylaştırılmamıştır. Önölçekçi yalnızca Timer0'a aittir. Ayrıca Timer0 ya 8-bit ya da 16-bit kipinde çalışma özelliğine sahiptir. Aşağıda Timer0'ın 8-bit kipinde blok diyagramı görülüyor.
Timer0 ile ilgili düzenlemeler T0CON yazmacı üzerinden yapılır. Aşağıda T0CON yazmacı görülüyor. T0CON yazmacı ile Timer0 blok diyagramına biraz konsantre olursanız Timer0 donanımının T0CON denetim yazmacı üzerinden yüklediğiniz değere göre nasıl denetlediğinin mantığını az çok kavrayabilirsiniz.
T0CON: TIMER0 CONTROL REGISTER/TIMER0 DENETİM YAZMACI
TMR0ON | T08BIT | T0CS | T0SE | PSA | T0PS2 | T0PS1 | T0PS0 |
Bit 7 | Bit 6 | Bit 5 | Bit4 | Bit 3 | Bit 2 | Bit 1 |
Bit 7 TMR0ON: Timer0 On/Off Control Bit/Timer0 Aç/Kapa Denetim Biti
1 = Timer0'ı etkinleştirir
0 = Timer0'ı durdurur
Bit 6 T08BIT: Timer0 8-Bit/16-Bit Control Bit/Timer0 8-bit/16-bit Denetim Biti
1 = Timer0 8-bit kipinde çalışır
0 = Timer0 16-bit kipinde çalışır
Bit 5 T0CS: Timer0 Clock Source Select Bit/Timer0 Saat Kaynağı Seçim Biti
1 = Saat kaynağı T0CKI bacağından alınır
0 = Saat kaynağı dahili komut çevrimi sinyalinden gelir (1/Fosc)
Bit4 T0SE: Timer0 Source Edge Select Bit/Timer0 Saat Kaynağı Kenarı Seçim Biti
1 = T0CKI bacağına uygulanan her düşen kenarda artar
0 = T0CKI bacağına uygulanan her yükselen kenarda artar
Bit 3 PSA: Timer0 Prescaler Assignment Bit/Timer0 Önölçekçi Atama Biti
1 = Önölçekçi atanmaz, Timer0 saati önölçekçiden tamponlanarak verilir
0 = Önölçekçi atanır, Timer0 saati önölçekçinin çıkışından verilir
Bit 2-0 T0PS2:T0PS0: Timer0 Prescaler Select bits/Timer0 Önölçekçi Oranı Seçim Bitleri
111 = 1/256 Önölçekleme oranı
110 = 1/128 Önölçekleme oranı
101 = 1/64 Önölçekleme oranı
100 = 1/32 Önölçekleme oranı
011 = 1/16 Önölçekleme oranı
010 = 1/8 Önölçekleme oranı
001 = 1/4 Önölçekleme oranı
000 = 1/2 Önölçekleme oranı
Yazılımda Timer0 aşağıdaki şekilde programlanmıştır:
-
Timer0 8-bit kipinde,
-
Timer0 saat kaynağı dahili osilatörden,
-
Timer0 saat kaynağı düşen kenar,
-
Timer0 önölçekçi atanmış
-
Önölçekleme oranı = 1/256 olacak şekilde programlanmıştır.
Bu düzene göre Timer0 taşma ve yazılım sayaçlarının değerlerini şöyle hesaplanır;
Dahili komut çevirimi frekansı(Fkomut):
Fosc = 1MHz = 1000000Hz
Fkomut = Fosc/4 = 1000000/4 = 250000Hz = 250KHz
Dahili komut çevrimi süresi(Tkomut):
Tkomut = 1/Fkomut = 1/250000 = 0,000004 saniye = 4 mikrosaniye
Timer0 sayma aralığı süresi (T0sas):
T0sas = Tkomut x önölçekçleme oranı
T0sas = 4us x 256 = 1024us
Yani Timer0 her 1024us'de bir TMR0L yazmaç değerini bir artırır.
Timer0 kesme gecikmesi (T0kesme):
Yani her 262,144 milisaniyede bir TMR0L yazmacı 256'dan 000'a yuvarlanacak. 256'dan 0'a her yuvarlanışında bir taşma oluşacak ve bu taşma bir Timer0 kesmesi üretecek.
10 saniyelik süre üretmesi için yazılım sayacına yüklenecek desimal değerin hesabı:
10 saniye = 10000 milisaniye
Sayaç10 = 10000ms / 262,144ms
Sayaç10 = 38,14697265625
Küsüratı atarsak; yazılım içinde SAY10 sayaç dosyasına yüklememiz gereken desimal değer = 38
30 saniyelik süre üretmesi için yazılım sayacına yüklenecek desimal değerin hesabı:
30 saniye = 30000 milisaniye
Sayaç30 = 30000ms / 262,144ms
Sayaç30 = 114,44091796875
Biz bunu 115'e yuvarlayalım 30s'den bir kaç ms fazla saysın sorun değil; öyleyse yazılım içinde SAY30 sayaç dosyasına yüklememiz gereken desimal değer = 115
-
Timer0'ı hazırladıktan sonra kesmeleri hazırlayacağız. PIC18 serisi kesmeleri önceliklendirebilecek şekilde üretilmiştir. Yani kesmeler Yüksek Öncelikli ve Düşük Öncelikli olarak yetkilendirilebilir. Ayrıca bu seri 3 adet harici kesme kaynaklarına sahiptir. Burada 2 harici kesme (INT1/AAR1 ve INT2/AAR2) PortB bacakları üzerinden kurulmuş, 1 tane de dahili kesme (Timer0) kullanılmıştır. Burada kesmeler şöyle düzenlenmiştir:
-
Timer0 kesmesi Düşük Öncelik/Low Priority, kesme vektörü: 0x0018,
-
Harici kesmelerin ikisi de Yüksek Öncelik/High Priority, kesme vektörü: 0x0008
-
Şimdi kesmeleri düzenlerken kullandığımız kesme denetim yazmaçlarını inceleyelim. Burada yalnızca programda kullanacağımız yazmaçların ve denetim bitlerinin açıklamasını vereceğim. Bu yazmaçlarla ilgili daha ayrıntılı bilgiler için ürünün veribetine başvurun.
RCON: RESET CONTROL REGISTER/SIFIRLAMA DENETİM YAZMACI
IPEN | SBOREN | -- | RI | TO | PD | POR | BOR |
Bit 7 | Bit 6 | Bit 5 | Bit4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
Bit 7 IPEN: Interrupt Priority Enable Bit/Kesme Öncelik Etkinleştirme Biti
1 = Kesmelerde öcelik düzeylerini etkinleştir0 = Kesmelerde öncelik düzeylerini etkisizleştir.
Bu yazmaçtan sadece kesme öceliği özelliğini etkinleştireceğiz. Bunun için yapmamız gereken IPEN bitini 1 yapmaktır.
INTCON: INTERRUPT CONTROL REGISTER/KESME DENETİM YAZMACI
GIE/GIEH | PEIE/GIEL | TMT0IE | INT0IE | RBIE | TMR0IF | INT0IF | RBIF |
Bit 7 | Bit 6 | Bit 5 | Bit4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
Bit 7 GIE/GIEH: Global Interrupt Enable Bit/Küresel Kesme Etkinleştirme Biti
1 = Maskelenmemiş tüm kesmeleri etkinleştirir0 = Tüm kesmeleri etkisizleştirir
IPEN = 1 iken (Kesme önceliği etkinken):
1 = Tüm yüksek öncelikli kesmeleri etkinleştirir0 = Tüm yüksek öncelikli kesmeleri etkisizleştirir
Bit 6 PEIE/GIEL: Peripheral Interrupt Enable Bit/Çevresel Kesmeleri Etkinleştirme Biti
IPEN = 0 iken(Kesme önceliği etkisizken):1 = Maskelenmemiş tüm çevresel kesmeleri etkinleştirir0 = Tüm çevresel kesmeleri etkisizleştirir
IPEN = 1 iken (Kesme önceliği etkinken):
1 = Tüm düşük öncelikli kesmeleri etkinleştirir
0 = Tüm süşük öncelikli kesmeleri etkisizleştirir
Bit 5 TMR0IE: TMR0 Overflow Interrupt Enable Bit/TMR0 Taşma Kesmesi Etkinleştirme Biti
1 = Timer0 taşma kesmesi etkin0 = Timer0 taşma kesmesi etkisiz
Bit 2 TMR0IF: Timer0 Overflow Interrupt Flag Bit/Timer0 Taşma Kesmesi Bayrak Biti
1 = Timer0 taşma kesmesi oluştu (bu bayrak yazılımda temizlenmeli)0 = Timer0 taşma kesmesi oluşmadı
INTCON yazmcaından yüksek ve düşük öncelikli kesmeleri GIEH: Global Interrupt Enable High/Yüksek Öncelikli Kesmeleri Etkinleştirme Biti ve GIEL: Global Interrupt Enable Low/Düşük Öncelikli Kesmeleri Etkinleştirme Bitini kurarak(lojik 1 yaparak) etkinleştirdik. Ardından hatalı kesme oluşmasını önlemek için kesme bayraklarını temizledik. Sonra Timer0 kesmesini de etkinleştirdik.
Kesme yetki önceliği ve Timer0 düzenlemelerinin yapılması için yazmaçların nasıl programlanması gerektiğini gördük. Şimdi yüksek öncelikli kesme yetkisi olan INT1 ve INT2 harici kesmelerinin nasıl kurulacağını görelim. Bununla ilgili kullandığımız yazmaçlar ve açıklamaları şöyle:
INTCON2: INTERRUPT CONTROL REGİSTER 2/KESME DENETİM YAZMACI 2
INTEDG0 | INTEDG1 | INTEDG2 | -- | TMR0IP | -- | RBIP | |
Bit 7 | Bit 6 | Bit 5 | Bit4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
Bit 7 RBPU: PORTB Pull-Up Enable Bit/PORTB (dahili) Pull-up (dirençlerini) Etkinleştirme Biti
1 = Tüm PORTB Pull-up'ları etkisizleştirilir
0 = PORTB pull-up'ları bireysel port mandal(latch) değerlerine göre etkinleştirilir
Bit 5 INTEDG1: External Interrupt 1 Edge Select Bit/Harici Kesme 1 Kenar Seçim Biti
1 = Yükselen kenarda kesme
0 = Düşen kenarda kesme
Bit 4 INTEDG2: External Interrupt 2 Edge Select Bit/Harici Kesme 2 Kenar Seçim Biti
1 = Yükselen kenarda kesme
0 = Düşen kenarda kesme
Bit4 TMR0IP: Timer0 Saat Kaynağı Kenarı Seçim Biti
1 = T0CKI bacağına uygulanan her düşen kenarda artar
0 = T0CKI bacağına uygulanan her yükselen kenarda artar
Burada PortB pull-up larını etkisizlesştirdik, Kesme-1 ve Kesme-2 kenarlarını düşen kenar yaptık, Timer0 kesme önceliğini Düşük Öncelik yaptık.
INTCON3: INTERRUPT CONTROL REGİSTER 3/KESME DENETİM YAZMACI 3
-- | -- | ||||||
Bit 7 | Bit 6 | Bit 5 | Bit4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
Bit 7 INT2IP: INT2 External Interrupt Priority Bit/INT2 Harici Kesme Önceliği Biti
1 = Yüksek Öncelik
0 = Düşük Öncelik
Bit 6 INT1IP: INT1 External Interrupt Priority Bit/INT1 Harici Kesme Önceliği Biti
1 = Yüksek Öncelik
0 = Düşük Öncelik
Bit 4 INT2IE: INT2 External Interrupt Enable Bit/ INT2 Harici Kesme Etkinleştirme Biti
1 = INT2 harici kesmesi etkin
0 = INT2 harici kesmesi etkisiz
Bit 3 INT1IE: INT1 External Interrupt Enable Bit/ INT1 Harici Kesme Etkinleştirme Biti
1 = INT1 harici kesmesi etkin
0 = INT1 harici kesmesi etkisiz
Bit 1 INT2IF: INT2 External Interrupt Flag Bit/INT2 Harici Kesme Bayrak Biti
1 = INT2 harici kesmesi oluştu (yazılımda temizlenmeli)
0 = INT2 harici kesmesi oluşmadı
Bit 0 INT1IF: INT1External Interrupt Flag Bit/INT1 Harici Kesme Bayrak Biti
1 = INT2 harici kesmesi oluştu (yazılımda temizlenmeli)
0 = INT2 harici kesmesi oluşmadı
Burada Kesme-1 ve Kesme-2 Yüksek Öncelikli kesmeler olarak yetkilendirilmiştir. İlk önce Kesme bayrakları temizlenmiştir. Sonra Kesme-1 etkinleştirilmiş, Motor-2 çalışmaya başlamadan hemen önce de Kesme-2 etkinleştirilmiştir.
Yararlanılan Kaynaklar: PIC18F2550 Veribeti
Not: Devre tasarımı ve yazılımı iyi bir pratik ve uygulama olması açısından bizzat kendi örnek proje tasarımımdır. Yanlızca anlatımda kullanılan resimler google aramaları ve ürünlerin veribetlerinden(datasheet) elde edilmiştir. Proje kaynak gösterme koşulu ile paylaşılabilir. Ayrıca farklı proje örnekleri ve sistemler geliştirmek için yazılım tabanı sorunsuzca düzenlenip değiştirilebilir. Arayanların yararına olması dileğiyle...
Yorumlarınız
Hiç yorum yapılmamış.Bir yorum ekleyin
İzin verilen html etiketler (tag): <p><div><b><strong><i><u><del><hr><sup><sub><br>