[LinuxFocus-icon]
<--  | Ana Sayfa  | Erişimdüzeni  | İçindekiler  | Arama

Duyumlar | Belgelikler | Bağlantılar | LF Nedir
Bu makalenin farklı dillerde bulunduğu adresler: English  Castellano  ChineseGB  Deutsch  Francais  Russian  Turkce  Polish  

[Photo of the Author]
Guido Socher (homepage)

Yazar hakkında:

Guido Linux'u, kendi yazılım veya donanımlarını geliştirmek isteyenler için bir cennet olduğu için beğenmektedir.



Türkçe'ye çeviri:
Erdal Mutlu <erdal(at)linuxfocus.org>

İçerik:

 

Watchdog ve tuşlu Linux USB LCD ekranı

[Illustration]

Özet:

Bu yazı, donanım konusunda yazdığım yazılardan gelen olumlu tepkilerin sonucu olarak ortaya çıktı. Sizler, yani LinuxFocus okuyucuları, gerçekten çok güzel okuyucularsınız! Bazılarınız USB veriyolu ile nasıl iletişimde bulunacağını öğrenmek istemişti. İşte size güzel bir çözüm. LCD ekranını 2002 Mayıs yazısından aldık ve USB ile çalışmasını sağladık. Dolayısıyla, fazladan bir güç kaynağına gereksiniminiz olmayacaktır.

Bu yazı için en azından AVR yazılım geliştirme ortamının bir kısmını yüklemeniz gerekecektir. Nasıl yapıldığına ilişkin açıklamaları AVR mikroişlemcisini GCC ile programlamak yazısında bulabilrisiniz.

_________________ _________________ _________________

 

Giriş

USB'nin güzelliği, modern bir arayüz olmasından ve ona bağlı aygıtların doğrudan USB veriyolu üzerinden beslenebilmelerinden ileri gelmektedir. Bağlantı uçları küçüktür ve ufak bir kablo üzerinden büyük miktarda veri aktarılabilmektedir. Bunlar USB'nin olumlu yönleridir. Olumsuz yönlerine gelince, yüksek frekans kullanıldığından dolayı donanım tasarımı zordur ve kullanılan protokol de oldukça karmaşıkıtır. USB 1.1 sürümünün http://www.usb.org/developers/ adresindeki belirtimlerine (specification) bakarsanız, ne demek istediğimi daha iyi anlamış olursunuz. Belge hem 327 sayfadan oluşmaktadır ve hem de anlaşılması çok zordur. Dolayısıyla, bu kadar çok hatalı USB aygıtının ortalıkta olmasına şaşmamalıdır. Konuyla ilgili daha kullanışlı belgeye http://www.beyondlogic.org/ adresinden ulaşabilirsiniz. Ancak, belirtiminin yine de karmaşık olduğu gerçeği değişmemektedir.

Ne yapmalı? Mikroişlemcimizi USB veriyolu ile nasıl kullanabiliriz? Bir İskoç şirketi olan FTDI'nın (http://www.ftdichip.com) buna bir çözümü vardır. Bu şirket, USB arayüzü oluşturan bir çip geliştirmiştir. FT232BM adlı çipin bir tarafı rs232, diğer tarafı ise USB'dir. Başka bir deyişle, rs232'de kullanmış olduğumuz MAX232 güç dönüştürücüsünü, FT232BM ile değiştirmemiz yeterli olacaktır. İşte bu kadar.  

Sürücü

FT232BM ortamlardan bağımsız bir çözümdür. Çeşitli işletim sistemleri için sürücü programları vardır. Linux için olan çekirdek modülünün adı ftdi_sio olup, açık kaynak kodu altında bulunmaktadır. FT232BM USB'den rs232'ye dönüştürücü işlevinden fazlasını yerine getirmektedir ve Linux çekirdek modülü de tüm işlevleri yerine getirmede henüz geliştirme aşamasında bulunmakadır. Ancak, USB'den rs232'ye dönüştürücü kısmı hazırdı ve ben onu, RedHat 7.3'ün standart çekirdeğini (2.4.18) derlemeksizin ve değişiklik yapmaksızın kullanabildim. Sadece bağlantısını yapmanız yeterlidir.

ftdi_sio sürücüsünün geliştirme çalışmaları http://ftdi-usb-sio.sourceforge.net/.
adresinde yapılmaktadır.
RedHat 7.3'te USB bağlaçını bilgisayara bağladığımda, tüm aygıt sürücüleri kendiliğinden sisteme yüklenmektedir. Eğer, sizin Linux dağıtımızda çalışmıyorsa, aşağıdaki (USB-UHCI) modüllerinin varlığına bakabilirsiniz:

/sbin/lsmod usb-uhci
/sbin/lsmod usbcore
/sbin/lsmod usbserial
/sbin/lsmod ftdi_sio

Donanımla haberleşmeyi yerine getiren aygıt dosyası /dev/ttyUSB0 dır.

Aygıt sürücüsünü geliştirenler en azından 2.4.20 sürümlü çekirdeği önermektedirler, ancak benim örneğimde de görüldüğü üzere modül 2.4.18 altında da çalışmaktadır. En azından benim kullanmış olduğum işlevleri yerine getirmektedir.  

Çizim

Baskı devresi tasarımı bellidir. Yapmanız gereken tek şey, FT232BM'yi mikroişlemcinin Rx/Tx hatlarıyla USB bağlaçının arasına bağlamaktır. FDTI'nin tasarım belirtimlerinde açıklandığı gibi 6 MHz kristal ile başka bazı parçalara gereksinim duyacaksınız. Şemanın sağ tarafında yer alan ferrite bead, yüksek frekansları (USB veriyolu 48MHz'de çalışmaktadır.) süzmeye yarayan ufak bir karbon çubuktur. Bunun yerine 1K'lık direncin etrafını kalın bir telle 10 kere sararak da karbon çubuğun gördüğü işi gördürebilirsiniz.

Çizim
Dikkat etmeniz gereken bir konu var, o da güç kullanımıdır. Eğer, veriyolu üzerinde güç kullanmayı düşünüyorsanız, 100mA'in altında bir güç kullanan bir aygıt tasarlamanız gerekecektir. Ayrıca, aygıtınız USB askıya alma (suspend) kipini destekliyor olması gerekir. FT232BM'in "uyu" ("sleep") bacağın seviyesi düşerse, aygıtınızın güç kullanması 0.5mA'e düşmesi gerekir. Bunlardan sonuncusu, yerine getirilmesi zor bir önkoşuldur. AVR mikroişlemcisi, 2mA çektiği "boş kipini" (idle mode) veya sadece 20uA çektiği "güç kesimi" (power down) kipini desteklemektedir. Ancak, mikroişlemciyi uykusundan uyandırmak, kendisi "bos kipte" iken daha kolay gözükmektedir. Dolayısıyla ben, her ne kadar USB belirtimleri biraz çiğnemiş olsam da, "bos kipini" kullanmaya karar verdim. Ekranın seçimlik arka plan ışığı kapatılacak ve böylece tüm devre sadece 3mA çekecektir. 3mA'lik akım 0.5mA'den çok fazladır, ama USB konak denetleyicisi çipinin bunu ölçecek kadar duyarlı olamayacağından, devre çalışacaktır.

Bütün bunları söyledikten sonra, itiraf etmeliyim ki duraksatma (suspend) özelliği olan bir bilgisayarım yok. Dolayısıyla, bu kısmı deneyebilmiş değilim. Eğer, duraksatma özelliği olan yeni bir bilgisayarınız varsa, belkide bir dizüstü bilgisayarı, bu özelliği deneyerek sonucu bana bildirirseniz çok sevinirim.

Şemanın geri kalan kısmı 2002 Mayıs sayısında olduğu gibidir. Dolayısıyla, ayrıntılara burada girmeyeceğim.
Baskı devre resminin üzerine tıklayarak, daha büyük görüntü elde edebilirsiniz. Eagle dosyaları yazılım ile birlikte paketlenmiştir. Dosyaları indirmek isterseniz, yazının sonundaki bağlantılara bakınız.
board
Baskı devre tek taraflıdır ve sadece mavi renkli katmanı devre basımında kullanılmaktadır. Kırmızı ile gösterilenler kablolardır.

Bu devrede kullanacağınız USB B türü bağlantı ucunun bacakları aşağıdaki gibidir:
type B Receptacle

 

SMD çipleri ile çalışmak

SMD çipleri çok güzel mekanik ve elektriksel özelliklere sahiptir, ancak elektronikle hobi olarak uğraşanlar için bir kabus gibidirler. Gerçekten çok iyi lehim yapan birisi olmanız gerekiyor. Hiç olmazsa, SMD çipinin takılacağı baskı devresi kısmının çok temiz ve yüksek kalitede yapılmış olması gerekmektedir. Başka bir deyişle, bu iş çaylaklara göre değildir. Eğer, baskı devresini çıkartmada zorlanırım veya bu çipi takabileceğimden pek emin değilim diyenler, aşağıdaki seçeneklerden yararlanabilirler.

Baskı devresi üzerine başka parça takmadan önce SMD çipini takınız.
Çipin takılacağı yere, önce biraz lehim yerleştirerek lehimleyin. Daha sonra, çok az lehim pastası SMD'nin bacaklarına sürün. Lehim pastası yerine, "Kontakt Chemie" adında bir Alman şirketinin ürettiği "Lötlack" adlı bir spreyi de kullanabilirsiniz.

Havyanızın ucunu iyice temizleyin. Havyanın ucunda hiç lehim kalmamalıdır. Daha sonra FT232BM çipini tam olarak baskı devresi üzerine yerleştirin. Son olarak havyanızla, çipin her bacağını hafifçe bastırın. Sakın fazladan lehim katmayın. ft232SMD

Bu tarif gayet iyi çalışmaktadır. Burada önemli olan küçük bir havyaya sahip olmanız değildir. Sıradan bir havya kullanıyor olmanız yeterlidir. Dikkat etmeniz tek şey, çipin bacaklarına bastırmadan önce, havyanızın çok temiz olmasıdır. Mutfakta kullanılan tost makinelerini veya buna benzer yöntemler uygulamanızı önermem. Başka yöntemler kullanılarak çipe büyük bir olasılıkla zarar verirsiniz.  

Deneme

Devrenizi iki aşamada denemenizi öneririm. İlk önce, devrenizi AVR mikroişlemcisiz bilgisayara bağlayın. Linux, FTDI çipini tanımalı ve /proc/bus/usb/devices de aşağıdaki verileri görebilmelisiniz:

T: Bus=02 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=12 MxCh= 0
D: Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1
P: Vendor=0403 ProdID=6001 Rev= 2.00
S: Manufacturer=FTDI
S: Product=USB <-> Serial
C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr= 90mA
I: If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=serial
E: Ad=81(I) Atr=02(Bulk) MxPS= 64 Ivl= 0ms
E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl= 0ms

Bundan sonra, AVR mikroişlemcisini takın ve LED'in yanıp sönmesini sağlayan deneme programını yükleyin. linuxusblcd paketini (Paketi indirmek için yazı sonunda yer alan kaynakça kısmına bakın.) açın ve aşağıdaki komutu çalıştırın:

make testload0

Programlayıcı kablosu ile USB bağlaçınızın takılı olmasına dikkat edin.
Eğer, bu deneme başarıyla sonuçlanırsa, mikroişlemcinizin çalışacağından emin olabilrisiniz.

Bundan sonra, tüm yazılımı mikroişlemciye yükleyebilirsiniz:

make load

USB seri bağlantısını ilklendirmek için "ttydevinit /dev/ttyUSB0" komutunu kullanabilir ve "cat > /dev/ttyUSB0" komutuyla da devrenizle "konuşabilirsiniz".

ttydevinit /dev/ttyUSB0
cat > /dev/ttyUSB0
D=hello world

Ekrana "hello world" yazacaktır. Ayrıntılar için Mayıs 2002 sayısındaki yazıya bakınız. Mayıs 2002 yazısı llp.pl adında bir program içermektedir. Bu program sayesinde, LCD (Sıvı Kristal Ekranı) ekranı üzerinde bulunan iki tuş aracılığı ile bilgisayarınızla etkileşme olanağı sağlanmaktadır. Programı burada yeniden kullanabilirsiniz.

... ve iste size iş başında olan ekran (Resim çekildiği sırada tuşlar henüz takılı değildi. FT232BM devrenin arka tarafındadır.):
usb lcd
 

Diğer seçenekler

Burada gösterilen devre çok basit olmasına karşın, SMD çipinin lehimlenmesi konusunda gerekli yetenekler dolayısıyla, başlayanların yapabilecekleri bir iş değildir. SMD çipi takamam diyorsanız, hazır ve ticari bir çözümü de düşünebilirsiniz. Ancak, LCD ekranı, watchdog, LED'ler ve tuşlar gibi ekstraları elde edemeyeceksiniz. Genelde sadace LCD ekranı elde edersiniz. Hazır alınacak USB ekranlarının fiyatı oldukça yüksektir. Burada kullanılan parçaların fiyatı yaklaşık 30 Euro'dur ve sadece hazır yapılmış ekranların fıyatı yaklaşık bu kadar tutmaktadır.

Ne yazık ki bir çok ticari ürün, her ne kadar ftdi tabanlı olsalar da, kendi kimliklendirme numarasını (ID) kullanmaktadır. Bunun anlamı şudur: Çekirdek modülü bu kimliklendirme numaralarını kullandığı için, o çipleri tanımayacaktır. Çekirdek kaynaklarında değişiklik yaparak o numaları değiştirmeniz ve yeniden derlemeniz gerekecektir. Eğer, biri kaynak kodlarını güncellediyse, ileriki çekirdek sürümlerinde belkide bunu yapmanıza gerek kalmaz.
 

Kaynakça

 

Bu yazı için görüş bildiriminde bulunabilirsiniz

Her yazı kendi görüş bildirim sayfasına sahiptir. Bu sayfaya yorumlarınızı yazabilir ve diğer okuyucuların yorumlarına bakabilirsiniz.
 talkback page 

<--, Bu sayının ana sayfasına gider

Görselyöre sayfalarının bakımı, LinuxFocus Editörleri tarafından yapılmaktadır
© Guido Socher
"some rights reserved" see linuxfocus.org/license/
http://www.LinuxFocus.org
Çeviri bilgisi:
en --> -- : Guido Socher (homepage)
en --> tr: Erdal Mutlu <erdal(at)linuxfocus.org>

2004-10-15, generated by lfparser version 2.48