FT232 - Delphi - XP

Başlatan z, 13 Ocak 2009, 13:19:22

z

Eski protokolde;

115200 baud ile haberlesen islemci her aldigi veriyi gerisin geriye PC ye yolluyor PC de bu veriyi kullanip kullanmamasini soyluyordu. Islemci de bir yandan kendine gelen verinin hatali olup olmadigini mevcut protokol dahilinde anlamaya calisiyordu.

Simdi dedigine benzer bir yapi kurdum.
Blok data transferi ardindan kontrollar yapiliyor.

Yeni protokol daha cok eksik ve hatali veri kacma ihtimali var. Uzerinde calismam gerekecek.

https://www.picproje.org/main/modules.php?name=Forums&file=viewtopic&p=157068#157068
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

OptimusPrime

wsxwsx
max 6Mbit/s hızında sağlam bir uart modülü var aletin üzerinde fakat ben bu denemeleri yaparken işim garanti olsun diye hızı dahada düşürüp 4800 kullandım.

z
denemelerimi yaptım. sonuç tahmin ettiğim gibi. ft232 alma ve verme arasındaki geçişlerden dolayı gecikiyor. 16K veri aktarımı için 64byte lık blok transferler yaptığımda 4.3 dakikalık aktarım süresini, iletişim hızı 4800baud olmasına rağmen yaklaşık 40 saniyeye indirdim. tabi bende kullandığım protokolü biraz geliştirmeliyim. haliyle daha çok eksiği var.

ama şunu öğrendim, ft232 ile yeni haşırneşir olan arkadaşlar için belirtmemde fayda var, bu alet ile blok data transferi yaptırdığınızda sisteminiz yukarıda anlattığım gibi ciddi bir biçimde hızlanıyor aksi halde alma ve verme arasındaki anahtarmadan kaynaklanan zaman kaybından  dolayı sistem hantal kalıyor.
https://donanimveyazilim.wordpress.com || Cihân-ârâ cihân içredir ârâyı bilmezler, O mâhîler ki deryâ içredir deryâyı bilmezler ||

z

Evet aynen dediginiz gibi. Blok data transferi yapilirsa sorun kalmiyor. Haliyle eskiden yazilmis protokollerin bu durumda degismesi gerekiyor.

Sorun time out suresi dolmadan yada buffer verilerle dolmadan transferin gerceklesmemesi.

Time out suresi 1ms nin altina inmedigi surece baud rate in 9600 yada 115200 olmasinin hic bir onemi olmuyor.

Ben sorunumu simdilik cozdum. Yukarida verdigim linkin linkindeki videoda mekanizma hizli ardisil hareketler yapiyor. Eskiden bu hareketler kesik kesikti. Yani Ft232 ile al ver mantigiyla olusturulmus protokolde elektronik, mekanikten  cok daha yavas kaliyordu.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

OptimusPrime

z
linkteki video yu izlerken aklıma takıldı. makine işlemini yaparken daha doğrusu sürekli pc ile haberleşirken, pc tarafında yazdığınız arayüz üzerinde herhangi bir işlem yapabiliyormusunuz veya şöyle sorayım eğer arayüzde bir menu çubuğu varsa bu menu içerisinde gezebiliyormusunuz? onu merak ediyorum. çünki benim yazdığım arayüz programında 64byte lık blok tranferler tamamlanana kadar programı simge durumunda bile küçültemiyorum. bu sorunla başa çıkmanın bir yolu var mıdır ve bu durum sizdede aynı mıdır?
https://donanimveyazilim.wordpress.com || Cihân-ârâ cihân içredir ârâyı bilmezler, O mâhîler ki deryâ içredir deryâyı bilmezler ||

wsxwsx

Alıntı yapılan: "z"Time out suresi 1ms nin altina inmedigi surece baud rate in 9600 yada 115200 olmasinin hic bir onemi olmuyor.
1ns olsa işinizi görecek mi?   USB teknolojisinden daha hızlı bir işlem mi yapmak istiyorsunuz?

çözüm:
timeout bittiğinde gitmesi gereken veri, hazırlanacak ve süre bitmeden pompalanacak. o gönderilirken diğer paket veri hazır olacak..

timeout 50ms olsa bile bunu yapabilirsiniz. yeter ki mikrodenetleyici bu kadar süre içinde gönderilecek veriyi işleyebilsin. böylece kesintisiz ileyişim sağlanacak.
Alıntı yapılan: "z"
yazdığım arayüz programında 64byte lık blok tranferler tamamlanana kadar programı simge durumunda bile küçültemiyorum. bu sorunla başa çıkmanın bir yolu var mıdır ve bu durum sizdede aynı mıdır?
transfer için ayrı bir thread gerekir . Arka planda CPU kullanımınız thread sayesinde %90 bile olabilir. ama sizin programınız donmaz hiç
http://www.diyezon.com/?p=58

OptimusPrime

wsxwsx
thread olayını öğrettiğiniz iyi oldu bakayım C de nasıl kullanılıyor.
https://donanimveyazilim.wordpress.com || Cihân-ârâ cihân içredir ârâyı bilmezler, O mâhîler ki deryâ içredir deryâyı bilmezler ||

wsxwsx

c# içinde backgroundworker isminde komponent var işe yarayabilir ( v.studio 2008)

OptimusPrime

CreateThread ile başım belada şuan...
https://donanimveyazilim.wordpress.com || Cihân-ârâ cihân içredir ârâyı bilmezler, O mâhîler ki deryâ içredir deryâyı bilmezler ||

z

Alıntı yapılan: "OptimusPrime"z
linkteki video yu izlerken aklıma takıldı. makine işlemini yaparken daha doğrusu sürekli pc ile haberleşirken, pc tarafında yazdığınız arayüz üzerinde herhangi bir işlem yapabiliyormusunuz veya şöyle sorayım eğer arayüzde bir menu çubuğu varsa bu menu içerisinde gezebiliyormusunuz? onu merak ediyorum. çünki benim yazdığım arayüz programında 64byte lık blok tranferler tamamlanana kadar programı simge durumunda bile küçültemiyorum. bu sorunla başa çıkmanın bir yolu var mıdır ve bu durum sizdede aynı mıdır?

Benim uygulamamda mekanizma tarafinda  mekanik hareket bitmeden islemcinin yeni veriyle beslenme zorunlulugu var. Bunu islemcide FIFO tarzi bir buffer ile astim.

Dolayisi le PC tarafindaki gonderme islemi kesintiye ugrasa bile FIFO bufferdaki veriler bu kesintileri mekanige yansitmiyor.

Bahsettiginiz gibi sistem transfer halindeyken bir menu uzerine gelirsem ve FIFO verileri biterse mekanizma beklemeye geciyor.

Bunu sistemin isleyisi acisindan bir aksaklik olarak gormuyorum.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

Alıntı yapılan: "wsxwsx"
Alıntı yapılan: "z"Time out suresi 1ms nin altina inmedigi surece baud rate in 9600 yada 115200 olmasinin hic bir onemi olmuyor.
1ns olsa işinizi görecek mi?   USB teknolojisinden daha hızlı bir işlem mi yapmak istiyorsunuz?

Gereksiz bir soru olmuş.

Her gonderilen 1 byte veriye karsilik 1 byte veri beklenen protokollerde iletisim, 1 byte verinin alinmasi ardindan devam edecekse ve bu projede FT232 kullanilmissa, FT232nin time out suresi de T ise;

Gonderilen tek bir verinin karsiya ulasma suresi yaklasik T olacaktir.

Bir byte verinin B baud hizinda gonderilmesi durumunda verinin portu terketme suresi (1St,8D,1Stp,) 10/B olacagindan

T>10/B oldugu serece B nin buyuk onemi kalmiyor.

Cunku B yeterince buyukse 10/B degeri, T nin yaninda kucuk kaliyor ve T+10/B yaklasik T oluyor.

Demek istedigim bundan ibaret. Buradaki engel B değil T, yani 1ms.

Bu da verilerin al gulum ver gulum mantiginda değil de blok gonder blok al mantiginda iletilmesini zorunlu kiliyor.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

FT232 normal calismasini surdururken usb kabloyu sokmek, usb interface'e bagli islemcinin elektrigini kesmek gibi siradisi durumlar olusturuyorum.

Bu durumlar olustuktan sonra pogrami yeni bastan calistirsam bile bazen initialize asamasinda FT232 ye ulasilmak istendiginde D2XX.dll deki fonksiyonlar invalid handle uyarisi le geri donuyor.

Boyle bir durumdan ancak USB kablosunu sokup tekrar takmak suretiyle kurtuluyorum.

Kabloyu sokup takmadan bu isi komut bazinda yapamazmiyim?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

OptimusPrime

usb aygıt resetlendiğinde enumeration işleminin bitmesini beklemek gerekiyor. aksi halde geçersiz handle numasıyla geri dönüyor.
tabi usb aygıtın başına bişey gelmesi durumunda pc niz tıkanıyor değil mi. benim başımda böyle bir sorun varda o yüzden soruyorum. :)
https://donanimveyazilim.wordpress.com || Cihân-ârâ cihân içredir ârâyı bilmezler, O mâhîler ki deryâ içredir deryâyı bilmezler ||

z

PC tikanmiyor ama ne kadar ugrasirsam ugrasiyim kabloyu sokup takmadan sorunu duzeltemiyorum.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

Bu soruna cozum bulan varmi?

Sorunumu tekrar yazayim.

USB kablosunu taktik ve FT232 windows tarafindan bulunmus olsun.

PC deki programimizi calistiralim. (FT232 kullanan kullanici program)

FT232 nin arkasindaki islemcimizin elektrigini keselim bir sure bekleyelim ve tekrar verelim.

PC deki programdan cikalim ve tekrar calistiralim.

Program FT232 ye erisemiyor.

Ilkel cozumum:

USB kabloyu sok
Bekle (windows sesli uyari vererek durumu algiliyor)
USB kabloyu geri tak.
Bekle (windows sesli uyari vererek durumu algiliyor)
Programimizi calistiralim.

Artik FT232 ile sorunsuz haberlesilebiliyor.

Buradaki kablo sok tak olayina gerek kalmayacak cozum ariyorum.


Not: Normalde FT232 USB uzerinden besleniyor. Arkadaki islemci ise kendi guc kaynagindan besleniyor.

Islemci gerilimini kesince FT232 cikislarindaki lojik sinyaller islemciyi beslemeye calisiyor. Bu da FT232 tarafinda soruna neden oluyor.
Muhtemelen PC USB besleme unitesi artan besleme akimindan dolayi iceride bir seyler yapiyor. (USB 5v hattindaki LED isiginda elektrik kesintisi gibi bir durum gozlemiyorum)

Hos bir durum olmasa da simdilik FT232 yi islemcinin beslemesinden beslemeyi dusunmuyorum.

Bu besleme isini duzeltsem bile yukaridaki senaryo geregi bloke olan usb iletisimi kabloyu sokup takmadan yeniden baslatacak yontemi ariyorum.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

wsxwsx

ft232 reset ucu var. ordan resetliyorsun