Ağu 21

PROGRAMLAMA SADECE BİLGİSAYARCILARIN İŞİ Mİ? – 2

HAYIR, ELEKTRONİKÇİLERİN DE İŞİ 🙂

Birkaç ay önceki “programlama sadece bilgisayarcıların işi mi?” adlı yazımda programcılığın elektronik mühendisliği alanındaki önemini tartışmıştım. Şimdi de aynı konuda yazmaya devam edeceğim.

Programlama elektronikçilerin de işidir diyoruz. Ancak bilgisayarcıların programlaması ile elektronikçilerin programlaması aynı mıdır? Önce buradan başlayalım. Bu konudaki kafa karışıklıklarımıza ilk örneği üniversitelerimizdeki “mikroişlemciler” dersinden verebiliriz. Bu ders aynı isimle birçok elektronik ve bilgisayar mühendisliği bölümlerinde okutulmaktadır. İki bölümün ortak dersi gibi görünmesine rağmen ayrım yapılması gereken noktalar var.

Çoğu zaman bilgisayar bölümündeki öğrencilere 8051 gibi “mikrodenetleyicilerin programlanması gösterilirken,elektronik bölümündeki öğrencilere 8088,80286 vs.. gibi Intel’in x86 tabanlı mikroişlemcilerinin öğretildiği görülebilmektedir.Bu “mikroişlemci ve mikrodenetleyici “ arasındaki farkın tam olarak anlaşılamamış olmasından kaynaklanmaktadır.

Mikroişlemciler başlangıçta büyük çaptaki hesaplamaların hızlıca yapılabilmesi için üretilmişlerdi. Daha sonra geliştikçe ve PC denilen kişisel bilgisayarlar ortaya çıktıkça, hesaplama dışında teknik tasarımlardan, eğlenceye birçok alanda kullanılmaya başlandılar. Böylelikle de mikroişlemciler elektronik alanından koparak bilgisayar mühendisliği adı altında ayrı bir dalın konusu içine girdiler.

Yarıiletken teknolojisindeki gelişmeler birim hacme sığdırılabilen transistör sayısında müthiş artışlara yol açtı. Böylelikle çok daha büyük performansa sahip mikroişlemciler üretildi.

Elektronik dünyası da kendi içinden çıkan bu teknolojiden faydalanmasını bildi. Daha önceki tasarım yöntemleriyle oluşturulan “sabit” fonksiyonlu devrelerin yerini, programlanarak değişik fonksiyonlar gerçekleştirebilen “mikrodenetleyiciler “ aldı. Mikrodenetleyici tabanlı sistemler bugün “gömülü sistemler “ adı altında ayrı bir mühendislik dalı da olmuştur. Bunu başka bir yazının konusu olmak üzere burada bırakıyorum.

Mikrodenetleyiciler bugün çok yüksek hızlara ve birçok değişik fonksiyona sahiptirler. Söylenenlere göre bugün ortalama bir aile otomobilinde 20’den fazla mikrodenetleyici bulunmaktadır. Evimizde kullandığımız birçok cihazda da bu minik bilgisayarlar görev yapmaktadır.

Bugün mikrodenetleyiciler elektroniğin içine bu kadar girmişken, programlama bilgisinin elektronikçiler açısından da ne kadar önemli olduğu açıktır. Burada kastedilen programlama mikrodenetleyici programlamasıdır. Peki, mikroişlemciler nasıl programlanmaktadır?

“Ben acayip assembly bilirim!”

MİKRODENETLEYİCİLERİN PROGRAMLANMASI:

“Ben acaip assembly bilirim” diyen birini gördüğünüzde ona ,”hadi be sende “ diyebilirsiniz..Evrensel bir assembly dili olmadığı gibi assembly bilmek diye bir şey de yoktur.Ancak şöyle cümleler anlamlı olabilir:”x86 assembly bilirim,8051 assembly’si biliyorum,PIC assembly öğrenmek istiyorum”

Assembly dili bir mikroişlemcinin anadilidir diyebiliriz. Assembly komutlarının her biri işlemci için bir anda gerçekleştirebileceği bir işlemi belirtir. Bilgisayar yazılımcılığı açısından bakarsak assembly dillerinin kullanımı çok kısıtlı kalmıştır. Artan karmaşıklığın altından bu şekilde kalkılması da imkansız zaten. Yazılımlar yüksek seviyeli dillerle yazılmaktadır.

Elektronik alanında assembly hala önemini korumaktadır. Çünkü bu alanda performans önemli bir kriterdir. Örneğin en çok kullanılan 8 bitlik mikrodenetleyicilerde assembly’nin sağladığı performans göz ardı edilemez kuşkusuz. Ancak günümüzde oldukça gelişen derleyiciler sayesinde C gibi orta seviyeli dillerde de yüksek performans alınmaktadır. Zaten yapılan araştırmalar dünyada bu alanda en çok kullanılan dilin C olduğunu göstermektedir. C kullananların büyük bölümü aynı zaman da assembly de kullanmaktadır.

PROGRAMLAMANIN ab C’Si

C programlama dillerinden belki de en ünlüsüdür.70’li yıllarda Brian W. Kernighan

Dennis M. Ritchie tarafından geliştirilmiştir. İlerleyen yıllarda C dilinin popüleritesi oldukça arttı. Dilin standartlaştırılması için 1983 yılında ANSI (Amerikan Ulusal Standartlar Enstitüsü ) tarafından bir komite oluşturuldu. Komite çalışmasını 1989 yılında tamamladı ve bugün geniş kabul gören ANSI C ortaya çıktı.ANSI C ile anlatılmak isteneden ANSI komitesinin 1989 yılında kabul ettiği standart C’dir.Bir kere ANSI C öğrenildiğinde bu dille uyumlu bütün derleyicilerin kullanımı kolaylaşmaktadır. ANSI C için en temel kaynaklardan biri dilin yaratıcıları Brian W. Kernighan ve Dennis M. Ritchie tarafından yazılan ANSI C kitabıdır.Bunun dışında C dilini anlatan birçok kitap bulunmaktadır.

Yapılan araştırmala gösteriyor ki mikrodenetleyi tabanlı tasarımlarda büyük oranda C dili kullanılmaktadır* C dilini kullananların büyük çoğunluğu da kullandıkları mikrodenetleyicinin assembly dilini bilmekte ve kullanmaktadırlar.

Buradan mikrodenetleyici tabanlı tasarımda yol almak için bir yol haritası çizecek olursak:

– Kullandığımız mikrodenetleyiciyi iyi tanımalıyız.Mümkünse az da olsa assembly ile programlama yapmalıyız

– ANSI C ‘yi öğrenmeliyiz.ANSI C öğrenirken ilk başta PC programlama yaparak aşinalık kazanabiliriz.

– Mikrodenetleyici ile ufak projeler yaparak deneyim kazanmalıyız.

İnternetteki bazı arkadaşların “C öğrenmek için kursa gitmeli miyim, bana faydası olur mu?” türünden sorular sorduklarını görmekteyim. Tabiki herkesin kendine has bir öğrenme stili vardır. Ancak şunu belirtmek gerekir ki bu tür kurslarda PC tabanlı programlama anlatılmaktadır. Dolayısıyla mikrodenetleyici programlama ile ilgili kavramlara yer verilmemektedir. Ancak ANSI C dilini öğrenmek için bu tür kurslardan faydalanılabilir. Gerisi de sizin kişisel çabalarınıza bağlı.

Umarım bu yazı bir ölçüde de olsa sizlere faydalı olur. Başka bir yazıda görüşmek üzere…

*C dilinin kullanımına dair örnek bir araştırma:

http://www.ertl.jp/ITRON/survey99/graph-e/lang1.gif

C programlama dili ile ilgili wikipedia sayfası:

http://tr.wikipedia.org/wiki/C_programlama_dili

Ağu 06

MESLEK SEÇİMİ:

Bugünlerde üniversite adayları tercih telaşı içindeler.Birçok forumda da “hangi bölümü seçmeliyim?” sorularının sorulduğunu görmekteyim.Tabiî ki insanlar hayatlarını etkileyecek olan bu kararı verirken dikkatli olmaya çalışıyorlar.Ancak hala meslek seçiminde belli başlı hataların yapıldığı görülmekte.Hala insanlar belirli “moda”ların peşinden giderek seçimlerini yapabiliyorlar.Sadece puanı yüksek diye mühendislik seçenler mi dersiniz,”şu üniversitenin makine bölümünü mü yoksa bu üniversitenin elektronik bölümünü mü seçeyim” diyenleri mi? Bu kadar farklı alanlar da değişik tercihler sözkonusu.Bu konuda kimseyi de suçlayamayız tabiî ki.ÖSS hazırlığının büyük bir rant haline geldiği bu sistem içinde mesleklerin tanıtımı,insanların kendilerini tanımaları için rehberlik hizmetleri oldukça ihmal ediliyor.Çoğu zaman dersaneler başarılarını yüksek göstermek için öğrencilerinin tercih formlarını tıka basa doldurabiliyorlar.

Bu önemli dönemde tercih yapacak arkadaşlara en büyük önerim, sevebilecekleri, ilgi duyabilecekleri alanları seçmeleri. Sırf “havası” veya “parası” yüzünden bölüm seçmemeleridir.

İlgi duymanın da ne olduğunu tam olarak açmak gerekmekte. Örneğin elektronik cihazlara meraklı olmak ,elektronik mühendisliği seçmek için yeterli bir sebep midir? Ya da bilgisayarla vakit geçirmekten hoşlanan biri bilgisayar bölümünü seçmeli midir? Bu tür sebeplerle mühendisliği seçenler, daha sonra mühendisliğin ağır matematik öğretimi nedeniyle sıkılabilmekte,umutsuzluğa düşebilmektedirler.

Tercih yapacak arkadaşlar kendilerini iyice tanımalı ve ona göre seçim yapmalıdırlar.Bu konuda forumlardan,etrafınızdaki deneyimli insanlardan yardım alabilirsiniz.Ama tabi en son kararı yine kendiniz vermelisiniz.Aşağıdaki linkte Elektrik Mühendisleri Odası’nın sitesinde bulunan faydalı yazılar var.Orada ayrıca elektrik/elekronik mühendisleri adı altındaki bölümlerin “saçmalığına “ da dikkat çekilmiş.Okumanızı tavsiye ederim:

http://www.emo.org.tr/genel/bizden_detay.php?kod=48840&tipi=2&sube=0

Ağu 04

TEKNO CEMAATLER VE BİLGİ PAYLAŞIMI CENNETLERİ: Forumlar

İnternet hayatımızda yokken bilgiye nasıl erişiyorduk acaba? Üzerinde çalıştığınız konuda güzel bir kitap bulduğunuzda şanslı sayıyordunuz belki kendinizi ,ya da mahallenizde bu işlerden anlayan bir abiniz vardı.Bu kadar şanslı değilseniz, çoktan o işle uğraşmayı bırakmayı bile düşünmüş olabilirdiniz.Peki ya bugün?

Artık kesintisiz internet, ADSL’nin de hayatımıza girmesiyle birlikte hemen aklımıza geleni “google” a sormak adete bir refleks haline geldi.Şanslıysak karşımıza çıkan binlerde sonuçtan birinde aradığımızı buluyoruz.Hepimizin önüne çıkan sonuçlarda çoğu zaman başka birinin cümlelerini görüyoruz,linke tıkladığımızda da alt alta yazılan cevaplarla uzamış bir “çözüm önerileri” destanı çıkıyor.Şu tesadüfe bakın ki soruyu soran kişi de sizinle aynı problemi paylaşıyormuş.Ardından gelen cevaplarla da sorun çözülmüş.Tabi sizinki de…

Peki bu kadar insanın, yeni aldığı balığını nasıl besleyeceğinden,mikrodenetleyicili devresindeki sorunun ne olduğuna kadar geniş konularda fikir alışverişi yaptığı bu forumlar tam olarak ne oluyor ve bize faydası ne olabilir? Bu konuyu yine kendi alanımızdan, elektronik mühendisliği açısından ele alacağım.

Birçoğumuz okuduğumuz okullardan şikayet ediyoruz.Belki çevremizde bizim kadar meraklı arkadaşlarımız olmadığından ya da birikimlerinden faydalanacağımız hocalarımızdan çok da faydanalanamadığımızdan… Evet internetten öncesinde bu serzenişler için yapabilecek bir şey yoktu.Ancak artık birçok forumda artık derdimizin çaresini bulabilmekteyiz.Çünkü artık ,eskiden mahallemizdeki tecrübeli abimizin yerini alabilecek birçok insan internette bilgi ve birikimlerini paylaşıyor.Bilgi ve birikimli olmanın da belirli bir seviyesi yok.Sizin de sahip olduğunuz bilgiler bir başkasının şu anda içinden çıkamadığı bir problemin çözümü olabilir.O zaman forumlardan yararlanmanın vaktidir.

Son zamanlarda forum sitelerinin sayısı oldukça arttı.Bu forum siteleri birçok konu içerebildiği gibi özel bir konuda da olabilmektedir.Ayrıca belirli bir konu üzerinde bilgilerin bulunduğu bir sitede ayrıca bir de forum bulunabilmektedir.

Elektronik hakkındaki forumlarda en temelden ,ileri seviyeye kadar geniş bir alanda bilgi paylaşımı yapılmaktadır.Hakkında bilgi sahibi olmak istediğiniz bir konuda ya da içinden çıkamadığınız bir problem hakkında sorularınızı foruma iletip birçok insanın bilgi ve tecrübesinden faydalanabilirsiniz.Ancak forumların interaktif ortamlar olduğunu da unutmamalıyız.Onlardan biz faydalanabileceğimiz gibi kendi bilgilerimizle biz de başkalarına yardımcı olabiliriz.Bizler de elimizden geldiğince kendi kaynaklarımızı bu ortamlara sunmalıyız.Bilgiye çok ihtiyacımız olan şu dönemde forumlar hayati bir gerekliliği yerine getirmektedir.

Her yerde olduğu gibi forumları da kullanırken bazı “yazılı olmayan kurallar”a dikkat etmeliyiz.Bunların bir kısmını maddeleyerek yazacağım.Forumlar gibi bilgi iletişim ortamlarından faydalanırken dikkat edilecek hususlarla ilgili olarak Eric Steve Raymond’ın Doğru Düzgün Soru Sormak* adlı yazısını da okumanızı tavsiye ederim.

– Öncelikle bir soru sormadan önce bu konuda az da olsa kendiniz bir araştırma yapmalısınız.Google’a yazılacak iki kelimeyle karşınıza onlarca sonucun çıkabileceği bir alandaki soruyu direk forumlara yazarak “hazıra konmaya çalışmak” çoğu zaman hoş karşılanmayacaktır.

-Bir konuda yardım istemek için attığınız mesajları doğru foruma ve doğru alt başlık altına yazın.Alakasız bölümlere yazılmış alakasız sorular tepki çekebilir.Eğer hangi bölüme yazacağınıza karar veremediyseniz, konunuza en yakın bölüme sorunuzu yazın ve bu durumu mesajınızda belirtin.Forum sorumluları mesajınızı uygun bölüme taşıyacaktırlar.

– Forumlar da “Lütfeeeeen yardıııım!” ,”Çok acele!!!!” gibi başlıklardan daha itici gelen başlık yoktur.Bu ortamlarda birçok kişinin yardıma ihtiyacı olduğunu ve sizinkinin en acili olduğuna insanları ikna edecek iyi bir sebebe ihtiyacınız olduğunu unutmayın.Başlıklarınız konunuzla ilişkili olsun.

– Bir probleminizi anlatırken mümkün olduğunca detaylandırın.Kimsenin “müneccim” olmadığını unutmayın.

– Düzgün bir Türkçe kullanmaya özen gösterin.

-Noktalama işaretlerinin var ve gerekli olduğunu unutmayın.Bazen satırlarca yazılmış bir yazıdan hiçbirşey anlamamak insanları oldukça şaşırtmaktadır.

-Kimsenin sizin ödevinizi veya projenizin tamamını hazırlayıp ellerinize vermesini beklemeyin.Herkesin zamanı kısıtlı ve değerli.Çalışmalarınız üzerinde uğraşıp takıldığınız noktalarda soru sorma yöntemini kullanın.

Unutmayalım ki bu tür kurallar rahat bir paylaşım ortamının sağlanması için gereklidir.

Ayrıca forumların sadece bilgi “alınan” değil bilgi “paylaşılan” yerler olduğunu unutmayın.Siz de mevcut bilgi ve tecrübelerinizle katkıda bulunun.Bilginin altın kadar değerli olduğu şu dönemde forumlar imdadımıza yetişmektedir.Kim bilir belki de geleceğin okulları buralarda doğmaktadır.

Ekler:

Eric Steven Raymon Doğru Düzgün Soru Sormanın Yolları – Türkçe çevirisi

>Faydalandığım belli başlı elektronik forum siteleri:

Türkçe:

http://www.picproje.org/ sitesi forumu

http://forum.antrak.org/

http://forum.donanimhaber.com/ elektronik bölümü

http://www.forumtrportal.com/forumdisplay.php?f=87

http://www.turkyasam.com/forumdisplay.php?f=170

İngilizce:

http://www.edaboard.com/

http://www.electro-tech-online.com/

Ağu 03

Dünya Düz mü Yuvarlak mı?

Geçenlerde kitapçıları gezerken Thomas Friedman’ın World Is Flat (Dünya düzdür) adlı kitabının Türkçe’ye çevrilmiş olduğunu gördüm.Daha önceden İngilizcesinden okuyup çok beğendiğim bu kitabın yurdum insanıyla buluşması beni son derece mutlu etti.Umarım Amerika,İngiltere gibi ülkelerde çok satanlar listesinde yer alan bu kitap burada da aynı derecede ilgi görür.Google’daki aramam sonucunda kitapla ilgili güzel bir inceleme yazısı buldum.Ayrıca kitabın özetini de www.ozetkitap.com sitesinde bulabilirsiniz.Yaşadığımız çağı anlamaya çalışan herkese bu kitabı okumayı öneriyorum.Kitap Boyner Yayınlarından yayınlandı.

İnceleme yazısı



Ağu 02

Programlama sadece bilgisayarcıların işi mi?

*Bu yazı daha önce www.antrak.org.tr sitesine yayınlanmıştır.

Bu yazımda bir elektrik-elektronik mühendisliği öğrencisi olarak programcılığın bu alandaki önemini tartışacağım.Programcılık denildiğinde ilk olarak akla programcılar ve bilgisayar mühendisleri gelmektedir.Genel olarak program denildiğinde de (yazılım da diyebiliriz) akla gelen ilk şeyler son kullanıcıya hitap eden üst seviye yazılımlar veya işletim sistemleri oluyor.Halbuki günümüzde programcılığın önemi elektronik mühendisliğinde de oldukça artmıştır.Bunun için elektronik biliminin gelişimine bir göz atalım.

Elektronikte yaşanılan müthiş ilerlemenin belki de başlangıcı sayılabilecek olay Bell Laboratuarlarında “transistör” ün geliştirilmesi olmuştur.Bu buluşla birlikte ,hantal olan diyot lambaların yerini çok daha küçük boyutta yarı iletkenler almıştır.Buna elektronik devriminin başlangıcı da diyebiliriz.

Transistörün ardından gelişen “tümdevre” teknolojisi yeni bir devrimi müjdeliyordu.Artık birçok eleman içeren devreler tek bir yonga içine sığdırılabiliyordu. Artık devreler tümleşik olarak üretiliyordu.Seri üretim ile maliyetler de çok düştü.
Elektronik dünyasındaki sonraki büyük gelişme mikroişlemciler olmuştur.Buna mikroişlemci devrimi de diyebiliriz.Mikroişlemci terimi günlük hayatımızda bilgisayarlarla birlikte giriş yaptı.Ancak burada konumuz elektronik mühendisliği olduğu için bu yönden inceleyeceğiz.Mikroişlemci teknolojisindeki gelişmeler onbinlerce transistörü ufacık bir hacme soktu.Bununla beraber imalat teknolojisindeki gelişmeler fiyatları oldukça aşağıya çekti.

Mikroişlemci devrimiyle birlikte bilgisayarlar dünyada hızla yayıldı.Bununla beraber elektronik mühendisliğinin bir dalı olmaktan çıkarak bilgisayar mühendisliği ayrı bir alan haline geldi.

Elektronik mühendisliği açısından mikroişlemcilere baktığımızda önceden belirli fonksiyonları yerine getiren sabit tasarımlı devreler yerine içindeki program ile fonksiyonları değiştirilebilen “gömülü sistemler” ortaya çıktı.Endüstride önceleri röle mantığıyla ,birçok anahtarlama elemanıyla gerçekleştirilen lojik fonksiyonlar sonradan programlanabilen lojik kontrollörler (PLC) denilen cihazlarla yapılmaya başlandı.Bu cihazlar içinde bir mikroişlemci ve giriş çıkış birimlerini barındıran kompakt kontrol cihazlarıydı.Sistemde daha sonradan çıkan yeni ihtiyaçlara göre fiziki sistem üzerinde değişiklik yapılmadan yazılımın değiştirilmesi ile bu gerçekleştirilmeye başlandı.

Elektronik dünyasında mikroişlemciler giderek mikrokontrollör çatısı altına girmeye başladılar.Mikrokontrollörü içinde mikroişlemci,bellek,giriş/çıkış birimleri barındıran bütünleşik bir sistem olarak tarif edebiliriz.Ya da başka bir deyişle tek çiplik bir bilgisayar.Bilgisayarımızın ufak bir modelidir aslında.

Mikrokontrollörler büyük bir hızla elektronik sektöründe yerlerini aldılar.Bugün dünyada yılda milyarlarca mikrokontrollör üretilmektedir.Ortalama bir aile arabasında 20 kadar mikrokontrollör bulunmaktadır.Örneğin abs fren sistemi kontrolünde,elektronik ateşleme sisteminde,cd çalarda,alarm sisteminde…

Artık evimizde bizim görmediğimiz birçok minik bilgisayar haberimiz olmadan kendi işlerini yapıyorlar.Müzik dinlediğiniz cd çalarınız,evinizdeki mikrodalga fırınınızda,televizyonunuzda hatta otomatik zaman ayarlı oda parfümünüzde ufak bilgisayarlar gizli.

ELEKTRONİK MÜHENDİSLİĞİ VE PROGRAMCILIK
Elektronikten ortaya çıkmış programlanabilen cihazlar yine elektroniğin içine böylesine girmişken ,programcılık mantığından uzak bir elektronik mühendisliğinden de artık söz edilemez olmuştur.Ancak ne yazık ki elektrik-elektronik mühendisliği müfredatlarına baktığımızda bu konuda büyük eksikliklerin olduğu görülmektedir.Temel bilgisayar bilimleri dersleri adı altında bir programlama diline (büyük oranda C’ye) üstün körü değiniliyor,yapılan uygulamalar da adres defteri yazmayı geçmiyor.Temel programlama mantığı öğretilmediği için işin içine ezber giriyor.Programcılık da tamamen matematiksel bir mantığa dayandığından ezberle halledilebilecek bir şey değil.
Eğer elektronik konusunda ciddi olarak çalışma yapmak istiyorsak, programcılıktan uzak kalmamız mümkün değil.Programlama konusunda kendimizi mümkün olduğunca geliştirmeliyiz.

PEKİ NEREDEN BAŞLAYACAĞIZ?

4 Senelik mühendislik müfredatında programcılık ile ilk tanıştığımız ders “temel bilgisayar bilimleri” ya da değişik adlarla olabiliyor.Burada ilk olarak öğrenmemiz gereken şey bilgisayarın temel yapısı ve birimleri.Ardından bütün programlama dillerinde bulunan belirli yapıları öğrenmeliyiz.Tabiki hepsinden önemlisi “algoritma” öğrenmek.Algoritmayı kısaca “bir işi yapmak için izlenecek yol” diye tanımlayabiliriz.Bir problemi dijital bir bilgisayara(mikrokontrollör,PC vs…) çözdürebilmek için öncelikle onu bilgisayarın anlayabileceği şekilde ona anlatmalıyız.Bunun için problem belirli adımlarla tanımlanmalı ve bir programlama diliyle bilgisayara aktarılmalıdır.
Algoritmadan sonraki aşama bir programlama diliyle bu algoritmaların çalıştırılmasıdır.Başlangıç olarak PASCAL,BASIC gibi diller programcılığa ısınmak için ideal olabilirler.Ardından adını çokça duyduğumuz meşhur C’ye geçiş yapılabilir.C günümüzde hala popülerliğini koruyan bir dildir.Elektronikte de mikrokontrollörlerin programlanmasında büyük oranda bu dil kullanılmaktadır.

Burada kendi görüşlerim etrafında programcılığın elektronik alanındaki önemini tartışmaya çalıştım.Umarım bu konuda kendini geliştirmeye çalışan arkadaşlar için ufak da olsa bir yol gösterici olabilir.