Haberler:

Eposta uyarılarını yanıtlamayınız ( ! ) https://bit.ly/2J7yi0d

Ana Menü

if=0 then sorunu

Başlatan eistain_54, 04 Şubat 2011, 16:04:59

eistain_54

iyi çalışmalar.Benim kafamı sürekli karıştıran bir konu varki her ne kadar deneme yaptıysam anlamadım.

servo1 var potra.2
basla:
if servo1=1 then
....
...
diye gidiyor.Burdaki kodda yazan şey nedir.Yani şumu:

eğer servo1 lojik "1" ise .... yap.

yoksa şumu:

eğer servo1 lojik "1" değilse yani 0 ise .... yap?
lütfen yardımcı olun ya...buton sorgulamalarımın hepsi saçma sapan değerler çıkmasına neden oluyor.teşekkürler...
Her gün 24 altın verilirken bunun için kime şükredersin ey ademoğlu!?!

Tagli

İlk dediğin doğru. Basic bilmiyorum ama normalde C, Java vb. birçok dilde karşılaştırma için çift =, yani == kullanılır. Belki sorunun bununla ilgilidir.

Öte yandan sorun çok daha farklı kaynaklı da olabilir. Basit bir program üzerinde deneme yapmanı öneririm, mesela düğmeye basılınca LED yanması gibi.
Gökçe Tağlıoğlu

Ruzgarbey

servo1 var potrb.0
basla:
if servo1=1 then     ' portb nin 0. biti logic 1 ise şunları yap
.......
........
.......
ELSE     ' değilse şunları yap
........
......
endif

kolay gelsin
Hayatta En Hakiki Mürşid İlimdir. M.K. ATATÜRK

Andromeda

1 ise noktalı kısmı icra et...
1 değil ise    " endif" komutundan sonra devam et....
arkadaşın yazdığı gibi else seçenekli olanda var tabii...
" Tanrı, iradesini hakim kılmak için yeryüzündeki iyi insanları kullanır, yeryüzündeki kötü insanlar ise kendi iradelerini hakim kılmak için Tanrı'yı kullanırlar." ..." Tanrı'dan mesaj gelmiyor, biz Tanrı'ya mesaj gönderiyoruz"

eistain_54

Teşekkürler arkadaşlar.Yardımlarınız için sağolun...Srounu çözdüm
Her gün 24 altın verilirken bunun için kime şükredersin ey ademoğlu!?!

RcALTIN

Hangi programlama dilinde olursa olsun if bloğu ancak kendisine belirtilen şart sağlanırsa işler. şart sonucu mantıksaldır, yani "true" yada "false"( bitsel "0" yada "1") ile ifade edilir. örneğin şart "1<2" nin sonucu 1, 2 den küçük olduğuna göre doğru yani "true" (bitsel "1") olur, if bloğu mantıksal doğru sağlandığı için işler. if bloğu şartın doğruluğuan göre işlediğine göre else bloğu da doğruluğun sağlanmadığı yani yanlış ("false") olduğu durumda işler. else if ise bir üst şartın sağlanmayışından sonra kendisine belirtilen yeni bir şartın doğruluğuna göre işler ve alt alta else if blokları halinde istenildiği kadar(derleyiciye göre değişebilir) uzatılabilir.
KİMSEYİ ENGELLEDİĞİM YOK, ÖZEL İLETİ DEVRE DIŞI !

Klein

#6
Yukarıdaki kod C standartlarında şunu ifade ediyor:

Önce servo1'i 1 yap sonra da sonuç 1 ise ( bu durumda sonuç hep 1 olacaktır)  şartı yerine getir , değilse "else" bloğunu işlet.

C eğer  "==" kullanılmamışsa bunu aktarma operatörü olarak değerlendirir.
C  esnek bir dil.  Şart cümlesi içerisinde işlem yapılabilir. Bu sebeple karşılaştırma '<' , '>' değilse muhakkak çift operatör kullanılmalıdır.
örn: "==" , "<=" , ">="

Basic kullanmayalı çooook uzun zaman geçti. Basic'deki karşılaştırma yapısını hatırlamıyorum. Ama belleğim beni yanultmıyorsa '=' karşılaştırma için yetiyordu. Eğer "if" varsa cümleyi şart cümlesi olarak değerlendiriyordu.

Ekleme:
Koda tekrar baktığımda birşey dikkatimi çekti. "servo1" için "portb" tanımlanmış. yani1 baytlık bir veri. Bu durumda karşılaştırma "servo1"in lojik 1 veya lojik 0 oluşuna göre değil  portb baytının 1 ya da farklı bir sayı oluşuna göre yapılacaktır. Bu durumda "portb" portunun diğer bitlerinin durumu sonucu etkiliyor olabilir.

eistain_54

#7
hocam benim bir problemim daha var.Şimdi ben servo sürcem ve butona bastıkça dönsün istiyorum.Proteusta çalıştırınca ilk başta +90 a gidiyo,sol butona basınca tam tersi oluyo -90.Aslında olması gereken şu orta butona basınca servo orta konumda yani hiç oynamayacak.sag butona basınca sağa döncek,ama adım adım.Yani her bastığımda değeri 1 artacak.sola basınca da aynısı.kodlar aşağıda:

TRISA=%00000
TRISB=%11111111

symbol SERVO=PORTA.2
symbol SAG=PORTB.0                  'buton
symbol SOL=PORTB.2                  'buton
MERKEZ VAR PORTB.1                  'buton
KONUM VAR word
PORTA=0
KONUM=500

BASLA:
    IF SAG=0 THEN
        GOSUB SAGA
        ENDIF
    IF SOL=0 THEN
        GOSUB SOLA
        ENDIF
    IF MERKEZ=0 THEN
        GOSUB ORTALA
        ENDIF
    SERVO=1
    PAUSEUS 0+KONUM
    SERVO=0
        PAUSE 16
    GOTO BASLA
SAGA:   
    IF KONUM<1000 THEN
    KONUM=KONUM+2
    ENDIF
    RETURN
SOLA:   IF KONUM!=0 THEN
    KONUM=KONUM-2
    ENDIF
    RETURN
ORTALA:
    KONUM=500
    RETURN
   
END

Her gün 24 altın verilirken bunun için kime şükredersin ey ademoğlu!?!

iyildirim

Servolar 50Hz de 1-2 ms lik darbe süreleri ile çalışıyorlar.  İlk başlangıçta KONUM=500 iken  +90 'a gitmesi normal.
PAUSEUS 0+KONUM satırını
PAUSEUS 1000+KONUM şeklinde değiştirin.
Basic çok bilmem ama sanırım PAUSE 16 16ms bekleme yapıyor. Tam 50Hz yakalamak için bu satırı PAUSEUS 19000-KONUM şeklinde değiştirin.
Bu şekilde servo +90 dan -90'a yaklaşık 10 saniyede gitmeli.
Bu süreyi göremez iseniz büyük ihtimalle kristal vs. ayarlarında bir sorun olması gerekir.

eistain_54

hocam dediğiniz şekilde de denedim bu kez servo biraz geç birsüreyle +90 a gidiyor.Ya işin en kötü tarafı evelsi gün bu program sıkıntısız çalışıyordu.Aradan bir gün geçti ne kodda ne devre değişiklik olmadığı halde proteusta bugün çalışmıyor.Bu arada daha reel de denemedim.
Her gün 24 altın verilirken bunun için kime şükredersin ey ademoğlu!?!

ete

#10
Programın daha önce sıkıntısız çalışması imkansız gibi geliyor bana. Zira sistem hataları var.
Bir servo özellikle isis de devrede yer alan servo min. 0,5 ms ve maksimum 2ms lik pulslarla çalışır.
Servo sıfır konumunda iken o konuma 500 us (0,5ms) lik bir puls ile gelmiştir. Bu konumda şayet servoya 1,25 ms lik yada 1250 us lik bir puls verirseniz servo 90 derecelik orta konuma gelir. Servoye 2 ms lik yada 2.000 us lik bir puls verirseniz de maksimum gideceği noktaya gelir.
Şimdi bu mantık üzerinden düşünür isek ve ayrıca sağa dediğimiz zaman minimum noktasına (sıfır noktası) ve sola dediğimiz zamanda maksimum noktasına gideceğini var sayarsak aşağıdaki kodları kullanmakta yarar var;
Servo pulsout komutu ile çalıştırılmalı ve programın alt satırında yer alan;
    SERVO=1
    PAUSEUS 0+KONUM
    SERVO=0
        PAUSE 16
komutları silinmelidir.
SAGA:
KONUM=KONUM-1
IF KONUM<50  THEN KONUM =50
PULSOUT  SERVO, (KONUM/10)  'pulsout komutunda verilen süre 10us lik katlar şeklinde olduğu için Konum değerini 10'a böldük.
RETURN

SOLA:
KONUM=KONUM+1
IF KONUM>2000 then KONUM=2000
PULSOUT SERVO,(KONUM/10)
RETURN

ORTALA:
PULSOUT SERVO,125 
RETURN


Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

eistain_54

Yardımlarınız için çok teşekkür ederim.Ancak ben halen bir şeyi anlamış değilim.Servo tam anlamıyla nedir?Ya düşünüyorum ama işin içinden çıkamıyorum.Çalışma prensibi nedir?Tamam bu kod çalıştı ama diğerlerini ben nasıl düzenleyeceğim?Ne olur yardım edin.Birde ne kadarlık puls kaç derece döndürür.Bunu da bilmiyorum ve seri prottan servoyu sürmem lazım.Visual basicten gelen sinyallerle açısa olarak döndürmem lazım.Yani pc den 45 derece sola diycem dönücek 32,8 derece sağa diycem dönücek gibi bunu nasıl yaparım.Bildiğim kadarıyla pbp ondalıklı sayılarla çalışamıyor?Bu durumda aklıma proton geliyor ama bu kezde sıfırdan başlamak istemiyorum.Ayrıca dersleri yok ortalıkta nasıl öğreneceğiz bilmem.????
Her gün 24 altın verilirken bunun için kime şükredersin ey ademoğlu!?!

ete

#12
Servoların içinde bildiğin DC motor vardır. Ancak kutu içine yerleştirilen özel devresi ile verilen puls süresine bağlı olarak konum değiştirir.
Puls süreleri tamamen üretici tarafından belirlenmektedir. 0,5ms ile 2ms arasında çalışan servolar çoğunlukta olduğundan her halde isis de buna ait model yaratılmış. Ama gerçekte 0,2 ile 1ms süre arasında çalışan servolar bile vardır. Bu nedenle satın aldığınız servonun özelliklerine bakarak puls süresi konusunda fikir sahibi olmanız en doğrusudur.

Bir diğer konuda 180 derece ile 90 derece çalışan servolar. Kimisi yalnızca 90 derecelik bir hareket yapar kimiside 180 derecelik harket yapar. Ama bir şey sabit ve kesindir. Oda verdiğiniz puls süresi kadar hareket eder servo. Yalnızca bir kere puls vermeniz servonun ilgilikonuma gelmesine yerlidir. Aynı palsi bir kez daha versenizde servo yerinden kımıldamayacaktır. Ancak puls süresi değişirse yeni bir hareket yapacaktır.

Hareketlerin yada konumların nasıl hesaplanacağına gelince, en çok kullanılan servo ile örnek vereyim.
0,5 ms (500 us) minimum ve maksimum süre 2 ms (2000 us) olunca net puls süresi 2000-500 =1500 us olacaktır.
Bu servonun sıfır noktasından orta konuma gelmesi için verilmesi gereken süre 1500/2=750 us ve ayrıca min için 500 us de verilmesi gerektiğinden Orta konum süresi 750+500=1250 us olacaktır.
Aynı servonun 180 derecelik harektinin tamamına 100 dersek. %25 lik konum yani orta konum için   (1500 x 25/100 )+500 =875 şeklinde hesaplanacaktır. Çıkan değer us cinsinden puls süresidir.

Sonuç olarak üretici verilerinden min puls ile maksimum puls süresini bulup yukarıdaki örneğe uygun şekilde hesaplamanı yapabilirsin.

Açısal hesaplama yapmak içinde örnek vereyim. Yukarıdaki hesaplamaya göre servonun sıfır konumundan 180 derecelik konuma gelmesi için gereken puls süresi 1500us idi (2000-500=1500us) . Bu süre 180 derecelik harekete karşılık gelince 1 derecelik hareket için
1500/180 = 8,3333333us puls süresi bulunur. Bu birim kullanılarak 45 derecelik hareket için 45 x 8,3333333=375us olarak bulunur.
Aynı hesaba göre 10 derecelik hareket için 10 x 8,3333333us= 83,3333us likpuls verilmesi işi çözecektir.

Pulsout komutu us cinsinden ve gerçek değerin 10 ile çarpılmış hali ile çalışacağından ondalık sayılara pek ihtiyacınız yoktur aslında.
PBP ilede mükemmel şekilde servoya hakim olablirsiniz.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

Mucit23

Ete hocamız 12 dersinde ayrıntılı bir şekilde anlatmış. İncelemeni tavsiye ederim. Tüm derslerin boyutu büyük olduğu için sadece 12. Dersi yükledim. Buradan indirebilirsin.
http://hotfile.com/dl/104741176/fc786d9/Ders_12.rar.html

eistain_54

Alıntı yapılan: mucit23 - 14 Şubat 2011, 19:13:46
Ete hocamız 12 dersinde ayrıntılı bir şekilde anlatmış. İncelemeni tavsiye ederim. Tüm derslerin boyutu büyük olduğu için sadece 12. Dersi yükledim. Buradan indirebilirsin.
http://hotfile.com/dl/104741176/fc786d9/Ders_12.rar.html
hocam zaten servoyla ilgili ne yaptıysak o derslerden yaptık.Gerçi bu dile bulaşmam da o dersler sayesinde oldu ama :)burdan kedisine teşekkür ediyorum.hocam notlarınız gerçekten bi harika.Ancak bir nokta daha var.Servoda max min ve orta noktalar tam olarak neresi?
Her gün 24 altın verilirken bunun için kime şükredersin ey ademoğlu!?!