mikrosaniye cinsinden bekletme nasıl olur?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
fth_murat
Üye
Mesajlar: 17
Kayıt: 25 Nis 2006 03:08
Konum: ankara

mikrosaniye cinsinden bekletme nasıl olur?

Mesaj gönderen fth_murat »

stepmotor kontrolü için paralel portun bir bitinden kare sinyal göndermem gerekiyor, bunun içinde mikrosaniye cinsinden bekletme komutu lazım, bunu döngüyle yapabilirim belki ama oda bilgisayardan bilgisayara değişir(CPU hızına göre) oda benim işimi görmüyor...
poshet303
Üye
Mesajlar: 235
Kayıt: 26 Eki 2005 01:15

Mesaj gönderen poshet303 »

mikrosanye değil ama milisaniye cinsinden bekletmek mümkün.

procedure Sleep(milliseconds: Cardinal);

Buna eşdeğer WinAPI de var sanırım bu procedurede ona çağrı yapıyor.

TTimer da kullanılabilir. Programın durmaksızın çalışsın istersen.
Kullanıcı avatarı
Murat DİCLE
Kıdemli Üye
Mesajlar: 702
Kayıt: 19 Nis 2006 04:12
Konum: İstanbul
İletişim:

Mesaj gönderen Murat DİCLE »

Merhabalar,

belki asm ile mümkün. ama delphide böyle bir şey olacağını sanmıyorum.

ancak biryerde görmüştüm şimdi tekrar arattım.

http://www.prodelphi.de adresi belki sana yardımcı olabilir. micro second bekle yada micro saniylerde işlemler yapmak için endüstriyel bir takım eklentiler veriyor. bir incelemek lazım.

oldu ya incelersen bizede bilgi ver lütfen.

Saygılar...
En son Murat DİCLE tarafından 04 May 2006 09:54 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

Windows realtime bir işletim sistemi değildir. Bu yüzden mikrosaniye ölçeğinde beklemeler yaratmak da mümkün değil.

Bilgisayarlarda ve entegre dediğimiz devrelerde ilginç olan bir konu da, bu sistemlerin de kaos teorisi ile bağdaştıabileceğimiz davranışlar göstermesi. Esasen termodinamik kanunları ile son derece örtüşen bu davranışlar, bilgisayarın aynı koşullarda, aynı işlemleri iki kez tekrarlaması halinde her seferinde farklı zamanlarda işlemi bitirmesi ile sonuçlanıyorlar. Dolayısıyla aynı işlemler için hep aynı işlemci zamanının gerçekleşmesini beklemek de doğru değil.

"High resolution timer" anahtar kelimeleri ile hiç olmazsa görece 1 milisaniyelik kesinliğe ulaşabileceğin bileşenler bulabilirsin.

Daha kesin çözüm tabii ki bir elektronik devre ile step motoru sürmektir. Sana düşen sadece step motoru sürecek olan devreye komutlar göndererek işinin bitmesini beklemek olacaktır.
Kullanıcı avatarı
Murat DİCLE
Kıdemli Üye
Mesajlar: 702
Kayıt: 19 Nis 2006 04:12
Konum: İstanbul
İletişim:

Mesaj gönderen Murat DİCLE »

valla merakımdan bi arama yaptım.

Torry.net te şu kodu buldum. şuan denemedim.

Kod: Tümünü seç

// Wait 0.2ms

procedure PerformanceDelay;
var
  hrRes, hrT1, hrT2, dif: Int64;
begin
  if QueryPerformanceFrequency(hrRes) then
  begin
    QueryPerformanceCounter(hrT1);
    repeat
      QueryPerformanceCounter(hrT2);
      dif := (hrT2 - hrT1) * 10000000 div hrRes;
    until dif > 2;
  end;
end;
bu örnekte 0.2 mili saniye yada 200 micro saniye oluyor :D herhalde öyledir..


ilaveten buradaki HiResTimer komponentine bak
http://www.blue-xplosion.de/englisch/index.htm


saygılar...
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

Başka bir yazılım işlemciye yük bindirdiği anda da 0.2 mikrosaniyeye ulaşılabilecek mi bunu deneyin lütfen. :)

Bu türden işlerin yapıldığı yerler bilgisayarlar değil elektronik devrelerdir :!:
Kullanıcı avatarı
fth_murat
Üye
Mesajlar: 17
Kayıt: 25 Nis 2006 03:08
Konum: ankara

Mesaj gönderen fth_murat »

mutlaka öyledir ancak bilgisayarda bir elektroniktir, sabit bir zaman saykılı vardır, buna göre işlem yapılır ve mikroişlemciler mikrokontrolörlere göre fazlaca hızlıdır... ortalama bir mikrokontrolör 20 Mhzde çalışabilirken, bugün CPU lar 3Ghz de sinyal işleyebilir ve oluşturabilir... yapacağım en son şey bir döngü kurarak tekrar sayısını arayüzden optimum seyiyeye ayarlamak(gerek bilgisayar hızına, gerekse adım aralığına göre)... yardımlarınız için teşekkürler...
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

Hayır, bilgisayarları birer entegre gibi görmeyin. Windows realtime değildir derken söylemek istediğim anlaşılmamış.

Windows gibi multitasking yapan işletim sistemleri görevleri sırayla, belirli zamanlayıcılara göre işletirler. Sizin uygulama thread'inizin çalışması tam da zamanlayıcınız işletilirken durdurulup 40 ms'liğine işlemci gücü başka uygulamaya aktarıldığında ne yapacaksınız?

Yani Windows gibi bir OS'da işlemciye hiçbirzaman %100 sahip olamazsınız. Diğer görevleri de yerine getireiblmek için işletim sistemi sizin uygulamanızın çalıştığı process'i durdurup diğer göreve geçecektir. Çok görevlilik (multitasking) bu şekilde yapılabiliyor.
Kullanıcı avatarı
uğur alkan
Üye
Mesajlar: 227
Kayıt: 29 Ağu 2004 04:49
Konum: Istanbul

Mesaj gönderen uğur alkan »

http://www.torry.net/quicksearchd.php?S ... &Title=Yes

seninle aynı şekilde motor sürmek için kullanıyorum ve oldukça başarılı...
(us) olarak bekletme yapabilirsin. (min 1us)

işini fazlasıyla görür. Windows realtime olmayabilir ama 3GHz lik bir işlemci için saniyenin milyonda biri çok büyük bir zaman, yani windows
1us de çok fazla iş yapabiliyor, senin timerda rahat rahat çalışıyor.
1ns (nano) saniyede belki zamanlar sapıtabilir ama 1us şu an işlemciler ve windows için sorun olmuyor. Pulseları osilaskop ile inceledim gayet temiz ve başarılı.....

Kolay gelsin
Bazen sert rüzgarlar eser başını öne eğmekten asla korkma
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

Motor sürmek için 3 GHZ'lik işlemci kullanmak mantıklı ise söylenecek birşey kalmıyor tabii. :wink:
Kullanıcı avatarı
fth_murat
Üye
Mesajlar: 17
Kayıt: 25 Nis 2006 03:08
Konum: ankara

Mesaj gönderen fth_murat »

burada bilgisayar kullanmanın amacı 3Ghz lik bir işlemci ile motor sürmek diil, mikrokontrolör yazılımıyla vakit kaybetmektense bilgisayar yazılımı daha mantıklı geliyor... bu zaten bir öğrenci projesi, endüstriyel uygulamalarda genelde RS-232 haberleşmesi kullanılıyor... yinede yardımlarınız ve önerileriniz için için teşekkür ederim...
Kullanıcı avatarı
uğur alkan
Üye
Mesajlar: 227
Kayıt: 29 Ağu 2004 04:49
Konum: Istanbul

Mesaj gönderen uğur alkan »

Endüstriyel uygulamalarda step motorlar için RS-232 yeterli olabilir ama
saniyede 100.000 adım atan bir servo motor için seri portun motora yetişmesi imkansız daha yüksek hızlı veri yoları kullanılıyor CAN bus veya
Paralel Port daha ötesinde kesme kullanan özel PCI kartlar....
:?
Bazen sert rüzgarlar eser başını öne eğmekten asla korkma
Cevapla