LED Animasyonları II
LED Animasyonları sizin için dans etsin. Bu güzel pic projesini gerçekleştirmek size çok bilgi ve deneyim katacaktır. Durmayın yazının devamını okuyun.
DEVRE DİYAGRAMI
Led animasyonları için devre diyagramı aşağıda verilmiştir.
Devrede PIC dahili osilatör ile çalıştırılmıştır. Böylece RA7 bacağı ile bir led satırı sürülebilmiştir.
Devrede kullanılan elamanların değerleri:
PIC16F628A (1 adet)
R1 – R11 4.7 k (11 adet)
Q1 – Q10 BC547 (NPN) (10 adet)
PIC için LM7805 (1 adet)
Devreden görünüşler.
|
|
MAX232N Entegresinin kullanıldığı RS232-TTL seviye dönüştürücü devre için datasheetinden önerilen devre oluşturulmuştur.
Bu devre için gerekli elemanlar
MAX232N (1 adet)
C1,C2,C4,C5 1uF (4 adet)
C3 1uF (1 adet) [Max232'nin 16. ayağı ile toprak arasına bağlanacaktır.]
JAVA PROGRAMI
İlk yazıdan sonra program ile ilgili bazı eksiklikleri giderme fısatı buldum. Bunlar;
- Program, sahbeleri PIC'e gönderirken "Gönderiliyor (2/19)" gibi gönderilen sahne sayısı ve toplam sahne sayısının gösterilmesi sağlandı.
- İleride başka boyutlarda animasyonlar oluşturulabilsin diye sutunSayisi ve satirSayisi adlarında değişkenler oluşturuldu. Bunların içeriği değiştirilerek farklı boyutlarda animasyonlar oluşturma imkanı sağlandı.
Örneğin 8×8 istendiğinde programın açılış ekranı aşağıdaki hali almakta.
- Animasyonu Oynat butonuna basıldıktan sonra bu butonun pasif olması, Animasyonu Durdur'a basıldıktan sonra Oynat butonunun aktif hale gelmesi sağlandı.
- Maksimum sahne sayısı hesabında maks:eEPRomKacByte/satirSayisi formülü kullanıldı. Programda 0 ile 119. EEPROM hücreleri, led durumlarını saklamak için kullanıldı. Devrede PIC16f628 kullanıldığından EEPROM boyutumuz 128 Byte. Birkaç byte'ı sahne sayısı, beklenecek süre gibi değerler için bırakmak zorunda kaldındı. Bu nedenle EEPROM Byte sayısı 119 olarak girildi. Böylece oluşturulabilecek maksimum sahne sayımız 23 oldu.
PIC led durumlarını 0 ile 119 sayılı EEPROM hücrelerinde saklayacaktır. Seri bilgi alımında, önce "MEHMET" karakterdizisinin gelmesini bekleyecektir. Bu karakterlerden sonra gelen byteları PIC kendi için anlamlı kabul edecektir.
Java programı led durumlarını göndermeden önce sahne sayısını ve sahneler arasında beklenmesi gereken süreyi gönderir. Daha sonra da led durumlarını gönderir. Led durumlarını sahne sahne gönderirken program arayüzünde kaçıncı sahnenin gönderildiğini de gösterir. Bu arada animasyonu da oynatır.
PIC led durumlarını EEPROM'a yazdığından, animasyonu kaydetmiş olacak, bir daha çalıştırıldığında yüklenen son animasyonu oynatacaktır.
LED DURUMLARININ BİR BYTE İÇİNDE YERLEŞİMİ
Led durumlarının 0 ile 119. EEPROM hücrelerinde saklanacağına değinilmişti. Ledler için bir byte'ın anlamı aşağıda verilmiştir.
Bir byte
7. Bit | 6. Bit | 5. Bit | 4. Bit | 3. Bit | 2. Bit | 1. Bit | 0. Bit |
5. led | ÖZEL EFEKTLER | 4. led | 3. led | 2. led | 1. led |
0 ila 4 ve 7. bitler satırda yer alan ledlerin durumlarıdır. Değeri 1 ise led yanacak, 0 ise sönecek anlamındadır.
4-6 nolu bitler özel efektler için ayrılmıştır. Fakat bu projede kullanılmayacaklardır. Özel efektler derken mesela,
- ekrandaki animasyonun yukarıya/aşağıya/sağa/sola doğru kaybolması,
- ekrandaki şeklin 360°döndürülmesi vs.. gibi yapılabilmesi mükmün olan efektler.
PIC sahneleri gösterirken satır satır ledleri yakmaktadır. Her satır arası 1ms beklenmektedir. Böylece 5 satır için yaklaşık 5ms geçmiş olacaktır ve 1 sahne görüntülenecektir. Bu sahnenin görüntülenmesi her 5ms'de bir yenilenmektedir. Böylece bütün ledleri yakmak yerine satır satır ledleri yakmış olup hem istediğimiz sahneyi oluşturmuş hem de daha az enerji harcamış olacağız.
PIC gelen sahne sayısını 125 nolu EEPROM hücresine yazar. Sahneler arasındaki süreyi de 126 nolu EEPROM hücresine yazmaktadır.
Animasyonlar arasında beklenmesi gereken süre 20 ms ve katları şeklinde girilmelidir. Çünkü, java programı girilen ms cinsinden değeri 20 ye böldükten sonra PIC'e göndermektedir. Bu nedenle 20 ms den küçük bir değer girersek PIC'e 0 gönderilmiş olacaktır. Bu bölme işleminin amacı animasyonlar arasındaki sürenin geniş bir yelpazede tutulması için, bu sürenin 8 bit üzerinden gönderilebilmesi için düşünülmüştür. Daha büyük bir sayıya bölünerek süre aralığı daha da genişletilebilir. Şimdilik bu süre maksimum 5.1 sn. dir. Peki bu süre neye göre belirlenmekte?
PIC sahneyi satır satır göstermektedir. Her satır arasında 1ms beklemektedir. PIC'in işlem yapma hızını yeterince hızlı kabul edecek olursak 5 satır için yaklaşık olarak 5 ms geçmiş olacaktır. PIC bu işlemi bir for döngüsü içinde yapar.
Beklenmesi gereken süre 4 ile çarptıktan sonra sahneyi gösteren for döngüsünün işletilmesinde kullanılacak olursa sonuçta 20 ile çarpmış oluruz. Zaten istediğimiz de buydu. (4 sayısı 20/5'ten gelmiştir.)
Şimdi ençok ne kadar bekleme süresi girebileceğimizi hesap edelim. PIC, gelen beklenmesi gereken süreyi, bir byte içerisinde saklamaktadır. Bir byte içinde en çok 255 sayısı tutulabilmektedir. 255*4*5 = 5100 ms. Başka bir deyişle animasyonlar arasındaki süre olarak ençok 5.1 saniye girebiliriz. Daha fazla girersek byte taşacak ve girilen değer daha az bir zamana karşılık gelecektir.
Devrenin bir videosuna buradan ulaşabilirsiniz.
PIC Programı, Java Programı, Max232 datasheetine buradan ulaşabilirsiniz.
Seri iletişimde javada RXTX sınıfı kullanıldı. Bir dahaki yazıda bu sınıfı javada nasıl kullanılacağımızdan söz edilecektir.
Yine son düzeltmeler yapılarak proje baskı devre haline getirilmeye çalışılacak, kaynak dosyaları birarada verilecektir.
Mehmet Demir
Dicle Üniv. Elek-Elktr. Müh. 4. Sınıf
mdemir85@gmail.com