16f877a pull up ve giriş çıkış ayarları

Başlatan assyh, 25 Eylül 2015, 17:32:45

assyh

Merhaba,
16f877a ile css c ile bir şeyler yazıyorum. Deneme kitinde her şey çalışırken board üzerine lehimlediğimde çalışmıyor. Hatalı lehimleme yaptığımı düşünmüyorum defalarca kontrol ettim ve iki board harcadım ayrı ayrı lehimledim. boarddan deneme kitine tekrar aldığımda çalışıyor. sebebi ne olabilir.
ve
pinlerin giriş-çıkış olarak yapılandırılması aşağıdaki gibidir
set_tris_a(0xFF);//a pinleri giriş olarak ayarlandı
set_tris_e(0b111);  //e pinleri giriş olarak ayarlandı
set_tris_d(0x00);  //d pinleri çıkış olarak ayarlandı
set_tris_b(0x00); //b pinleri çıkış olarak ayarlandı
set_tris_c(0b11100000);//c pinleri 0-1-2 giriş olarak ayarlandı 3-4-5-6- çıkış olarak ayarlandı
output_d(0x00);  // D portu çıkışı ilk anda sıfırlanıyor 

ve isis te analog veya dijital olarak dirençleri ayarlamanın ne farkı vardır.

ve pull-up veya pull-down arasındaki buton bağlantı farkını biliyorum. peki programda yazım farkı varmıdır? nasıl bir farktır.
Her bişeye meraklı.

ete

TrisC ayarlaman açıklamana göre yanlış. Oradaki 3 adet 1 diğer başta yer almalı.
Giriş olarak çalışan bir pin mutlaka 2 alternatifli binary lojikten birini taşımadı gerekir. Böylecece bekleme anında beklediği lojik seviye değişir ise işlemci bunu kolaylıkla ayırt edebilir.
İşlemcilerde PortB'nin dahili pullup dirençleri vardır. Bu dirençler aktif edilir ise bu port da giriş olarak ayarlanmış pinler HIGH da bekler. Bu nedenle o pin Low olursa işlemci bunu kolaylıka anlar.
O halde kural-1, pullup yapılmış giriş pinleri programda low olmuşmu diye test edilirler.
Pull-down yapılmış pinler ise High olmuş mu diye test edilirler.

Ete

assyh

öncelikle cevabınız için teşekkürler Ete bey.
anladığım programda pinleri kontrol mü ettirmeliyim low mu high mi diye.
ve diğer sorularımın
cevaplarını da verebilirmisiniz.
1-isis te analog veya dijital olarak dirençleri ayarlamanın ne farkı vardır.

2- pull-up veya pull-down arasındaki buton bağlantı farkını biliyorum. peki programda yazım farkı varmıdır? nasıl bir farktır. her pin gurubu için pull-up bağlantısı yapılırmı ve dahası pull up bağlantısı yapacam diye kasmanın bir manası var mı pull down ile devam etsem ne zararı var

teşekkürler
Her bişeye meraklı.

ete

Bir direncin analog olması onun direnç değerinin ohm kanununa göre devrede işlem görmesi anlamına gelir ve buda bir sürü hesap gerektirir. Digital direnç ise yalnızca iki alternatife göre değerlendirilir low yada high. Bu nedenle isis digital dirençlerle daha hızlı işlem yapar. Bu konu yalnızca pullup yada pulldown dirençler için geçerlidir. Zira analog değer gerektiren devrede digital değer kullanamazsınız ama pullup yada pulldown lar analog değer gerektirmez.

Bir pinin pullup yada pulldown kullanılmasının sonuç açısından bir farkı yok kendini kasman gerekmez. Ancak pullup her zaman avantajlıdır. Buna kendini alıştırsan iyi olur. Nedir avantaj dersen, bir defa dahili  pullup dirençlerinden yararlanman mümkündür. Baskılı devrede daima GND hatları çoğunluktadır dolayısıyla butonlara çekmen gereken GND hattını kolaylıkla bir yerlerden alabilirsin. Anlayacağın bu sistemin PCB çizimi de daha kolaydır. Bu konuda işlemciyi üretenlerde aynı şeyleri düşünmüşlerki dahili dirençleri pullup şeklinde yapmışlar pulldown değil.

Özellikle dahili pullup dirençleri bazen pcb çiziminde size çok fazla kolaylık getirir. Olmasa yerine direnç bağlamanız gerekirken hiç bir şey bağlamadan işinizi halletmek güzel olur.
Butonlar veya anahtar gibi çevre elemanları genelde pcb dışında bir yerlere bağlanır. Oralarda gnd dolaştırmak hiç bir zaman sorun çıkarmaz. Ama artı besleme dolaştırısanız bir yerlere kısa devre ettirme olasılığınız artar. Bu devre için risk teşkil eder. Bu nedenlerden dolayı pullup kullanmak her zaman avantajlıdır.

Ete

assyh

Her bişeye meraklı.

assyh

hocam programı pull up olarak değiştireyim dedim fakat normalde isis te ve pic2 similasyon kitinde çalışan sistem artık çalışmıyor programı normale alıyorum yani butonlardan 0v (gnd) veriyorum çalışıyor.
ADCON1=7
CMCON=7
komutlarını programın başına , main den sonraya heryere koydum denedim sırayla
adc ve analog lar off da.
ccs c kullanıyorum
877a işlemci
sorun hakkında fikri olan varmıdır
Her bişeye meraklı.

ete

Sorunun ne olduğunu anlamak için devre şemasınıda görmemiz gerekir. Ayrıca programın tamamınıda görmemiz gerekir.
Bir pin Pullup yapılmış ise iki türlü yapılabilir. Tabiiki PORTB den bahsediyorum.
Ya o pine bir pullup direnci bağlarsın yada OPTION_REG.7=0 komutunu vererek dahili pullup ları açarsın.
Her şeyden önce simulasyonda çalıştırıp Pullup yaptığın giriş pininin HIGH da bekleyip beklemediğini gözlemlemelisin.
Pin kenarında kırmızı renk olması onun HIGH da beklediğinin işaretidir. Bu durumda programda ilgili pin giriş yapılmış ise ki high görülüyorsa giriş yapılmıştır bu durumda programda o pin test edilirken IF PIN=0 ise şeklinde test etmen gerekiyor.

Ete

assyh

high da bekliyor hepsi kırmızı , butona basınca mavi oluyor. sanırım =1 leri high olarak algılıyor ben onları  karşılaştırma için kullanmak istiyorum olabilir mi. kafaya taktım şimdi bu pull-up işini gerekirse sıfırdan baslayıp isis ve sıfırdan baslayıp kodlamasını adım adım yazıcam .
simdi dışarıdayım eve gidince devreyi de atabilirim . ama devre dediğim gibi butlar gnd iken sorun yok pull up yapılınca tıkanıyor pull up ı da şu şekilde yaptım
programdan bazı kesitler....

void menuGir(void){
lcd_putc("\f");
lcd_gotoxy(1,1);
lcd_putc("A OLAYLARI");
lcd_gotoxy(1,2);
lcd_putc("  B OLAYLARI");
}
void main(){

if (input(menu)){
while(input(menu));
if(menuAc==0 && baslaS==0){
menuAc=menuNo=1;
menuGir();
}
delay_ms(50);
}
if(menuAc==1){
   if (input(asa)){  //Asagi butonuna basildi.
   while(input(asa));
    menuNo++;
    menuHareket();
       
   }
//Asagi butonunu bitti.
if (input(yuk)){ //yukar˝ butonuna basildi.
   while(input(yuk));
   menuNo--;
    menuHareket();
   }//yukar˝ butonuna basildi.//
   if (input(gir)){//gir butonuna bas˝l˝rsa.
   while(input(gir));
      switch(menuNo)
{
case 1:
lcd_putc("\f");
lcd_gotoxy(1,1);
lcd_putc("> A2 OLAYLARI ");
lcd_gotoxy(1,2);
//lcd_putc("HIZ: 987 ");
//printf(lcd_putc,"HIZ:= %03u.%03d",j,i); // EEPROM'da saklanan saniye ve milisaniye deerleri LCD'ye yazd˝r˝l˝yor
printf(lcd_putc,"%03u-%03d",i,j); // EEPROM'da saklanan  deerleri LCD'ye yazd˝r˝l˝yor

delay_ms(50);
break; // yap˝n˝n sonuna git
case 2:
..... Diye devam ediyor
Her bişeye meraklı.

assyh

hocam olay buymus "PIN=0"
pull up ile pull down farkı programda ters kontrol yapmakmış
teşekkür ederim
yardımı olur ise
ccs c de pull-up yapan arkadaşlar kodlarda if(input(PIN_C5) == 0) olarak sorgularlarsa iyi olur.

kolay gelsin
Her bişeye meraklı.

Powered by EzPortal