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ı
Ö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.
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.
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:
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.
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.):
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.
- http://www.matrixorbital.com/ Bunlar da ftdi 232bm'yi
kullanıyorlar, ama kendi kimliklendirme numaralarıyla.
Ekranın adı LK202-24-USB'dir.
- http://www.usblcd.de/ Bu çözümde, kendilerine ait çekirdek modülü
kullanılmaktadır. Ancak, bu modül standart Linux çekirdeğine dahildir.
Dolayısıyla modül, sorunsuz olarak 2.4.x çekirdekleriyle çalışacaktır.
Belkide bu çok güzel bir çözümdür.
- http://crystalfontz.com/ Bunların ekranları (632 ve 634) da
FT232AM'i kullanmakta, ama kendi kimliklendirme numaralarıyla.
- http://www.cwlinux.com/eng/products/products_lcd.php
Bu yeri yakınlarda keşfettim. Bunların LCD ekranları klavye
kullanmaktadır. Ancak, fiyatı bu yazıda kullanılan malzemelerin
iki katadır.
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.
<--, Bu sayının ana sayfasına gider
2004-10-15, generated by lfparser version 2.48