16F877 (20MHz) De PORTD problemi

Başlatan gogoce, 14 Haziran 2017, 01:17:05

gogoce

Merhaba,
uzun soluklu bir programda bug ayıklarken birşey farketim ve sizlerin de başına geldi mi merak ettim. Daha doğrusu hatam nerede bulamadım. Programı sadeleştirdim sonuç yine aynı
@ __config _CP_ALL & _DEBUG_OFF & _BODEN_OFF & _PWRTE_ON & _WDT_OFF & _HS_OSC & _LVP_OFF & _CPD_ON
DEFINE OSC 20
ADCON1=7
TRISA=%11111111
TRISB=0
TRISC=%10101111
TRISD=%00001111
TRISE=255
PORTB=255
PAUSE 500

BASLA:
IF PORTD.3=1 then
PORTB.7=0
ELSE
PORTB.7=1
ENDIF
if PORTD.2=1 then
PORTB.6=0
ELSE
PORTB.6=1
ENDIF
toggle portb.0
pause 200
GOTO BASLA
END   

Bu döngüde portd.3 veya portd.2 ye buton bağlı ve butonlar normalde pull down. Programda sadece portb.0 flash yapıyor. Butonlara bastığımda bir değişiklik olmuyor. Portd.3 e bağlı butona basılı tutup işlemciye reset attığımda (MCLR reset butonu var) portd.7=0 oluyor ve bu şekilde kalıyor. diğer led flash yapmaya devam ediyor. Aynı şart portd.2 için de geçerli. Butona basılı iken işlemciye reset atarsam o şart sağlanıyor ama else şartı sağlanmıyor
Nerede hata yapıyor olabilirim?
Bu saat oldu hala uğraşıyorum

6 işlemci değiştirdim hepsinin üretim tarihi brenner 8 de 0x06 olarak görülüyor. İşlemci farkı mı var ben mi hata yapıyorum ilk defa böyle bişey başıma geldi çözemedim
Ne ukalayı affederim nede yapılan haksızlığı ...
Ya sus adam sansınlar , yada adam gibi kouş ilham alsınlar

furkan41

#1
PORTA:0
PORTB:0
PORTC:0
PORTD:0
Bu satırlarıda ekle ana program başlamadna önceki satırlara

eğer portları temizlemez isen ilk acılıştı icinde ne varsa portların ona göre davranır birde bu dediğim kod satırlarını programa ilave et bakalım değişiklik olacak mı ?

ete

Cevabı kendin söylemişsin zaten. Butonlara basıp reset verirsen buton basılı konumu esas alınır basıyorsun çünki birde butonu bırakıp reset ver bakalım ne olacak. Ayrıca portD yi temizleyen komutu program başına ekle.
Ete

gogoce

Hocam yazmayı unutmuşum portb deki ledler pullup ile bağlı. Portb 0 olunca ledler yanıyor
Ne ukalayı affederim nede yapılan haksızlığı ...
Ya sus adam sansınlar , yada adam gibi kouş ilham alsınlar

ete

Led de pullup olmaz ne demek istediğini anlamadım.
Ete

gogoce

Ledleri sink akımı ile kullanıyorum hocam portb=0 olunca ledler yanıyor
Ne ukalayı affederim nede yapılan haksızlığı ...
Ya sus adam sansınlar , yada adam gibi kouş ilham alsınlar

ete

#6
Şimdi oldu. O zaman açılışta led pinlerini high yapman gerekmezmi?
Yapmışsın zaten. Programa bakılırsa ; Toggle portb.0 komutu açık komut yani bir şarta bağlı değil ve her 200 ms de bir bu komutu çalıştırıyor ve flash yaptırıyor.
Ete. 

gogoce

Tamam da hocam butona bastığımda ledlerde bir değişiklik olmuyor if döngüsü çalışmıyor sanki
Ne ukalayı affederim nede yapılan haksızlığı ...
Ya sus adam sansınlar , yada adam gibi kouş ilham alsınlar

ete

Bazan anlatmaktansa denemek daha iyidir.
Programı ve sim dosyasını koy buraya bakalım neymiş sorun.
Seyehatteyim ancak yarın bakabilirim.
Ete

gogoce

Tamam hocam ekleyeceğim dosyaları
Ne ukalayı affederim nede yapılan haksızlığı ...
Ya sus adam sansınlar , yada adam gibi kouş ilham alsınlar

gogoce

Ne ukalayı affederim nede yapılan haksızlığı ...
Ya sus adam sansınlar , yada adam gibi kouş ilham alsınlar

gogoce

Ne ukalayı affederim nede yapılan haksızlığı ...
Ya sus adam sansınlar , yada adam gibi kouş ilham alsınlar

ete

Evet denedim. Hala da deniyorum. Şimdiye kadar bu işlemcinin D portunu hiç giriş kullanmamışım.
D portu Schmitt Trigger pinlere sahip. Aynı zamanda bu pinler Paralel Slave Port Mode olarak çalışıyorlar. Bunun seçiminide TRISE register 4 nolu biti ayarlıyor.
Sen TRISE=255 verince D portunu çalışmaz hale getirmişsin açıkçası.
Yapılması gereken şey;
E portu pinlerini giriş yapacak isen yalnızca 3 adet pine sahip olduğu için TRIS=%00000111 şeklinde değer verip D portunu normal Input/Output olarak ayarlayan 4 nolu bite sıfır değerini vermelisin.
Bu düzeltmeyi yaptıktan sonra sistemin çalışacaktır.
Ete


gogoce

Teşekkür ederim hocam akşam ilk iş bunu denemek olacak
Ne ukalayı affederim nede yapılan haksızlığı ...
Ya sus adam sansınlar , yada adam gibi kouş ilham alsınlar

gogoce

Dediğiniz gibiymiş hocam. Portd istediğim gibi çalıştı. Sayenizde yine yeni birşey öğrendim. Teşekkür ederim
Ne ukalayı affederim nede yapılan haksızlığı ...
Ya sus adam sansınlar , yada adam gibi kouş ilham alsınlar

Powered by EzPortal