Haberler:

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

Ana Menü

pic resetleme

Başlatan burak450, 21 Temmuz 2008, 01:04:05

burak450

arkadaşlar diyelim bi döngülü program yazdık gosub burak  diyerek onuda bi alt programa yolladık fakat o da döngülü.burak programı da şöle olsun:
burak:
high portb.1
pause 1000
low portb.1
pause 1000
goto burak

programı burdan ana döngüye nasıl döndürürüz return komutu burda işe yaramaz zannedersem çünkü döngü devam ediyor.ben hem döngüyü kessin hem de ana döngüye dönsün yani resetlesin istiyorum ne yapabilirim ne dersiniz????

solidus

Yanlış bilmiyorsam GOSUB ile dallandığınız programın sonuna RETURN ekleyerek GOSUB satırından bi sonraki satıra gidersiniz..
Kimine göre kralım kimine göre yalanım… Herkes rahatına baksın, ben adamına göre adamım..

erkan614

kaç kez yapçağı veya süresi belli ise yardımcı bir biti set yaparak dönguden çkabilirsin.
interrupt kullan

ete

Ana programa dönmen için elinde bir ip ucu olması gerek. Yoksa dönemezsin. İp ucun ne olabilir bunu en iyi sen bilirsin. Bu şekilde yapılmış bir alt program programı sonsuz döngüye sokar. Bu sonsuz döngüden çıkmak için basit bir if satırı normalde yeterli olabilir. Örneğin. alt programın başına bir sayac koyarsın. ve sayaçın belirli bir değer alması ile bu alt programdan return ile çıkarsın. Bu benim önerdiğim bir yol yalnızca. Doğru yolu senin bilmen gerek çünki program detaylarını biz bilmiyoruz.

sayac=sayac+1
if sayac=100 then return



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

burak450

ete hocam servo motora pulse vermeye çalışıyorum prograM BU.gördüğüm tüm servo motor örneklerinde goto komutu kullanılmış o yüzden sonsuz döngüden kurtaramıyorum.sayaç ile kaç defa döndürmem gerekir motorun pulse ile dönmesi için.bir sefer olmuyo denedim :)

erkan614

similasyondamı çalışıyosun pratiktemi
motorun bir tur dönmesi için özelliklerinde belirtilen adım sayısı kadar pals vermen gerekir. mesela bir turu 10000 olan servo için.

.
.
.
call burak
.
.
.
burak:
sayac=10000
burak1:
pause 200
high pin
pause 200
low pin
sayac=sayac-1
if sayac=0 then return
goto burak1
.
.
.

burak450

pratikte çalışıyorum. o yüzden mesela servoyu orta pozisyonda tutacak pulsout portb.1,150 kodunu kaç tur yaptırmam gerekiyo? sayac=1000 mi sayac=10000 mi ? yada başka bir sayı mı?

erkan614

hangi marka servo kullaniyosun
yhoksa rc servo mu?
rc servvo ise orta noktada durmasi icin pwm %50 olcakti galiba tam hatirlamiyorum gerci
motorun ozeliklerini iyice incele burda dbelirt daha verimli yardim bulursun

burak450

motor bu:
http://www.gittigidiyor.com/main/urun.php?id=10569931
ben denedim

pulsout portb.1,150
pauseus 18500

deyip sonsuz döngüye sokunca ortada duruyo ama bunu sonsuz döngü olmadan nasıl yapabilirim kaç kez döngü yaptırmam gerekiyo??

ete

Burak450,
Servo motorlar bildiğin gibi pals genişliği ile pozisyon alırlar. Genelde 0,5 ile 2 ms arasında bir pals genişliği ile çalışırlar. Senin motor özelliklerine bakmak gerek bu değer ler nedir?.
Şimdi gelelim asıl soruna, Motoru orta konuma almak için  1,25 ms =1250 us lik bir pals vermen yeterli olacaktır. Bu palsi bir kerede versen servo orta konuma gelecek yüz kerede versen aynı konuma gelecektir.
Dolayısıyla sürekli bu palsi verme konusunda uğraşma istersen. Palsi sürekli verirsen motor aynı pozisyonda çakılır kalır. Bir kere verip kesersen ve motoru etkileyen bir kuvvet varsa ve bu kuvvet dişli gücünü yenerse motor konum değiştirebilir.
Şimdi bu açıklamalar üzerinden  bir kez daha düşün ve ne yapmak istediğini açıkça belirt.
Aşağıda benim çalışmalarıma ait örnekleri veriyorum. İncele belki yardımcı olur. Belkide elindedir ama ben yinede vereyim dedim.

http://www.4shared.com/file/32913004/475d8730/SERVO_ETE.html

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

Cenk_Unur

Servo motor kontrol ederken yaptırman gereken döngü sayısı durduğu pazisyondaki açı değerinden göndermek istediğin açı derine ulaşması için motorun yol alma süresine göre değişir. Mesala -30 dereceden +20 ye gitmek için geçen süre ile -30 dan -20 geçen süre faklı oluyor. Bunun için en kolayı kullanacağın max. dönüş mesafesine göre bir döngü sayısı belirlemek. bunuda denemeler ile rahatlıka bulursun.

TRISB=0
ACI VAR BYTE
X   VAR BYTE
PORTB=0
BASLA:
ACI=350

FOR    X=1 TO  25
PORTB.0=1
PAUSEUS 1000+ACI
PORTB.0=0
PAUSEUS 20000-ACI
NEXT    X
GOTO    BASLA
END