PIC İle Çevresel Birimlerin Kontrolü - Yazılım ve Donanım - 001

Başlatan picker, 26 Mayıs 2010, 00:03:48

picker

Değerli arkadaşlar, bugünden itibaren haftada bir PIC ile arayüz (çevresel birimlerle bağlantı) üzerine temelden başlayıp orta-ileri seviyeye doğru giden bir yazı dizisi yazmayı planlıyorum.

Birinci yazımız, en basit ama belki de en önemli PIC çevre birimi olan butonların kontrolü üzerine.

Siviç Bağlantısı
En basit girdi şekli bir siviç veya push butondur. Bu ek bir destekleyici malzeme ile, bir pull – up direnci ile çalışabilir. Fakat halen dikkat edilmesi gereken hususlar vardır. Basit bir push buton veya siviç arayüzü pull-up direnç ile nasıl çalıştığını anlayalım.
Siviç açık pozisyondayken devre direnç üzerinden 5V'a çekilmişdir. Dolayısıyla burada çıkışda herhangi bir gerilim düşüşü olmadığından çıkış gerilimi her zaman beslemeye eşittir (5V). Siviç kapatıldığında ise çıkış gerilimi 0V olacaktır. Bu durumdayken kısa devreyi önleyen malzeme Rp direncidir.

Direnç değeri kritik olmamakla birlikte, çıkış tarafına bir yük bağlandığında, pull-up direnç değeri bu yükten belirgin biçimde düşk olmalıdır ki dijital gerilim değerleri geçerli değerler olabilsin. Diğer taraftan harcanan gücü minimize etmek amacıyla da yeterince yüksek seçilmelidir. Özellikle pille beslemeli devrelerde bu çok önemlidir. Örneğin yük direnci Ri 400k (100A, 5V) olsun. Pull-up direncinin değerini de 100k veya daha düşük bir değer seçelim. Böylelikle siviç açıkken en azından 4V olacaktır. Mantık 1 olarak algılanacak minimum gerilim 2.0V, mantık 0 olarak algılanacak en yüksek gerilim 0.8V'dur (Beslemenin 5V olduğu farz edilmiştir). Kaçak giriş akımı yaklaşık 1A'dir. Güç harcama konusu çok kritik değilse, 10k bir direnç rahatlıkla iş görecektir.
PIC girişi bir açık devre ise, devre Vdd'ye (normalde 5V) çekilir. Bazı portlarda (PORTB) zayıp pull-up'lar harici bir pull-p direncini gereksiz kılabilirler.


[IMG]http://img99.imageshack.us/img99/2000/resim001ss.jpg[/img]

Resmi göremiyorsanız aşağıdaki linke tıklayınız...
http://orkunuslu.freehostia.com/resim001.jpg

Siviçlerde Oluşan Voltaj Sıçramalarını Engellemek
Mekanik siviç veya butonlar kapatılırken, tam kapalı pozisyona gelmeden önce açıkmış gibi voltaj sıçramalarına sebep olurlar. Normalde bunlar farkına varılamayacak veya dikkate alınmayacak kadar kısa sürelidirler. Bununla birlikte mikrosistemlerde gözardı edildiklerinde devrenin yanlış çalışmasına sebep olacak kadar risklidirler. Bu etki genellikle birkaç milisaniye sürer fakat siviç örnekleme hızı yüksek ise, her bir kapanıp açılmayı birkaç defa sanabilir sistem. Diğer taraftan yazılıma bağlı olarak siviç kaynaklı gerilim sıçramalarının devrenin doğru çalışmasına etkisi olmayadabilir. Örneğin yazılım bu voltaj sıçraması tamamlanana kadar girişi kontrol etmiyor ise özel bir voltaj sıçrama önleyici donanımına gerek kalmayabilir.

Aşağıdaki şekil (a)'da siviç kontaklarındaki sıçramadan dolayı gerilimin birkaç defa 5V seviyelerine kadar sıçradığı görülüyor. Siviçe paralel olarak uygun bir kondansatör bağlandığında ise -şekil (b) – bu kondansatör önce 5V'a kadar şarj olacaktır. Kontak kapatıldığında, hızlı bir şekilde kısa devre üzerinden deşarj olur. Tekrardan Pull-Up direnci üzerinden şarj olması ise çok daha uzun süre alacaktır. Mantıksal 0 değerinin minimum eşiği olan (0.8V) değerini aşmadan önce tekrardan kapatılır ise, voltajın mantıksal 1 seviyesine gelmesi engellenmiş olur. Kondansatör şarj sırasında yeterince yavaş bir dolma eğrisi oluşturabilecek kadar büyük seçilmelidir. Bununla birlikte deşarj olma esnasında siviç kontaklarına aşırı yüksek akım vermeyecek, ve siviç açık pozisyona geldiğinde aşırı uzun bir dolum süresine de sebep olmayacak bir değerde olmalıdır. 10K'lık bir pull-up direnci ile 10 nF kondansatörün zaman sabiti yaklaşık 100 ms'dir ve oldukça yeterlidir.

[IMG]http://img337.imageshack.us/img337/1796/resim002a.jpg[/img]

Resmi göremiyorsanız aşağıdaki linke tıklayınız...
http://orkunuslu.freehostia.com/resim002.jpg
(a) Siviç donanımı voltaj sıçramaları (Kondansatör olmadan)
(b) Voltaj sıçrama önleyici kondansatörü takıldıktan sonra

Aşağıdaki şekil voltaj sıçramasını önlemeye örnek olarak gösterilmiştir. İkilik sistemde hazırlanmış bir gösterge ile manuel olarak siviçden her bir girdi her seferinde bir adım olarak sayılacaktır. Bu devrede göstergemizi oluturacak LED'ler PORTD'ye bağlanmış, PORTB'nin boş uçları ise giriş uçları olarak kullanılmıştır. Aşağıda yer alan programda bulunan sıçrama önleyici kısım her çıktı adımından önce bir gecikme sağlayan bir rutin kullanmaktadır. Simülasyonda bunu görmek için siviç modelinde delay (Gecikme) ayarı 1 ms olarak belirlenmiştir. Her ne kadar gerçek hayattaki bir uygulamayı yansıtmasa da, yine de hatalı sayım yapılmasına sebep olacaktır.



[IMG]http://img580.imageshack.us/img580/9738/resim003r.jpg[/img]

Resmi göremiyorsanız aşağıdaki linke tıklayınız...
http://orkunuslu.freehostia.com/resim003.jpg




;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Kaynak Dosya: LED1S.ASM
; Yazan : MPB
; Tarih: 2-12-05
;
; Çıkış binary şeklinde ve manuel adımlarla sayılır
; ve bir push buton ile reset atılması sağlanır.
; Yazılımla gerilim sıçramasını önlemeyi gösterir
;
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
PROCESSOR 16F877 ; İşlemciyi tanımlar
__CONFIG 0x3733 ; Konfigürasyon sigortalarını ayarlar
; Registerlara isim atar....................................
PORTB EQU 06 ; Port B Data Register
PORTD EQU 08 ; Port D Data Register
TRISD EQU 88 ; Port B Direction Register
Timer EQU 20 ; GPR  bekleme sayacı olarak atanmıştır
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Port B'yi tanıma (Port A ön tanımlı olarak giriştir).............
BANKSEL TRISD ; bank 1'i seç
MOVLW b'00000000' ; Port B yön ayarı - giriş/çıkış
MOVWF TRISD ; F86'ya DDR kodunu atar
BANKSEL PORTD ; bank 0'a geç
GOTO reset ; Ana döngüye git
; 'delay' subroutine ........................................
delay MOVWF Timer ; W'yi Timer registerine at
down DECFSZ Timer ; Timer registerini 1 azalt
GOTO down ; 0 olana kadar tekrar et
RETURN ; Ana programa geri dön
; Ana Döngü ...........................................
reset CLRF PORTD ; LEDleri söndür
start BTFSS PORTB,1 ; Reset?
GOTO reset ; Evet – LEDleri söndür
BTFSC PORTB,2 ; Arttır?
GOTO start ; Hayır- bekle
MOVLW 0FF ; Gecikme sayacı
CALL delay ; Sayma işlemi için bekle
BTFSS PORTB,2 ; Devam etsin mi?
GOTO start ; Evet ise bekle
INCF PORTD ; LEDleri 1 arttır
GOTO start ; Sürekli tekrarla
END ; Kaynak kodun sonu






OG notu;
Resim düzenlemesi yapılmıştır.