Koşul ve değişken hakkında soru

Başlatan laotzi, 31 Ocak 2017, 16:25:00

laotzi

Alıntı yapılan: dursuncemal - 01 Şubat 2017, 00:27:47
4mhz kristal kulangiginiza gore sizin islemciniz saniyede 1miyon islem yapiyor demektir. siz butona bastiginiz anda x degiskenininz okadar hizli sayiyor ki x degiskeninin 1 olup 2 oldugu andaki b portuna bagli olan ledin yanip sondugunu goremezsiniz.belki simulasyon programinda gorursunuz.oncelikle buton okuma mantigini iyice ogrenmelisiniz.bununda bir cok yolu var.size kabaca soyle yardimci olmaya calisayim.

not: direnciniz pull down olacak
#include <16F628a.h>
#fuses INTRC_IO,NOWDT,NOPUT //,NOBROWNOUT
#use delay(clock = 4M )
int x = 0 ; 
void main()
{
set_tris_b (0b00000000) ; 
set_tris_a (0b11111111) ; 


   while(TRUE)
   {


if  (input(pin_a0)) ;
{ 

 x ++ ;

while{pin_a0 == 1}//eger elimiz butona basili ise burada bekleyecegiz.

}

if ( x == 1 )  {  output_high(pin_b1) ; } else{output_low ( pin_b1) ;} //eger x degiskeni 1 ise potumuz aktif (+) degil ise pasif(-)

if ( x == 2 ) {  x = 0; }// eger x degiskenimiz 2 oldu ise x = 0;
  

   

      //TODO: User Code
   }

}


Anlıyorum ancak neden 0 'a tekrar eşitliyoruz . 0 olduğu halde if(x > 1) x = 0; komutunun altına nasıl geçiyor çünki basıyoruz değişken 1 oluyor tekrar 0 oluyor ve bu değişkeni 2 yapamayız . Çünki basıyoruz 1 oluyor if koşulundan sonra x=0 olduğundan tekrar 0 olmazmı alta geçmemesi lağzım ozaman .   :o

Cemre.

Biraz C çalışmanızı tavsiye ederim.

Bu arada, "lazım".

laotzi

Alıntı yapılan: Cemre. - 01 Şubat 2017, 01:01:35
Biraz C çalışmanızı tavsiye ederim.

Bu arada, "lazım".
Calısıyorum zaten işte tam burada takıldım o yüzden buradayım .

dursuncemal

bizim burada aradigimiz x 1 olunca led yansin geri kalan durumda 0 olsun yada senin yaptigini yapalim 2 oldugunda 0 olsun.peki bizim x degiskenimiz porta her bastigimizda artacak int olarak tanimladigimiza gore x artarak 255 olduktan sonra sifir olacak dolayisi ile bize lazim olan
en fazla 1 yada senın yaptıgın gibi 2 ye kadar saymasi.
program  if  (input(pin_a0))  sorgusunun sati yerine geldiginde  o fonksiyonun faliyet alanina girer.yani x++; komutunu isler  ilk olarak x = 0 olsun bu alana girdikten sonra x =1 olur. bir sonraki komutumuz       ' while{pin_a0 == 1}'  burada a0 1 oldugu surece program kilitli kalir.
elini butondan cektikten sonra     ' while{pin_a0 == 1}'  dongusu kirilir ve program yoluna devam eder. sonra   'if ( x == 1 ) ' sorgusuna bakar ve x 1 oldugu icin ledin yanar. daha sonra 'if ( x == 2 )' sorgusuna baka x 1 oldugu icin bu fonksiyonunda alanina girmez.
sonra  'if  (input(pin_a0)) ;' sorgusuna bakar butona basmamis isen o alana girmeden devam eder. sen tekrar butona sasinca x 2 olur elini cekene kadar   'while{pin_a0 == 1}  'de kalir elini cekince  'if ( x == 1 )' sogusunu sorar x 2 oldugu icin else nin parantezine girer ve ledin soner. daha sonra  'if ( x == 2 )' sogusuna bakar ve x=2 oldugu icin x i sifilar bu dongu baylece devam eder bana gore cok kabaca ama ama mantigi alma diye boyle oylesine yazdim.
:=

sifirzero

Paşam delay komutunu kullanmamışsin.debounce olur.simulasyasyondada gercektede birsey goremezsin.yani istedigini alamazsın.zaten bir led yakmak için 1 ay süren var.yakamazsan hiç uğraşma bu işlerle.
sifirzero.blogspot.com [email]sifirrzero@gmail.com[/email] iman hem nurdur hem kuvvettir

laotzi

Alıntı yapılan: serkancetin - 01 Şubat 2017, 09:53:42
Paşam delay komutunu kullanmamışsin.debounce olur.simulasyasyondada gercektede birsey goremezsin.yani istedigini alamazsın.zaten bir led yakmak için 1 ay süren var.yakamazsan hiç uğraşma bu işlerle.

Teessüf ederim neden uğraşmayayım . Okadar çabuk pes etmek olurmu hiç . Bir devreyi 100 kere kurarım yine pes etmem . Burada dikkate alınması gereken adımların büyüklüğü değil, hangi yönde olduğudur .

laotzi

Alıntı yapılan: dursuncemal - 01 Şubat 2017, 01:16:15
bizim burada aradigimiz x 1 olunca led yansin geri kalan durumda 0 olsun yada senin yaptigini yapalim 2 oldugunda 0 olsun.peki bizim x degiskenimiz porta her bastigimizda artacak int olarak tanimladigimiza gore x artarak 255 olduktan sonra sifir olacak dolayisi ile bize lazim olan
en fazla 1 yada senın yaptıgın gibi 2 ye kadar saymasi.
program  if  (input(pin_a0))  sorgusunun sati yerine geldiginde  o fonksiyonun faliyet alanina girer.yani x++; komutunu isler  ilk olarak x = 0 olsun bu alana girdikten sonra x =1 olur. bir sonraki komutumuz       ' while{pin_a0 == 1}'  burada a0 1 oldugu surece program kilitli kalir.
elini butondan cektikten sonra     ' while{pin_a0 == 1}'  dongusu kirilir ve program yoluna devam eder. sonra   'if ( x == 1 ) ' sorgusuna bakar ve x 1 oldugu icin ledin yanar. daha sonra 'if ( x == 2 )' sorgusuna baka x 1 oldugu icin bu fonksiyonunda alanina girmez.
sonra  'if  (input(pin_a0)) ;' sorgusuna bakar butona basmamis isen o alana girmeden devam eder. sen tekrar butona sasinca x 2 olur elini cekene kadar   'while{pin_a0 == 1}  'de kalir elini cekince  'if ( x == 1 )' sogusunu sorar x 2 oldugu icin else nin parantezine girer ve ledin soner. daha sonra  'if ( x == 2 )' sogusuna bakar ve x=2 oldugu icin x i sifilar bu dongu baylece devam eder bana gore cok kabaca ama ama mantigi alma diye boyle oylesine yazdim.



Emeginiz için teşekkür ediyorum zaman ayırıp yazmışsınız açıklayıcı bir yazı oldu .

sifirzero

Kendim 1 aya yakin uğrasmıştım.1 ledi yakmak için ugraştim.led yaniyordu ama elimi yaklaştırinca sönuyurdu.bu gibi sorunun olursa forumda yazıldi bakarsin
sifirzero.blogspot.com [email]sifirrzero@gmail.com[/email] iman hem nurdur hem kuvvettir

laotzi

Alıntı yapılan: serkancetin - 01 Şubat 2017, 11:26:26
Kendim 1 aya yakin uğrasmıştım.1 ledi yakmak için ugraştim.led yaniyordu ama elimi yaklaştırinca sönuyurdu.bu gibi sorunun olursa forumda yazıldi bakarsin
İlgin ve ugraşın için çok teşekkür ediyorum . 1 ayda uğraşsam yaparım ben bunu . Aslında amaç yapmak değil mantığını anlamak ,sizde bu konuda çok yardımcı oluyorsunuz.

sifirzero

sifirzero.blogspot.com [email]sifirrzero@gmail.com[/email] iman hem nurdur hem kuvvettir

laotzi

Alıntı yapılan: serkancetin - 01 Şubat 2017, 11:36:53
En son halini gonderirmisin
Şuanda çalışıyor bu devre ama ben anlamadım devreyi

KOD;
#include <16F628a.h>
#fuses INTRC_IO,NOWDT,NOPUT //,NOBROWNOUT
#use delay(clock = 4M )
int x = 0 ;
void main()
{
set_tris_b (0b00000000) ;
set_tris_a (0b11111111) ;


while(TRUE)
{
if  (input(pin_a0)){
while(input(pin_a0));
x++;
if(x > 1) x = 0; // Bu satırı tam anlamadım yukarıda açıklamış arkadaş sağolsun .
}

if (x == 1){
output_high(pin_b1) ;
}

if (x == 0){
output_low ( pin_b1) ;
}
}
}

Butonlada çalışmıyor ama logic kapıların giriş çıkışları için kullanılan şeyleri kullamıs yukarıda arkadaş.

sifirzero

Senin amacin butona basinca led yansin tekrar basinca sinsun dimi
sifirzero.blogspot.com [email]sifirrzero@gmail.com[/email] iman hem nurdur hem kuvvettir

sifirzero

#42


sifirzero.blogspot.com [email]sifirrzero@gmail.com[/email] iman hem nurdur hem kuvvettir

sifirzero

sifirzero.blogspot.com [email]sifirrzero@gmail.com[/email] iman hem nurdur hem kuvvettir

laotzi

Alıntı yapılan: serkancetin - 01 Şubat 2017, 12:13:42
Bunu dene sonucunu bekliyorum
Compile olmadı şu satırda ; if (input(pin_a0)--1) output_high(pin_b0) ; --1 in olduğu alana or ,and koymamızı istiyor .