31 Aralık 2010 Cuma

1.1 Çıkış (Output)

Eğer mikrodenetleyici’den dışarıya bir bilgi akışı gerekiyorsa (örneğin bir led’i yakmak) pin’in çıkış özelliğine alınması gereklidir. Çıkış özelliğine alındığında pin’in kontrolü tamamen mikrodenetleyici’dedir. O ucun değerinin Logic 0 veya Logic 1 olması için gerekli işlemleri mikrodenetleyici kendisi gerçekleştirir. 

Şekil 3

Bu mikrodenetleyici'den dışarıya doğru akan akıma Source akımı denir. Yukarıdaki devrede Led bir direnç üzerinden PortB’nin 0’ıncı ucuna bağlanmıştır. Akım mikrodenetleyiciden dışarıya doğru akmaktadır. Yani akım kaynağı olarak mikrodenetleyici görev yapmaktadır. Eğer PortB’nin ucu Logic olarak 1 yapılırsa bunun anlamı port ucunun Vcc gerilimine ulaştırılması demektir. Örneğin mikrodenetleyi'ciniz +5V ile besleniyorsa Portb’nin 0’ıncı bacağı gerilimsel olarak +5V’a ulaşacak demektir. Bu durumda direnç ve led üzerinden bir akım akışı olacak ve led yanacaktır.

Şekil 4

Yukarıdaki örnek devrede ise akım led üzerine bağlı gerilim kaynağından sağlanmaktadır. Akım led ve direnç üzerinden geçerek mikrodenetleyici'nin içine doğru akmaktadır. Bu akıma Sing akımı denir. Her ne kadar akımın kaynağı mikrodenetleyici olmasa da yinede akımın akışını kontrol eden ünite mikrodenetleyici'dir. Eğer Portb’nin 0’ıncı pin’i Logic olarak 1 yapılırsa led’e hem direnç üzerinden +5V hem de Vcc üzerinden +5V uygulanacaktır. Bu durumda led’in yanması söz konusu olmayacaktır. Fakat Logic 0 olduğunda led’in katot ucuna direnç üzerinden Gnd uygulanacak ve led yanacaktır.

1. Portlar

Bir mikrodenetleyici’yi kullanmaya başlamadan önce PORT kavramını çok iyi bir şekilde anlamamız gerekmektedir. Port mikrodenetleyicinin dışarıya açılan kapılarıdır. Bu kapılar mikrodenetleyicinin dış ortama açılan yollarıdır. Bu Portlar dış ortama açılan kapılar olduğuna göre bu portların dış dünya ile bağlantısının olması gereklidir ve bu bağlantıda mikrodenetleyici entegresinin bacakları (Pin’leri) aracılığı ile sağlanır.

Gerçektende Port'lar mikro denetleyicinin pin’lerine bağlı birer kapıdır. Bu pin’ler farklı işlevler için tasarlanmış ve farklı görevleri yapmak üzere kullanılan uçlardır. Bu uçların özellikleri ve görevleri mikrodenetleyici türlerine göre değişiklik arz etmekle birlikte standart olan görevi ise Giriş/Çıkış (I/O) ünitesi olarak kullanılmasıdır.


Şekil 1


Port konusunu bir örnekle açıklamamız gerekirse bunu Hava Limanı (airport) gibi düşünebiliriz. Hava limanı uçakların inmesi ve kalkması için kullanılan alanlardır. Bu alanlar bir şehrin veya bir ülkenin dış şehirler ve ülkeler ile bağlantısını kurmasını sağlar. Hava limanlarında uçakların inmesi için kullanılan iniş pistleri mevcuttur. Bu pistler kimi zaman uçakların inmesi kimi zamanda kalkışı için kullanılır. Ama tahmin edeceğiniz gibi bir pist aynı zamanda hem iniş hem de kalkış için kullanılmaz. Aynı anda sadece birisi için kullanılabilir. Burada mikrodenetleyici’nin portları da aynı mantıkla işler. Ya dışarıdan bir verinin mikrodenetleyici içine alınmasına ya da mikrodenetleyici’den dışarıya bir verinin gönderilmesi şeklinde kullanılabilir.


Şekil 2

Portlar hem giriş hem de çıkış özelliğine sahip olmasına rağmen bu özellikleri aynı anda aktif olamaz. Pin’lerin giriş mi yoksa çıkış mı olacağı devrenizin yapısına göre belirlenmelidir. Peki, uçlar ne zaman giriş ne zaman çıkış olarak kullanılacak?

30 Aralık 2010 Perşembe

Hangi Programlama Dili

Yıllardır bu soruya cevap veriyorum ama nedense hala öğrencilerin kafasında nedenini bilmediğim şekilde hep bir soru işareti kalıyor. Bu kadar basit bir konuyu karmaşık ve anlaşılamaz hale getiren temelde mikroişlemci mimarisini bilmemekten kaynaklanıyor. O yüzden çok kısa mimariden bahsederek başlayalım.

Öncelikle şunu bilmek gerekiyor. Mikroişlemciler farklı farklı mimarilere göre tasarlanır ve her işlemcinin kendine ait bir opcode tablosu vardır. İster Intel olsun, ister Motorola istersenizde AVR veya PIC hepsi kendisine ait bir opcode tablosuna sahiptir. Bu opcode dediğimiz şey ise komut tablosudur. Kısaca işlemcinin anlayabileceği komutların bir tablosu. İşlemciler sadece bu kodlara cevap verir. Intelin opcode kodu Motorola işlemcileri için anlamsızdır.

O halde hangi işlemciyi kullanacaksak programı onun opcode tablosundaki komutları ile yapmamız gerekmektedir. Bu değişmez bir kuraldır. Şimdi bu konuda anlaştığımıza göre ikinci konuya geçelim.

Hangi sistem üzerinde olursa olsun biz programlama dillerini üç temel grupta inceleriz. düşük,orta ve yüksek seviyeli programlama dilleri. Peki bunlar nedir dersek;

Düşük seviyeli programlama: Bu dil ailesi daha çok işlemci mimarisine yakın komut ve programlama mantığı kullanılarak yazılan programlama dillerini temsil eder. Bu dile hepimizinde bildiği assembly (makine dili) adı verilir. Adından da anlaşılabileceği gibi bu dil daha çok işlemciye yakın insandan uzak bir dildir. Öğrenmesi, yazması zordur. Uzun ve zahmetli bir yazılım süreci vardır. En basit bir işlem bile sayfalarca kod gerektirebilir. Peki avantajı varmıdır derseniz tabiki büyük bir evet olacaktır cevabı. Düşük seviyede direk olarak işlemcinin her şeyine müdahele ederek sınırlar olmadan program yazmaya olanak sağlar. Kısacası işlemcinizi en iyi sömürme yöntemidir. Her istediğinizi uzun ve zahmetlide olsa yapabilirsiniz.

Orta seviyeli programlama: Bu daha çok ne insana nede makineye yakın olarak tasarlanmış bir dil ailesidir. Bazı konularda programcıya büyük kolaylıklar sağlarken hala aynı zamanda makineyede yakın durmaktadır.

Yüksek seviyeli programlama: İnsana yakın programla dilleridir. Burada işlemci faktöründen çok insan faktörü önemlidir. Programcı için hazır sunulan bir çok imkan bulunur. Böylece program yazması çok kolaylaşır. Çok fazla deneyimi ve tecrübesi olmayanlar bile rahatlıkla bu dilleri öğrenip program yazabilmektedir. Bu hali ile insanan yakındır, doğrudur ama size sunulan imkanlar ile sınırlı kalırsınız. Dilin yapısı içinde olmayan bir özelliği kullanmanız ya çok zordur (-düşük seviyeye kaymanız gerekir) yada imkansızdır.

İşte bunları anladı isek hemen programlama dillerinin durumlarına bakabiliriz. Assembly daha öncede söylediğimiz gibi düşük seviyeli bir programlama dilidir. Ama paskal,C ise orta seviye programlama dilleri grubuna girer. Delphi, Visual studio (C#, VB) ise yüksek seviyeli programlama dilleri ailesindendir.

Kullandığınız işletim sistemide dil tercihlerinde önemlidir. Örneğin delphi ile windows ortamında derlediğiniz bir kodu gidipte unix üzerinde çalıştıramazsınız. Çünkü program derlenirken sadece işlemcinize göre derlenmez. Kullanmakta olduğunuz işletim sisteminin kaynaklarınıda kullanır. Dolayısı ile işletim sisteminizden alacağı kaynaklar farklı bir işletim sisteminde bulunmayacağı için programlar farklı işletim sisteminde çalışmazlar. Bunun için örneğin dephi kodunuzun unix üzerinde çalışmasını istiyorsanız kodunuzu Delphi Kylix üzerinde derlemeniz gerekmektedir. Tabi bu durumda da bu derlenmiş kod windows ortamında çalışmayacaktır.

Peki mikrodenetleyicilerde iş nasıl yürüyor. Gelip ben C'mi kullanayım yoksa Basic'mi dediklerinde verecek cevabım onların kafasında sanki gerçekten C veya Basic kullanacakları imajını oluşturuyor. Aslında hayır. Böyle bir şey yok.

Temelde mantık şu; mikrodenetleyiciler yeni bir sistemdir. Fakat uzun zamandır mikroişlemciler farklı dillerde programlanmakta ve toplum üzerinde bir programcılık yeteneği, geleneği oturmuş durumdadır. Kimisi C ile çalışırken kimisi Delphi veya Basic kullanmaktadır. Temelde bu dilleri birbirinden ayrıyan şey komutların yazılım şeklidir. Biz buna syntax diyoruz. Bir dil printf derken diğer dil print diyor sadece ve yazarken kimisi sonuna ; alıyor kimisi almıyor. Bu temel gelenek mikrodenetleyiciler için yüksek seviye program dili oluştururken gündeme gelmiş ve hepimizin bildiği bir dil ailesi dururken farklı bir dil ailesi oluşturmamak amacı ile aslında C olmayan bir C veya aslında Basic olmayan bir Basic dili geliştirilmiştir. Daha açık olarak söylersek pic programlamak için kullanılan C dili aslında gerçek C dili değildir. Pic için yazılmış ama kod yazılım tekniği ve komutları C dilinden esinlenilmiş farklı bir dildir. Basic içinde aynısı söylenebilir. Özetle şunu kesin olarak söylemek mümkün Visual Studio açılıp oradan C seçilip yazılan kod asla ve asla Pic üzerinde çalışmaz. Çünkü zaten en başta hedef işlemciler farklıdır.

Peki biz C'mi seçeceğiz Basic'mi dersenizde bu durumda siz daha önce en az bir programa dili biliyorsanız bu dile en yakın hangisi ise onu seçmenizi öneririm. Örneğin ben yıllardır C'nin yazılım tekniğine alışamamış ve sevememiş birisi olarak (-C'de okumam vardır ama yazmam yoktur) ben Delphi'yi tercih etmiştim. Mikrodenetleyici programlamaya geçtiğimde de bu dile en yakın olan PicBasic tercihim oldu. Bu basic içinden de Proton PicBasic'i seçerek kullanmaya başladım. Sizlerde daha önce dediğim gibi bir dili seçecekseniz alışkanlıklarınıza, size yakınlığına bakarak karar vermeniz gerekmektedir.

Bu yazının devamında yeri geldiğinde farklı dillerden bahsedecek ve örnekler verecek olmama rağmen ağırlıklı olarak örnekler Proton PicBasic üzerinden verilecektir.

29 Aralık 2010 Çarşamba

Programlayıcılar ve yazılımları

Daha öncede belirttiğim gibi pic ailesi için şu anda en ucuz ve en ideal çözüm pickit2 cihazıdır. Bu cihazı kendinizde yapabilirsiniz. Bununla ilgili dökümanları firmanın orjinal sitesinden burayı tıklayarak elde edebilirsiniz.

Eğer standart bir programlayıcı yazılımı istiyorsanız burayı tıklayarak winpic800 programını çekebilirsiniz. Yazılım ücretsizdir. Yazılımın kendine ait bir GTP USB isimli donanımı mevcut. Donanım ile ilgili tüm devre bilgileri, firmware ve şemaları sitede bulmanız mümkün.

Tabi her iki cihaz içinde mutlaka elinizde bir programlayıcının daha önceden olması gerekiyor. Çünkü bu cihazlar içinde PIC18F2550 kullanıyor. Bu yüzden hızlı ve ucuz bir yöntemle seri programlayıcı kendinize yapabilirsiniz. Bunun için ise JDM dediğimiz programlayıcıları kullanabilirsiniz.

Internette her yerde bulabileceğiniz en basit bir JDM tipi programlayıcı şemasını ekte görülmektedir. Com port üzerinden gelen uçlara iki direnç, bir kondansatör, bir zener ve bir diyot bağlayarak yapılabilmektedir. Tabi böyle olunca bu devrenin maliyeti seri kablo hariç 1 TL'yi geçmemektedir. Konnektör ve kablo ile birlikte en fazla 5 TL'lik bir maliyet oluşturmaktadır. Baskı devre kartına bile ihtiyaç duymadan bu cihazı yapmak mümkündür. Eğer baskı devrelerine ulaşmak istiyorsanız arama motorlarından birine "pic jdm programmer" yazarak yüzlerce hazır baskı devreye ulaşabilirsiniz. 




28 Aralık 2010 Salı

Nereden Ve Nasıl Başlamalı

Öncelikle mikrodenetleyiciler ile çalışmak için nereden başlamalı ve nasıl başlamalıyız sorularının cevaplarını vermeye çalışalım.

İlk olarak hangi denetleyici ile çalışacağınıza karar vermeniz gerekmektedir. Genelde PIC ailesinde her ihtiyaca uygun bir işlemci mutlaka vardır. Ama önemli olan bunlardan hangisinin sizin işinize yarayacağını seçmektir. Üreticinin sitesinde aslında parametrik tablolar ile seçim yapmanızı sağlayacak bir çok yardımcı araç bulunmaktadır fakat başlangıç olarak genelde hep 16F84 veya 16F877 tercih edilir. Hem bulunması kolay hem de diğerlerine göre daha ucuz oldukları için yaygın bir kullanımı vardır. Aralarındaki en önemli farklılık bacak sayıları ve bellek büyüklüklükleridir. Bunun haricinde denetleyicinin sahip olduğu bazı yeteneklerde de farklılıklar vardır. Örneğin 16F877 içinde ADC olmasına rağmen 16F84'de yoktur.

İkinci olarak kendinize bir programlayıcı cihaz ve ona ait yazılım edinmeniz gereklidir. Bunun için interneti araştırdığınızda bir çok cihaz ve yazılım olduğunu göreceksiniz. Fakat uzun zamandır bu cihazların ve yazılımların büyük bir çoğunu kullanmış hatta kendi cihazım ile yazılımımı yapmış olmama rağmen size tavsiye olarak tek verebileceğim cihaz ve yazılım yine üretici firma olan Microchip firmasının tasarımı olan PICKIT2 veya PICKIT3'tür. Bu cihaz orjinal olarak oldukça pahalı olmasına rağmen sitede verilen orjinal devrelerden cihazın bir benzerini kendinizde yapabilmektesiniz. Hatta piyasada fason imalat olarak bu cihazlardan yapıp uygun fiyatla satanlarda mevcut. İstendiği takdirde buralardan da temin edilmesi mümkündür. Fakat bu cihazın yapımında önemli bir zorluk var.Oda PICKIT2 cihazının içinde PIC18F2550 kullanılıyor olması. Yani bu cihaz içinde de bir PIC mevcut. Dolayısı ile bir programlayıcı cihaz yapabilmek için başka bir programlayıcı cihaza ihtiyaç duymaktasınız.Eğer elinizde varsa veya bulabilecekseniz başka bir programlayıcı ile programlayıcınızın denetleyicisini programlayabilirsiniz. Eğer bulamayacaksanız hazır almayı veya başka bir programlayıcıyı tercih edebilirsiniz.

Tabi burada başka bir sorununuz daha var. Cihazınız paralel, seri, usb haberleşmelerinden hangisini kullancak. Eskiden olsa hemen size paralel derdim ama şimdi artık oldukça fazlalaşan notebook kullanımından dolayı sadece USB kullanmanız gerekli diyorum. Cihazınız usb üzerinden bilgisayara bağlanarak kullanılırsa bu size çok esneklik getirecektir.Yazılım olarak genel amaçlı olarak kullanılan Winpic800 yazılımı sizin ihtiyaçlarınızı görecek düzeydedir. Aslında seri port RS232 üzerinden çalışan programlayıcı cihazlarıda kullanabilirsiniz. Bunu kullanmak için mutlaka bir usb to rs232 çevirici kabloya ihtiyacınız olacaktır. Bu yöntemde yaşanacak bir sorunu başından bilmek gerekli. RS232'nin çıkışı +13V ile -13V arasında olması gereklidir. Fakat piyasa bulunan çevirici kabloların bir kısmının çıkışı (-hatta bazı masaüstü pc'lerinde) +10V ile -10V arasındadır. Bu durumda cihazınız programlama yapmaz. Çünkü daha sonra anlatacağımız üzere pic program moduna geçebilmek için MCLR ucundan 13.3V girişi bekler. Bu voltaj, çevirici kablo ile elde edilemediği için pic program moduna geçmez ve programlayıcınız pic'i programlayamaz.

Herşey hazırsa artık en azından elinizde bir breadboard, çeşitli elektronik devre elemanları ve en önemlisi en azından bir adet PIC olmalıdır.


Bu arada yeri geldiği için bir noktayıda açıklamak gerekli. Laptop bilgisayarların üretimi yıllar önce sona erdi. Her nedense notebook'lara hala laptop denmektedir. Bu fırına ocak demekle aynı şey olsada olaya teknik olarak baktığımızda ikiside aynı şey değildir. Teknik çalışanların teknik terimleri doğru olarak kullanması mesleğinin gereğidir. Taşınabilir cihazlar laptop, notebook, tablet pc, umpc olarak sıralanabilir. Doğru ismi doğru yerde kullanmak teknik elemanlar için bir görev olmalıdır.

27 Aralık 2010 Pazartesi

Merhabalar...

Uzunca bir zaman kapı entegreleri ile yapılan elektronik devrelerin yerini artık önce mikrodenetleyiciler (microprocessor) aldı görünen o ki yakın zamanda onların yerini de FPGA'lar alacak. Fakat uygulama alanlarının farklılıkları, maliyetler, üretim zorlukları hala mikrodenetleyicilerin uzun zaman daha yerini koruyacağını gösteriyor.

Bu yazı dizimizde mikrodenetleyicilerden PIC ailesi üzerinde duracağız. PIC ailesi Microchip firması tarafından üretilen mikrodenetleyici ailesidir. Her ihtiyaca cevap verebilen bir çok modeli ve esnek yapısı ile bir çok uygulamada kullanılabilmektedir. (16F877, 16F84, 18F452, 18F2550, 18F4550 gibi)

Konu anlatımlarında; devre simülasyonu için Proteus programı, orjinal devre çizimleri için Eagle Cad programı, pic programlama için Proton Pic Basic kullanılacaktır. Bilgisayar otomasyonu için ise Delphi üzerinden yazılım geliştirilecektir.

Verilecek devreler ve çalışmalar tamamen çalışan ve uygulanmış devreler olacaktır. Bu yazının hazırlanmasında yaklaşık 10 yıldır verilen mikrodenetleyici derslerinin notlarından ve yapılan uygulama projelerinden faydalanılacaktır.

Bu yazı dizisinin sizlere faydalı olacağı ümidi ile tüm okuyuculara saygılarımı sunarım.

pic picbasic proton microcode pic16f84 pic16f88 pic18f452 pic18f2550 pic18f4550 rs232 rs485 serial port parallel port ir infrared automation i2c spi adc dac digital to analog analog to digital 7805 7812 7809 7905 7912 7909 cd4052 cd 4053 cd4051 ds1307 ds1340 lm35 sht75 sht11 temparature humidity measure ultrasonic sumo robot arm fpga türkçe ders açıklamalar komutlar operatörler  uygulamalar project rs232 rs485 rtc adc dac  pds proton development suit