dimmer kartı kontrol ünitesi

Transkript

dimmer kartı kontrol ünitesi
DİMMER KARTI KONTROL ÜNİTESİ
Resim 1. Dimmer Kartı Kontrol Ünitesi
1
İÇİNDEKİLER………………………………………2
1.GİRİŞ………………………………………………………2
2.YAZILIMSAL YAPI………………………...…………….2
2.1. Birinci Kısım……………………………………….3
2.2. İkinci Kısım………………………………..............4
3.EK …………………………………………………………6
3.1. testunit.c…………………………………………....6
3.2. testunit-iso.c………………………………………19
1.GİRİŞ
Balast kelimesi, Türkçe anlamıyla “denge sağlamak” demektir. Sokak lambalarının
kontrolünü yapan ve çevre şartlarına göre lambanın daha uzun süre sağlamlığını koruması
için, lambanın yanıp yanmama durumunu, çevreye göre değişen iç etkenlerini düzenleyen ve
dengeleyen programlanabilir devrelere balast denir.
Balastların içlerindeki en önemli yapılardan birisi de; devrenin, dolayısıyla da
lambanın gücünü kontrol eden dimmer devresidir. Dimmer devresi de balast tümdevresinin
içine yerleştirilmiş ayrı bir devredir.
Balastların üretildikten sonra, kullanılmaya başlanmadan önce kontrol edilmeleri
gerekir. Bu kontrol aşamasının en önemli kısmı ise, balastın temel görevini yerine getirmesini
sağlayan dimmer ünitesinin kontrol edilmesidir.
Dimmer ünitesinin kontrolü, çalışma esnasında devreye vermesi ve devreden alması
gereken gerilim değerlerinin ölçülmesiyle sağlanır. Bu proje, söz konusu kontrolü yapabilmek
için hazırlanmıştır.
2.YAZILIMSAL YAPI
Kontrol devresinin yazılımı iki kısımdan oluşmaktadır.
Birinci kısım, dimmer üzerindeki güç seviyesini ADC yardımıyla belli aralıklarla
sürekli okuyup ikinci kısım olan asıl yazılıma göndermekle görevlidir.
İkinci kısım ise gerilim değerlerinin uygun olup olmadığının kontrol edildiği, uygun
olan dimmer kartlarının testi başarıyla geçtiğini belirten, herhangi bir problem olduğunda ise
o kartı tekrar kontrol edilmesi için testten geçirmeyen kompleks yazılımdır.
2
Her iki yazılımda da veri gönderme ve alma işlemi RS-232 iletişim protokolü
üzerinden yapılmaktadır. RS-232 veri iletişim protokolünün yapısı şöyledir :
RS-232 Protokolü
RS-232, ağırlıklı olarak bilgisayar iletişiminde kullanılan ikilik verinin seri olarak
aktarımında kullanılan bir standarttır. Bu standartların kapsamı elektriksel karakteristikleri,
sinyal zamanlamalarını, sinyal anlamlarını, fiziksel büyüklükleri ve bacak çıkışlarını
kapsamaktadır. Şu anki standart 1997'den beri kullanılmaktadır.
RS-232 de temel kavram Baud kavramıdır. Baud, bir saniyede gönderilecek bit sayısı
olarak ifade edilir. Günümüzde 3600,4800,7200,9600,14400,19200,28800 vb. Baud çeşitleri
bulunmaktadır. Yapılan yazılımda 9600 Baud Rate tercih edilmiştir.
Benzer birçok iletişim protokolünde olduğu gibi RS-232 de de veriler paketler halinde
gönderilir.
Start
DATA
Parity
Stop
şeklinde gönderilen veriler, alıcı cihazdan da aynı paket halinde alınır ve yorumlanır.
2.1. Birinci Kısım
Kontrol ünitesi üzerine yerleştirilmiş PIC 12F683 entegresi üzerine programlanan bu
yazılım, belirli zaman aralıklarında bir, dimmer devresindeki ADC’den bilgiyi okuyup asıl
yazılıma gönderme işlemini gerçekleştirmektedir. ADC den 10 bit olarak okunan veri, beşer
bitlik iki parçaya bölündükten sonra başlarına düşük ve yüksek beş bit olduklarını belirten
adresler eklendikten sonra yine RS-232 protokolüye önce düşük 5 bit ve ardından da yüksek 5
bit olmak üzere gönderilir.
#int_TIMER0
void TIMER0_isr(void)
{
if (index>9)
{
index=0;
dim_lvl=read_adc();
dim_lvl_copy=dim_lvl;
dim_lvl=dim_lvl&0x001F;
3
dim_lvl=dim_lvl|0x0020;
dim_lvl_copy=dim_lvl_copy/32;
dim_lvl_copy=dim_lvl_copy|0x0040;
send=(int)(dim_lvl);
printf("%c",send);
delay_ms(10);
send=(int)(dim_lvl_copy);
printf("%c",send);
}
index++;
}
Not: Yazılımın tamamı rapor sonunda ekte verilmiştir.
2.2. İkinci Kısım
Bu kısımda, 40 bacaklı PIC 16F887 mikrodenetleyicisi kullanılmıştır.
Mikrodenetleyici içerisine yazılan program yardımıyla, dimmer’dan gelen bilgiler alınır,
hazırlanmış fonksiyonlar yardımıyla gerekli hesaplamalar yapılır ve uygunluk durumuna göre
teste devam edip edemeyeceği belirlenir ve test ünitesi üzerine yerleştirilmiş LCD ekran
üzerinde sonuçlar gösterilir.
Program başlarken kullanıcıdan üniteyi nasıl kontrol edeceğinin seçimini yapması
istenmektedir. Bu noktada tuş takımı ve dokunmatik kontrol olmak üzere iki farklı seçenek
kullanıcıya sunulmuştur. Projenin bu sürümünde sadece tuş takımı kontrolüne izin
verilmektedir. Dokunmatik kontrol seçildiğinde ise program çalışmayacak bekleme
konumuna geçecektir. Kontrol seçimi ve daha sonraki seçimler kontrol ünitesi üzerine
yerleştirilmiş iki buton yardımıyla yapılacaktır.
Kontrol ünitesinin üzerine yerleştirilen LCD yardımıyla hem cihazın daha görsel ve
kullanışlı olması sağlanmış hem de test sırasında kullanıcısına teste daha kolay müdahale
edebilme imkânı sağlanmıştır. Bu kısımda LCD fonksiyonları geniş yer tutmaktadır.
Grafik işlemlerinin tamamına yakını fonksiyonlar yardımıyla yapılmaktadır. Bunun
amacı hem mikrodenetleyicinin ROM’unda çok fazla yer kaplanmasını önlemek hem de daha
sonradan ilave edilecek yeni işlemler için tekrardan kolaylıkla kullanılabilmesini sağlamaktır.
Program çoğunlukla main() fonksiyonundan oluşmaktadır. İşlemlerin çoğu burada
gerçekleştirilip bir kesme geldiğinde ya da LCD fonksiyonlarından bazıları kullanılacağı
zaman gerekli fonksiyonlara dallanılıp işlem sonunda tekrar main() fonksiyonuna geri
dönülmektedir.
İlk olarak programın başında init() fonksiyonu çağırılmaktadır. Oluşturulan bu
fonksiyon, teste başlandığında bir defa olmak üzere mikrodenetleyici üzerindeki port, timer,
4
oscilator gibi yapıların başlangıç ayarlarını yüklemektedir.
İlk kontrol seçimi ‘touch_control’ bit değişkeniyle kaydedilmektedir. Program
boyunca bu değer ve ‘test_cancelled’ adlı testin iptal olup olmadığını kontrol eden bir başka
bitsel değişken kontrol edilip uygunluk durumuna göre teste devam edilmektedir.
Fonksiyon Analizi;
Kullanılan draw_button fonksiyonu kendisine parametre olarak verilen x,y
koordinatlarından itibaren, kendisine verilen height, width parmetreleri büyüklüğünde ve mod
değişkeniyle belirtilen moda(siyah/görünür,beyaz/görünmez) LCD üzerine butonlar
çizmektedir.
void draw_button (int x, int y, int height, int width, int mod)
{
glcd_bar (x, y + height / 2, x + width, y + height / 2, height, ON) ;
glcd_circle (x, y + height / 2, height / 2, TRUE, ON) ;
glcd_circle (x + width, y + height / 2, height / 2, TRUE, ON) ;
}
Draw_circle() fonksiyonu test iptal olduğunda çalışacak olup, arka arkaya içi dolu
birçok çember çizerek ekrana büyük bir X işareti oluşturacaktır. ‘length’ değişkeni X
işaretinin uzunluğunu, ‘size’ ise çemberlerin yarıçaplarını belirtir.
void draw_circle (int x,int y,int length,int size)
{
int m;
for (m = x;m < x + length;m++)
{
glcd_circle (m, y++, size, TRUE, ON);
}
glcd_circle (m, y, size, 1, 1) ;
for (m = x;m < x + length;m++)
{
glcd_circle (m, y--, size, 1, 1) ;
}
glcd_circle (m, y, size, 1, 1) ;
}
Kullanıcının testi iptal etmek isteyip de kontrol ünitesinde ‘İptal’ butonuna bastığında
ya da test içinde dimmer’dan alınan herhangi bir değer çalışma şartlarına uygun olmadığında
test_iptal() fonksiyonu çalışır. Bu fonksiyonun görevi test kontrol değişkenlerini
düzenlemektir.
5
void test_iptal ()
{
glcd_fillscreen (OFF) ;
text = "Test Iptal Edildi";
delay_ms (400) ;
glcd_text57 (0, 0, text 1, ON);
test_cancelled = TRUE;
test_cancelled_by_user = TRUE;
return;
}
6

Benzer belgeler