Pic16f628a programlama sorunu.

Başlatan SSAN2, 28 Kasım 2016, 21:30:39

SSAN2

Herkese merhabalar pic programlama işinde yeniyim. Microcode studio'da yazdığım programı ISIS'te denerken sıkıntı olmuyor. Board üzerinde denerken sıkıntı yaşıyorum. En basitinden başlamak istedim ve şu programı yazdım. Fakat butona bastığım zaman led'i yakamıyorum. If komutunu kullanmadan yaptıgım zaman led sorunsuz şekilde çalışıyor. Sorunun nereden kaynaklandığını anlamayamadım. Yardımcı olursanız sevinirim.

@ __config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _MCLRE_OFF & _LVP_OFF & _CP_OFF

TRISA = %11111111
TRISB = %00000000

PORTA = 0
PORTB = 0 

BASLA:

IF PORTA.0 = 1 THEN
PORTB.0 = 1
ELSE
PORTB.0 = 0
ENDIF

GOTO BASLA
END

Hattuşa

porta.0 in bağlantısı doğru mu? yani o pine bağlı butonun buton ile porta.0 arasında 10k gibi bir değerle GND hattına pullup yaptınız mı? butonun diğer ucu +5v ta bağlımı? yani devreyi çalıştırdığınızda ölçü aletinizle porta.0 da butona basmadığınızda 0v butona basınca da +5v görmelisiniz

ete

Her programın bir açılış gecikmesi olması gerekir. Basla satırından evvel PAUSE 300 şeklinde bir komut satırı ekleyiniz.

Tuş kontrolü çok hızlı bir şekilde yapılır. Tuşa bastığını ve sonrada bıraktığınıda kontrol edersen ve biraz da gecikme koyarsan her şeyi daha iyi görebilirsin. PORTA.0 da bağlı olan tuş'a basıldığını kontrol ediyoruz ve tuşa basılınca Tuş pini HIGH oluyor. Bu durumda Tuş pini LOW da beklemesi gerekir ki Pic basılma konumunu kolaylıkla algılayabilsin. O halde Tuş pinine 10K direnç ile PULL-DOWN yapılması gerekiyor.  Kod'a gelince,
IF PORTA.0 = 1 THEN  'tuşa basılmışmı bakıyoruz 
PORTB.0 = 1  'Basılmış ise PORTB.0 pinini HIGH yapıyoruz.
WHILE PORTA.0=1:WEND 'tuşu bırakıncaya kadar bekle diyoruz.
PAUSE 100 '100 ms bir gecikme koyuyoruz ki pinin High olduğu anlaşılabilsin.Hemde tuş titremesini bu şekilde önlemiş oluyoruz.
ELSE  'basılmamış ise
PORTB.0 = 0  'PORTB.0 pinini LOW yapıyoruz.
ENDIF


Ete

SSAN2

Yorumlarınız için teşekkür ederim. Vermiş olduğunuz kodu ekledim.  Butona bastığım zaman PORTA.0 ucunda +5V görmekteyim. Lakin hala led'i yakmayı başaramadım.

ete

O zaman led ters takılmıştır yada bozuktur. Devrede bir hata göremedim.
Programın BASLA satırından evvel bir yere CMCON=7 komut satırınıda ekleyiver. 16F628A da A portu default olarak Komparatör olarak açılır. İptali için verdiğim komut kullanılmalıdır.
Ete

SSAN2

Problem CMCON=7'yi yazmadığım içinmiş. Yardımınız için çok teşekkür ederim.

Powered by EzPortal