Mart 3

Anten seçici için anten ad ve konumlandırmaları

anten seçici de anten isimleri ve hangi konumda hangi anten seçimlerini yapacağımız kod.

 

Mart 3

Anten seçici için yeni cihaz modifikasyonu

Daha önce tasarlamış olduğum anten seçici için yeni cihazlar için bazı eklemeler yaptım. yapan arkadaşlar için güncellemelerinde fayda var.

 

Mart 3

USB HID Bootloader – Mikrodenetleyicilere Program Yüklemenin Kolay Yolu

Günümüzde üretilen gömülü sistemlerin çoğu firmware güncellemesi yapabilmek adına bir bootloader yazılımına sahiptirler. Bootloader kavramını kısaca özetleyelim. Bootloader cihaz üzerinde asıl çalışacak programın , cihaza yüklenmesini sağlayan ve aynı cihazın içerisine daha önce yüklenmiş küçük bir programcıktır. Biz bu uygulamamızda bir PIC18f2550 mikrodenetleyicisini kullanacağız. Bu durumda USB HID Bootloader yazılımını PIC18f2550 işlemci içerisine önceden bir programlayıcı vasıtası ile yüklüyoruz. (Ben programlayıcı olarak kendi yaptığım  Brenner8p5 klonunu kullanmaktayım. ) Bootloader yazılımı PIC18f2550 mikrodenetleyicisine yüklendikten sonra artık bundan sonra bu PIC programlanırken bir programlayıcıya ihtiyaç duyulmayacaktır. Bundan sonra mikrodenetleyici üzerinde çalışacak programlar doğrudan bir USB kablosu üzerinden mikrodenetleyicimize aktarılacaktır. Burada hatırlatmamız gereken önemli bir nokta bulunmakta. O  da USB Hid Bootloader’ın kullanılabilmesi için mikrodenetleyicinin kesinlikle USB HID özelliğinin bulunması gerektiğidir. Günümüzde pekçok PIC mikrodenetleyicide bu özellik bulunmaktadır.  Bootloader sayesinde, kutulanmış cihazların içleri açılmadan, aynı zamanda haberleşme için de kullanılan USB portları aracılığı ile cihazlara program yüklenebilmekte ve mikrodenetleyicilere program yüklemenin zahmetleri ortadan kalkmaktadır.

Bootlader ile alakalı bu kadar açıklamadan sonra gelelim işlemlerin MikroC ile nasıl yürüdüğüne. Devre şemamızı vererek işe  başlayalım.

Devre şemamızda en dikkat edilecek olan nokta mikrodenetleyicinin 14. pini olan Vusb pinine bağlı olan paralel 100nF değerindeki kondansatörlerdir. Bu kondansatörler PIC içerisinde dahili olarak bulunan USB voltaj regülatörü için gereklidir. Devrede kullanılan kristal ise 20MHz değerindedir. USB donanımı çalışabilmek için 48MHz saat kaynağına ihtiyaç duyar. Bunu sağlamak için PIC içerisindeki PLL donanımı kullanılmaktadır. 20MHZ kristalden gelen sinyal 5’e bölünür ve PLL donanımına girer. Daha sonra PLL çıkışından 96MHz’lik bir sinyal alınır ve bu 2’ye bölünerek 48MHz değeri elde edilir. USB HID Bootloader programı PIC18 serisi işlemciler için mikroC derleyicisinin examples klasörünün altındaki “others” klasöründen ulaşılabilir vaziyettedir.  Proje dosyasının yolu şu şekildedir: “\….\Mikroelektronika\mikroC PRO for PIC\Examples\Other\USB HID Bootloader\Projects\PIC18F”. Biz burada bulunan PIC18 serisi için yazılmış programı düzenleyerek kendi devremize uygun hale getirebiliriz. Ben de aynen bu şekilde yaptım. USB HID bootloader klasörünü masaüstüne kopyaladım ve üzerinde gerekli değişiklikleri yaparak mikrodenetleyicimin içerisine, oluşan “hex” dosyasını brenner8p5 vasıtası ile yükledim. Mikrodenetleyicimize bootloadera ait hex dosyası yüklendikten sonraki adım ise MikroC derleyicisinin tools menüsündeki USB HID Bootloader programının çalıştırılmasıdır.  Aşağıdaki resimde bu programın çalıştırılması görülmektedir.

Programı çalıştırdıktan sonra mikrodenetleyicimizi bir usb kablosu aracılığı ile bilgisayara bağlarız  ve aşağıdaki ekran görüntüsü gelir karşımıza.

Bu pencerede kare içerisine alınan kısım , mikrodenetleyicimiz bilgisayara bağlandıktan sonra eğer hiç bir problem yok ise, kırmızı olmaktadır. Bu kısım kırmızı olduktan sonra “Connect” butonuna tıklanır ve mikrodenetleyiciye bağlanılmış olur. Mikrodenetleyici bilgisayara bağlandıktan sonra 5 saniye içerisinde “connect” butonuna tıklanmalıdır. aksi halde mikrodenetleyici bootloader programını terkedecek ve üzerinde yüklü olan asıl programını çalıştırmaya başlayacaktır.  Mikrodenetleyiciye bağlandıktan sonra “Browse for HEX” butonuna tıklanarak , mikrodenetleyiciye yüklenecek “hex” dosyası seçilir ve “Begin uploading” butonuna tıklanarak programın yüklenmesi tamamlanır.

İşlemler görüldüğü üzere son derece kolay. Bu şekilde hazırladığımız programları denerken, yaptığımız her değişiklikte mikrodenetleyiciyi devre üzerinden söküp takma derdinden kurtulmuş oluyoruz.

kolay gelsin

 

Mart 3

Arduino – UART İletişim

 

 

Seri iletişimdeki “seri” kelimesi iletişimin arka arkaya gelen sinyaller aracılığı ile olacağını belirtmek amacıyla kullanı

lmaktadır. İletişimin ilk yollarından birisi olan dumanla haberleşme de aslında seri iletişimin bir türüdür. İnsanlar uzakl

ara mesaj iletmek amacıyla bir ateş yakarlar ve bu ateşin üzerini belirli periyotlarda örtüp açarak gökyüzüne kısa veya uzun dumanlar gönderme yöntemiyle mesajlarını kodlarlardı. Bu duman parçalarını gören diğer insanlar kodlanan mesajı çözerler ve iletişim sağlanmış olurdu.  Seri iletişime bir diğer örnek ise telgraftır. Telgrafta mors alfabesi kullanılıyordu ve bu alfabede rakamlar ve harflerin nokta ve çizgilerden oluşan karşılıkları bulunmaktaydı. Telgrafı kullanan operatör örneğin ‘A’ harfini gönderecekse telgrafın butonuna bir kez tıklayarak bir nokta , arkasındanda kısa süre basılı tutarak bir çizgi gönderiyordu. Alıcı tarafta ise bir makara üzerine sarılı kağıda bir elektromıkna

tısa bağlı kalem vasıtasıyla bu nokta ve çizgi tamamen elektromekanik bir yöntemle çizdiriliyor ve kağıt üzerinde “. _” şeklinde bir görüntü oluşuyordu. Alıcı taraftaki operatör bu şekilleri çözümleyerek mesajı ortaya çıkarıyordu.  Günümüzde insanların birbirleriyle iletişimi kadar makinelerin birbirleriyle iletişimi de büyük önem kazanmıştır. Örneğin bir televizyonun kumandasının televizyonla haberleşmesi de bir seri haberleşme örneğidir ve günlük hayatımızda makinelerin birbirleriyle haberleşmelerine sıklıkla başvururuz. Seri dijital  haberleşme yöntemlerinden olan UART daha önce verilen duman ve telgraf örnekleriyle büyük benzerlikler ihtiva eden bir makineler arası haberleşme protokolüdür.

UART – Universal Asynchronous Receiver/Transmitter (Evrensel Asenkron Alıcı/Verici) kelimelerinin baş harflerinden oluşur. Evrensel olmasının sebebi iletişim özelliklerinin değiştirilebilir olmasından dolayı bu modül bulunan bütün cihazlarda kullanılabilmesidir. Asenkron olması ise iletişim esnasında harici bir clock (saat) sinyaline ihtiyaç duymamasına dayanır. Günümüzde neredeyse bütün mikrodenetleyicilerde dahili UART modülü bulunur.

UART iletişimi

nde toplam 3 adet kabloya ihtiyaç duyulur.  Bunlar iki yönlü haberleşme için birer kablo ve alıcı ile verici arasındaki şase vo

ltaj farkını sıfırlamak amacıyla ortak bir GND bağlantısıdır. UART haberleşmesinde her bir mikrodenetleyici veya cihaz iki adet pine sahiptir. Bu pinler RX ve Tx olarak isimlendirilir. Tx pini transmit (veri gönderme), Rx pini receive (veri alma) amacıyla kullanılır. Haberleşecek olan cihazlardan birisinin Tx pini diğerinin Rx pinine, Rx pini ise diğerinin Tx pinine bağlanarak çarpraz bir bağlantı oluşturulur. Aşağıdaki şekilde bu bağlantı gösterilmiştir.

UART haberleşmesinde gönderilecek verinin boyutu 5 bitten 9 bite kadar olabilir fakat genellikle 8 bit (1 byte) veri iletimi kullanılmaktadır. Aşağıdaki şemada 8 bitlik bir verinin gönderilmesi esnasındaki sinyal şekline bir örnek verilmiştir.

Şekilde görüldüğü gibi iletişim yokken veri hattı yüksek konumdadır. Veri iletileceği zaman bir başlangıç biti gönderilir ve bu bitin durumu düşük konumdur. Daha sonra iletişim kaç bit olarak ayarlandıysa o kadar bit veri gönderilir. Yukarıdaki şekilde data 8 bit olarak gönderilmiştir. Daha sonra eşlik biti gönderilir. Bu bit gönderilecek verilerin içerisindeki 1 değerlerinin sayısına göre değişiklik göstermektedir. Eğer 8 bit veri içerisindeki 1 lerin sayısı tek sayı ise eşlik bitinin değeri ‘1’ eğer data içerisindeki 1 lerin sayısı çift ise eşlik biti ‘0’ değeri alır. Bu bitin amacı veri iletimi esnasında veri kaybı olup olmadığını kontrol etmektir.  Eşlik bitinin kullanımı opsiyoneldir ve alıcı verici arasındaki iletişim kurulurken en başta bu bitin kullanılıp kullanılmayacağı belirtilir.  Veri iletiminin bittiğini haber veren bit ise stop bitidir ve 2 adet yüksek konumlu bit olarak gönderilir ve veri hattını yüksek konumda tutar. Arduinoda bu yüksek konum 5V’tur.

UART iletişimde herhangi bir clock sinyali ile senkronizasyon sağlanmadığı için verilerdeki her bit belirli bir zaman aralğına sahiptir. Örnek olarak her bir bitin gönderilmesi 1 milisaniye saniyede 1000 bit veri gönderilir ve bu değere “baud rate-(veri aktarım hızı)” ismi verilmektedir ve alıcı-verici çiftinin baud rate değeri eşit olmak zorundadır.

Uart ile temel olarak ikilik sayı değerleri ile veri iletişimi yapılmaktadır. Eğer bu iletişimde karakterler gönderilmek istenilirse gönderilen şey yine ikili sayı sisteminde düzenlenmiş olan sayısal değerler olacaktır. Her karakterin bir sayısal karşılığı bulunmaktadır ve bu karşılıklara ASCII kod denilmektedir. Aşağıda bazı karakterlere ait ASCII kodları görülmektedir. Bu kodlar Arduino içerisinde karakterler ile işlem yaparken otomatik olarak elde edilmektedir.

Arduinoda seri haberleşmeyi kullanmak için ‘Serial’ kütüphanesi kullanılmaktadır. Bu kütüphanede kullanılan fonksiyonlardan bazıları aşağıda açıklanmıştır.

begin: Bu fonksiyon seri haberleşmeyi başlatmak ve veri hızını belirlemek amacıyla kullanılır. Örnek kullanımı aşağıdaki gibidir:

Serial.begin(9600); // Seri iletişimi başlat ve veri iletim hızını 9600 bps olarak ayarla.

write: Bu fonksiyon tek bir veri paketi göndermek amacıyla kullanılır. Örnek kullanımı aşağıdaki gibidir:

Serial.write(‘a’); // ‘a’ karakterini gönder.

print: Bu fonksiyon bir veri dizisini göndermek amacıyla kullanılır. Örnek kullanımı aşağıdaki gibidir:

Serial.print(“Arduino”); // “Arduino” yazısındaki karakterleri arka arkaya gönder.

println: Bu fonksiyon bir veri dizisini göndermek ve ardından bir alt satıra geçme komutu (carriage return)göndermek amacıyla kullanılır. Örnek kullanımı aşağıdaki gibidir:

Serial.println(“Arduino”);// “Arduino” yazısındaki karakterleri arka arkaya gönder ve son olarak carriage return karakterini göndererek satır başı yap.

available: Bu fonksiyon arduinonun veri alıp almadığını ve aldıysa kaç paket veri aldığını öğrenebilmek amacıyla kullanılır.

read: Bu fonksiyon arduinonya gelen 1 paket veriyi almak için kullanılır. Örnek kullanımı aşağıdaki gibidir.

if( Serial.available()>0)  // eğer gelen veri sayısı 0’dan büyükse yani veri geldiyse

{

char gelenVeri=Serial.read(); //gelenVeri isminde bir değişken oluştur ve gelen veriyi bu değişkene al.

}

Bu yazıda yapacağımız uygulamamızda bilgisayar üzerinden gelen karakterleri LCD ekran üzerinde göstereceğiz. Arduino üzerinde usb’den seriye dönüştürücü bir çip bulunmaktadır ve bu çipin RX TX uçları Arduinonun Tx, Rx pinlerine bağlıdır. Bu çip arduinoya program yükleme amacıyla kullanıldığı gibi PC-Arduino arasında seri haberleşme sağlamak amacıyla da kullanılabilir. Bu çipin özelliği USB port üzerinde bir sanal seri port oluşturmak ve USB’den gelen verileri  Arduino geliştirme kartı üzerindeki Atmega328p mikrodenetleyicisine UART protokolü ile iletmek ve Atmega328P’den gelen UART protokolündeki verileri USB formatında PC’ye iletmektir.

Bu uygulamada kullanacağımız devre aşağıdaki gibidir:

Uygulamada kullanacağımız kodlar aşağıdaki gibi olabilir.