Pull up & button

Başlatan kareli, 28 Şubat 2016, 21:11:26

kareli

Kolay gelsin arkadaslar, aklima bir soru takildi.Buda gecenlerde buton display uygulamada kafama takildi.Ornegin ben buton kullanicagin portun hangi pinini kullanicaksam bunu aktif ettim peki ben burda direk +5V 'tan 1 bilgisini gonderdim.Fakat buranin port_b_pullups() seklinde pull up aktif etsem bu sekilde kullansam fark ne olur.Kolay gelsin .
'Bırakın bugün onların olsun: ama uğrunda çok uğraştığım gelecek, benimdir' Nikola Tesla.


dursuncemal

selim hocanin yardimindan sonra sorun kaldi mi ?
fakat sunu belirtmeliyim ki portb pull ups lari aktif ettikten sonra islemcinin + 5 voltundan buton okuyamasin.
:=

kareli

#3
Anladim hocalarim tesekkur ederim.Benim uygulama devrelerimde buton kullandagim zaman devre deki buton calismiyor.galiba bundan dolayi .

mesaj birleştirme:: 29 Şubat 2016, 20:19:23

Hocalarim simdi kafam karisti.J-K f.f. lerde clock palsi negatif kenarda tetikleniyor.Burda da mi ayni durum soz konusu peki biz bu iki durumdan hangisi neye gore kullanicaz.lojik1 den lojik 0 durumunu mi H L
Yoksa lojik0 dan lojik 1 durumunu mu L H ye
'Bırakın bugün onların olsun: ama uğrunda çok uğraştığım gelecek, benimdir' Nikola Tesla.

dursuncemal

#4
buton okumadan bahsediyorsak;  bunun anlami herhangi bir port yada pinden  giris okumak. giris okumanin iki farkli durumu var; not analog haric
mesela potumuzun ra0 oldugunu kabul edelim.ilk once pinimizi giris yapmaliyiz. ( ccs nin giris cıkıs fonksiyonlarini kulanmadi,gim icin normal bir sekılde mantigi anlatmak icin yaziyorum.)
_1.butona basilmadigi surece giris = 1; yani 5v. butona basildıgı zaman giris 0 //pullup dedigimiz durum
ra0'a +5 voltan 4,7k civari bir dırenc baglamaliyiz. butonuda (- )den baglamaliyiz.

trisa0 = 1;//ra0 pinimizi  giris yaptik.simdi portu okuyalim.
if(ra0 == 0){eger ra0  0 ise yapilacak isler }  // eger butona basilmamis ise ra0 portumuz direnc ile + ya bagli oldugundan  okudugumuz deger (+) yani 1 olacaktir. bu durumda  sorgumuzun sarti yerine gelmeyecektir.(sartin olusmasi icin ra0 in 0 olmasi gerekir) butona basilmamis demektir. butona bastigimiz zaman pinimiz (-) yani 0 olacaktir.  bu sefer sorgumuzun sarti yerine gelecektir ve parantez icinde yapmamiz gereken isilemi yapmis olacagiz. elimizi butondan cektigimizde bu dongu devam edecektir.

_2 butona basilmadigi zaman giris = 0;yani ( - ) butona basildigi zaman giris 1 yani (+)///pulldown dedigimiz durum

ra0'a   (-) den 4,7k civari bir dırenc baglamaliyiz. butonu  (+5) den baglamaliyiz.

trisa0 = 1;//ra0 pinimizi  giris yaptik.simdi portu okuyalim.

if(ra0 == 1){eger ra0  1 ise yapilacak isler }  // eger butona basilmamis ise ra0 portumuz direnc ile (- )ye bagli oldugundan  okudugumuz deger ( - ) yani 0 olacaktir. sorgumuzun sarti yerine gelmeyecektir.butona basilmamis demektir. butona bastigimiz zaman pinimiz  (+) yani 1 olacaktir. ve bu sefer sorgumuzun sarti yerine gelecektir ve parantez icinde yapmamiz gereken isilemi yapmis olacagiz.

ozetle  eger buton okuyacak isek ilgili pinimiz giris yapildiktan sonra  4.7k bir direnc ile ya (+ ) ya (pullup) ya da (-)ye (pulldown ) baglamak zorundayiz ve ona gore okumaliyiz.ilgili pin asla bosta kalmamali.eger pin bosta kalirsa
okudugumuz veri kararsiz olur. pul up veya pul down ile bostaki pin girislerinin karaliligini sagladiktan sonra buton ilede degisen durumu algiliyoruz.
:=

kareli

Hocam simdi anladim ben sizin dediginizi. Ben ise hep su sekilde yapiyorudum; ornegin pin_b0 giris yaptim ardindan if(input(pin_bo)) dedigim zaman butona basilmis ani demek istiyor .tekrar iste burada pullup mi pulldown mi kullanmam gerekiyor. Demek istedigim f.f. lerdeki gibi clock palsi dusen kenarda mi tetikleniyor yukselen kenarda mi. Yoksa senin dedigin gibi mi yapmaliyim.
'Bırakın bugün onların olsun: ama uğrunda çok uğraştığım gelecek, benimdir' Nikola Tesla.

dursuncemal

selimkoc  hocanin gonderdigi dokunani iyi incele    https://elektrokod.wordpress.com/2013/11/18/buton-kontrolu/ son derece guzel bir anlatim. ben yinede tarif etmeye calisayim

ff leri unut.ffler palsi donanimsal olarak algiliyor ve isliyor.  islemcide ise yazilimsal olarak algiliyorsun bunuda soru sorarak (kontol ederek) yapiyorsun. soruyu soyle soruyorsun;

if(input(pin_bo)) // dediginde  sunu soruyorsun rb0 girisi 1 mi  yani if(input(pin_bo) == 1) sordugun soru bu.    simdi b0 pininde herhangi bir voltaj yok ise yani bosta ise seni  yaniltir.

bunun icin  rb0 dan (-) bir direnc bagliyorsun. ve  if(input(pin_bo)) = rb0 1 mi ? diye sordugunda sana hep 0 gelecek.(eger direnc baglamamis olsa idin ne gelecegi belli olmazdi ama su durumda hep 0 gelecek bu direncle sen bunu garantiye almis oldun)

+dan rb0 a bir buton ile yada tel parcasi ile voltaj verdiginde rb0 + olur . bu sefer   if(input(pin_bo)) sorgusunun sarti gerceklesmis olur ve sen butona basildigini amlamis olursun.gerekli islemlerini yaparsin.

birde bu var;
Alıntı yapılan: kareli - 28 Şubat 2016, 21:11:26
Kolay gelsin arkadaslar, aklima bir soru takildi.Buda gecenlerde buton display uygulamada kafama takildi.Ornegin ben buton kullanicagin portun hangi pinini kullanicaksam bunu aktif ettim peki ben burda direk +5V 'tan 1 bilgisini gonderdim.Fakat buranin port_b_pullups() seklinde pull up aktif etsem bu sekilde kullansam fark ne olur.Kolay gelsin .

simdi sen  port_b_pullups() yaptigin zaman portb nin pinlerini iceriden direnc ile + ya baglamis oluyorsun. bu piclerin cogunun icinde olan bir ozellik.yani disaridan direnc atmiyorsun islemci iceriden direnc ile pinlerini + ya bagliyor.

bu durumda  if(input(pin_bo)) sorgusunu sordugunda surekli + yani 1 okuyacaksın. bırde buna + 5 voltan 1 bilgisini gonderdim diyorsun ama zaten girisin direnclerle + 5 e bagli yani sen 1 gondermesende giris bilgin 1

dolayisi ile bu baglantida buton okumak icin senin 0 gondermen lazim.  if(input(pin_bo) == 0) diye sorman lazim

umarim anlasilmistir.
:=

kareli

tamam abıcım anladım  :)
'Bırakın bugün onların olsun: ama uğrunda çok uğraştığım gelecek, benimdir' Nikola Tesla.