atık2n3055 transistorlerle elektirik uretmek istiyorumbir bu konuda bilgileri olanlar varsa bilgilerini bekliyorum maliyeti fazla olur demeyin para onemli degil
güneş paneli
Kapat
X
-
Etiketler: Tanımsız
-
Konu: güneş paneli
(Tübitaktan bir alıntı yaptım şimdi yol gösterici olur umarım eğer işe yara bişiler bulursam sizlerle paylaşırım. )
kışın bedava enerji isteyenler.kışın ısınmak için kullandığımız yöntemler ne olursa olsun mutlaka ısı yayan bir cihazı kullanmaktayız.buda bize kışın butür cihazları yazında başka amaçlar için ( fırınlar,klimalar vb) kullandığımızda ortaya çıkan ısının enerjiye çevrilmesi
prensibine dayanmaktadır.
yöntemi anlatmadan önce kullanılacak komponetler hakkında bilgi vereyim.
1=termokupl
2=akü (6 voltluk)
3=basit akü şarj devresi.
4=almaç(radyo,veya lamba,saat)
termokupl'ü anlatmak gerekirse,sıcaklık tamamen fizik ile ilgili temel bir konudur.çok çeşitli fiziksel özellikleri etkileyen bir parametre olması nedeniyle ölçülmesi gereken önemli bir değişkendir.termokupl iki farklı alaşımın ucunun kaynatılması ile oluşturulan basit bir sıcaklık ölçü elemanıdır.termokupl'ün ucunu ısıttığımızda ortaya mili volt mertebesinde bir enerji çıkmaktadır.
termo çiftlerin genel birleştirilme tiplerini inceleyelim.
1)cu-constant bakır-konstantan
2)fe-constant demir-konstantan
3)cr-al kromel-alümel
4)nicr-ni nikel krom-nikel
bunları arttırmak mümkün bu gibi alaşımları bir araya getirip miktarıda arttırdığınızda (seri
bağladığınızda) elde edilecek olunan voltaj artacak aynı zamanda farklı gurupların paralel bağlanmaları sonucunda ise amperi artacaktır.buda bizim için aküyü şarj etmek için yeterli olacaktır.
ardındanda artık devremizin ısı yayan cihazların içine veya etrafına(yakınolmak kaydıyla) konulması ile bedava elektrik enerjisi üretilmiş olunmaktadır.yapacak arkadaşlara başarılar.
-
Konu: güneş paneli
anladıgıma gore bu iş baya zor mus benim baska sorum olacak
ben tek hat üzerinden 4 tane motoru tus takımları ile saga sola calıştırmak istiyorum mesela motorun kodunu girdigimizde o motor harekete gececek bu konuda bilgileriniz var sa cok acil heber bakliyorum cunku bunu doneem projesi olarak okulda gurup olarak yapmayı dusunuyoruz 22sinde acılıyor okulum yardımların için tesekkurlerYorum
-
Konu: güneş paneli
daha pic proglamayı bilmiyorum ama bu sene dersi var orada ogrenecegiz ilk olarak yapacagımız devrenin semasını bulum devreyi kuracagız pic proglama işini ikinci donem hocanın da yardımıyla yapacagız senin elinde devre seması varsa o benim cok işime yarar gerisini ben yapabilirimYorum
-
Konu: güneş paneli
hocam bi zahmet yardım et cok onemli bu odevim sen bana olabilecek bir sey soyle ben yaparımYorum
-
Konu: güneş paneli
bi kaç tane örn yolluyorum hangisi kolayına gelirse onu yaparsın. senin tasarın içinde hafta sonu bakayım pek kafa yoracak vaktim yok hafta içi açıkcası... sanırım aşağıdaki devrelerde ağır oldu. bi arşivime felan bakim bakalım neler yapabiliriz.Son düzenleme Tactless; 11-09-2008, 21:32.Yorum
-
Konu: güneş paneli
DC Motor Kontrolü
DC motorlar birçok elektronik cihazda yaygın olarak kullanılmaktadır. En basitinden, bilgisayarınızın işlemcisini soğutmaya yarayan fan pervanesi, bir DC motor ile çalışır. DC motorların PC' ye bağlanarak robotik ve mekanik araçlarda kullanılması yaygınlık kazanmıştır. Örneğin, simetrik metal parçaların imalatında kullanılan CNC tezgahları DC motorlar içermektedir.
Robot üzerinde Seri - Paralel, Paralel - Seri dönüştürücü kullanmış. Bu şekilde bilgisayardan gelen seri bilgiyi motorlara iletebiliyor. Geri beslemeyi de bilgisayara yolluyor. Aynı zamanda robot, zemine çizilen siyah bir çizgiyide izleye biliyor.
DC Motorların çalışma prensipleri çok basit temellere dayanır. Bir çoğumuz bir mıknatısı inceleme fırsatı bulmuşuzdur. Mıknatısın iki kutbu vardır. Bunlar, N (North) ve S (South)kutuplarıdır. Zıt kutuplar birbirine çeker ve aynı kutuplar birbirlerini iterler. DC motorlar, manyetik kutupların birbirleri ile bu etkileşim ilişkisi üzerine kurulmuş, dönme hareketi sağlayan cihazlardır. DC motorlar hakkında daha detaylı bilgi için http://dummy.kreta.dyn.priv.at/temp/...orks/motor.htm adresine mutlaka göz atın.
DC Motorlar robotların en temel parçalarıdır. Adım motorlar, genelde konum kontrolü amaçlı kullanılırlar. Yük taşımak için ise DC motorlar tercih edilir. DC motor kontrol etmenin birçok yolu vardır. DC motora uygulayacağımız akımın yönüne göre motorun yönü, voltajın büyüklüğüne göre de hızı değişecektir. Kontrol yöntemlerinden bir tanesi de DAC (Digital Analog Converter) kullanmaktır. Bir DAC 'ye gönderilen 8 bitlik sinyal sonucunda istediğimiz voltajı elde etmemiz mümkün olabilir. Örneğin yazılımla bir sinüs yada kare dalga yaratıp DAC ile çıkış alacağız.
Halbuki DC motor kontrolü için üretilmiş çok verimli yongalar vardır. Bunlardan birtanesi Allegro firması (Allegro MicroSystems, Inc.) tarafından üretilen H-Bridge sürücüsüne sahip ve 30V ve 0.5 amperlik yüklere dayanıklı UDN2993B yondasıdır. İlk olarak bu entegreden bir tane edinmemiz gerekiyor.
DC Motor Kontrol Devresi:
UDN2993B entegresinin, motorun yönünü ve hızını belirlemek için iki konnektörünü kullanıyoruz bunlardan bir tanesi PHASE A (3) diğeri ise ENABLE A (2) girişleri. Bu entegre ile iki tane motor kontrol etmek mümkün 2-8 numaralı konnektörler birinci motor için, 9-15 arası konnektörler ise ikinci motor için tasarlanmıştır. PHASE girişi motorun yönünü belirlemeye yarar. Bu girişe uygulayacağımız lojik voltaj ile motorun dönme yönünü değiştirebiliriz. ENABLE girişine uygulayacağımız PWM (Pulse Width Modulation) sinyalleri ile de motorun hızını kontrol edebiliriz.
PWM Sinyalinden kısaca bahsedelim, ( Kaynak: PC Generated Pulse Width Modulation (PWM) DC motor Speed Control )
PWM sinyalini yazılım ile üretmek çok kolaydır. Temel olarak motorun dönme hızı, darbeler şeklinde ENABLE girişine uygulanacak lojik voltajın darbe zaman aralığına bağlıdır. PWM sinyali, motor hızını kontrol etmek için başvurulan verimli bir yöntemdir. PWM bisiklet binmeye benzer. Bisikleti sürerken, pedal çevirdiğimiz ve çevirmediğimiz zamanlar olur. Yani bazen kendi momentinizle hareket ederiz. Çevirdiğimiz zamanları on-time, çevirmediğimiz zamanları off-time olarak düşünelim. Eğer biraz yavaşladığımızı hissedersek, tekrar pedal çeviririz. PWM sinyalleri de bu mantığa dayanır. PWM sinyalleri görev çevrimi (duty cycle) oranı ile tanımlanır. Görev çevrimi süresi, on-time süresi ile toplam süre arasındaki orana eşittir. 100% DC (duty cycle) demek, motor tam performans ile çalışıyor demektir. Eğer motorun hızı ile oynamak istemiyorsanız, yapmanız gereken sadece ENABLE (2) girişine, sürekli lojik "1" yani + 5Volt uygulamaktır. Bu durumda motor tam güç ile çalışacaktır.
Paralel portun DATA0 pinini UDN2993B 'nin ENABLE (2) girişine, DATA1 pinini de PHASE (3) girişine bağlıyoruz. ENABLE girişine yukarıda bahsettiğimiz şekilde PWM sinyallerini DATA0 pininden uyguluyoruz. PHASE girişine ise DATA1 pinini yüksek (1) yada düşük (0) yaparak yön değiştirmeyi sağlıyoruz. Dolayısı ile paralel porta, motoru bir yönde döndürmek için "1" değerini gönderiyoruz. Diğer yönde döndürmek için ise, DATA0 a PWM sinyallerini uygularken DATA1 'i de "1" yapmamız gerekiyor. Bunun için paralel porta her iki biti de yüksek yapacak "3" değerini gönderiyoruz. Kısacası, motor bir yönde dönerken paralel porttan uygulanan sinyaller 1-0-1-0-1-0-1-0-... şeklinde giderken, diğer yöne çevirdiğimizde, 2-3-2-3-2-3-2-3-... şekline dönüyor. Bu şekilde, PHASE biti yüksek tutulurken, ENABLE bitine PWM sinyaller uygulanmaya devam ediliyor.
Aşağıdaki program örneği Visual Basic altında PWM sinyalleri ile DC motor kontrol etmeye yarıyor. Tipik olarak DC motor kontrol devreleri, zamanlama devreleri ile birlikte tasarlanmaktadır. Biz zamanlama olayını yazılım aracılığı ile çözüyoruz. Böylece devremiz hem daha verimli hemde daha hesaplı oluyor. Motorun en verimli çalışma hızını elde etmek için, PWM fonksiyonundaki total_time değişkeni ile oynayabilirsiniz. Bu değer 0.1 saniye olarak ayarlanmıştır. Bu değeri değiştirdikçe motorun çalışma hızı ve şekli, değişecektir.
DELAY Fonksiyonu: Bu fonksiyon içerisine, saniye cinsinden girilen delay_time değeri kadar bekletme sağlar.
PWM Fonksiyonu: Bu fonksiyon, aldığı duty_cycle değerine ve total_time değerine göre onTime ve OffTime sürelerini hesaplayıp, DATA0 çıkışına yani entegrenin ENABLE girişine, belli aralıklarda lojik "1" uyguluyor. Burada kullanılan PHASE değişkeni motorun yönünü değiştirmeye yarıyor.
PWM sinyali ile DC Motor kontrolü (Visual Basic)
Public Enable As Integer, Phase As Integer, duty_cycle As Integer, a As Integer
Const PortA = &H378 'Paralel Port adresi
Sub delay(delay_time As Double)
'Gecikmeyi sağlayan fonksiyon
temp_timer = Timer
Do
Loop While (Timer - temp_timer) < delay_time
End Sub
Sub pwm(total_time As Double, duty_cycle As Integer)
Dim OnTime As Double
Dim OffTime As Double
OnTime = total_time * duty_cycle / 100
OffTime = total_time - OnTime
Enable = 1
Out PortA, Enable + Phase
delay OnTime
Enable = 0
Out PortA, Enable + Phase
delay OffTime
Label1.Caption = duty_cycle
Label1.Refresh
End Sub
Private Sub Command1_Click()
If duty_cycle < 100 Then
duty_cycle = duty_cycle + 5
Enable = 1
Label1.Caption = duty_cycle
Label1.Refresh
End If
End Sub
Private Sub Command2_Click()
a = 0
Do
DoEvents
If a = 1 Then Exit Do
pwm 0.1, duty_cycle
Loop
End Sub
Private Sub Command3_Click()
If duty_cycle > 5 Then
duty_cycle = duty_cycle - 5
Enable = 1
Label1.Caption = duty_cycle
Label1.Refresh
End If
End Sub
Private Sub Command4_Click()
'Ters yönde çalıştırma rutini
Enable = 1
If Phase = 0 Then
Phase = 2
Else
Phase = 0
End If
End Sub
Private Sub Command5_Click()
'Durdurma ve Do-Loop tan çıkış
a = 1
Out PortA, 0
End Sub
Private Sub Form_Load()
duty_cycle = 50
Phase = 0
End Sub
(alıntıdır)Son düzenleme Tactless; 11-09-2008, 21:30.Yorum
-
Konu: güneş paneli
C# kullanarak, bilgisayarınızın paralel portu’na bağladığınız kendinizin yaptığınız bir elektronik devreyi kontrol etmek çoğunuza heyecan verecektir. Bu elektronik devre çok değişik amaçlarla kullanılmak istenmiş olabilir;örneğin bir motor kontrol devresi, bazı led’leri yakıp söndürmeye yarayan bir devre veya bazı sezicilerden bilgi toplayıp, bilgisayara besleyip, buna göre bilgisayarın bazı cihazları kapatma veya açma eylemlerinde bulunmasını istediğimiz bir devre olabilir. Veya daha da heyecan verici şey; evinizdeki bilgisayarınıza bağlı bir cihazı (örneğin bir kahve makinesiniveya balıklarınızı yemleyen bir düzeneği) internet üzerinden, bulunduğunuz mekandan(burası Sahra çölü de olabilir, eskimoları ziyarete gittiğiniz kutuplarda bir yer de) , yeter ki internet bağlantınısı kurabileceğiniz bir yer olsun(Hey CELL-O!; kutuplarda var mısınız? ) kontrol etmek olsa gerek. İleriki bölümlerde bir ASP.NET sayfası üzerinden böyle bir şeyi gerçekleştireceğiz. Yeterince heyecan verici buldunuzsa okumaya devam edin!..
Örnek Uygulama
PARALEL PORT:
Kontrol kartımızı takacağımız port bu port olacaktır. Centronics port’u da denilen bu port, endüstriyel bir standart olup, USB portlarından önce yazıcılar için kullanılan temel bir porttu. Bir bilgisayarda en azından bir adet böyle bir port bulunmaktadır. Port, bilgisayarla gelmekte olup, ya bilgisayarın ana kartı üzerinde, ya da sonradan eklenebilen I/O kartlarıyla bize sunulmaktadır. Bir bilgisayarda birden fazla böyle portlar bulunabilir. Bunların adları LPT1,LPT2..., diye gidecektir.
Bilgisayaraınızdaki portların adreslerini Control Panel>System>Hardware>Device Manager>Ports>LPT1 ‘den kolaylıkla öğrenebilirsiniz. Eğer bir adet port varsa, adresi büyük olasılıkla 0x378’dir(Hexadesimal biçemde). Bu değer, portun temel-adresini tanımlamaktadır.
DONANIM:
Bu bölümde, denemelerimde kullandığım , paralel porta takılacak devrenin şemasını vereceğim. Bu devreyi bir breadboard üzerinde kurmanız zor olmayacaktır.Yok eğer, “ben daha derli toplu olmayı ve ileriki projeleri de düşünüyorum”, diyorsanız ve de kartın baskı devre ve elemanlardan oluşan kitini bütün halinde elde etmek isterseniz , benimle temas kurabilirsiniz.
Gelin önce, paralel porta bir göz atalım.Nasıl bu port kontrol amaçları için kullanılabilir, onu inceleyelim ve daha sonra da devremize göz atalım.
Şemada(Şekil1.1) gösterildiği gibi, bir paralel port üç gruptan oluşur.
1)Data grubu:
8 kanalı bulunan bu grup üzerinden bağlı devremize sinyal gönderebiliriz. Bu grup 8bitlik bir CPU port adresine karşılık gelir. Yani bu grubun adresi, ilgili paralel portun temel adresi neyse odur.
2)Kontrol grubu:
Bu grubun kanallarının amacı da bağlı cihaz veya devrelere kontrol sinyali yollamaktır. Bu grupta 4 adet sürgülü çıktı kanalları( -STROBE,-LF/CR,-SLN ve –INITILAIZE) bulunur. Bu grubun kontrolu ilgili CPU portunun temel adresi+2 adresinden yapılır. STROBE,LF/CR ve SLIN yolları mantıksal olarak tersine dönüktür(inverted). Halbuki, INITIALIZE böyle değildir. Yani dışarıya bir yüksek sinyal göndermek istersek, dönük olan kanallara düşük sinyal koymalıyız.
Şekil 1.1 Paralel port’un mantıksal yapısı:
3)Status grubu
Bu grup portumuza bağlı devrelerden, bilgisayarımıza bilgi girişinin yapılabileceği kanalları barındırır.Bu grupta 5 kanal vardır. (-ERROR,SLCT,PE,-ACK, ve BUSY) diye..ve dışarıdan içeriye doğru yönlendirilmişlerdir. Gelen bilgiler ilgili CPU portuna beslenir ve bu portun adresi temeladres+1’dir.Bu adresin içeriğini okuyarak , gelen sinyalleri toplayıp değerlendirebiliriz.BUSY kanalı terslenmiştir, fakat diğerleri değil.
KARTIMIZIN ŞEMASI
Şimdi bu bilgiler ışığında , kullanacağımız devrenin şemasına bir göz atalım.
Bu kart, bilgisayarımız ve kontrol veya bilgi toplamaya yarayacak sezici devrelerimiz arasında ara yüz görevi görecektir.Kartımızda her bir girdi veya çıktı hattının mantıksal değerini göstermek için LED’ler bulunmaktadır. Bu LED’ler acalığıyla programımıza yaptırdığımız I/O işlemlerini takip edebileceğiz, kolaylıkla..
Kartımızdaki her bir I/O hattına kolaylıkla bağlantı yapabilmek için vidalı klemens bulunmaktadır. Bilgisayarımıza giren hatlar ise, Schmitt trigger tampon tümleşik devreleri aracılığıyla tamponlanmışlardır.
Devremiz, 8-15V’lık bir düzeltilmemiş doğru akım güç kaynağından beslenebilir.Kart üzerinde bunu düzelten ve istenen düzeye getiren bir 7805 +5V 1A ve ek elemanlardan oluşan voltaj düzenleme devresi de bulunmaktadır. Kaynağımızdan çekilecek akımın düzeyini sınırlamak için bir adet 1A’lik sigorta da bulunmaktadır.
Şekil 1.2 Kartın elektronik devre şeması
Paralel portumuzun DB0-DB7 ‘den oluşan Data port’u 74LS244 Schmitt trigger tampon devresi(IC2) ninin girdi kanallarına 8 adet 100ohm’luk dirençler aracılığıyla beslenmektedir. Tampon devreninin çıktı kanalları ise vidalı klemense getirilmiştir.Her bir hat aynı zamanda düşük akımlı bir LED’e 3.3Kohm’luk direnç üzerinden bağlanmıştır. Ne zaman ki, hattımızı mantıksal yüksek yaptık, ilgili hattın LED’i yanacaktır. Kontrol portunun 4 hattı da Data port’ta olduğu gibi tamponlanıp, klemense getirilmiştir.
Status portu’nun girdi işlemleri için kullanıldığından bahsetmiştik, yukarıda. Dolayısıyla, vidalı klemensten gelen girdi sinyalleri, bu defa yine bir Schmitt trigger tarafından karşılanır. Bu devrenin çıktı kanalları ise Status portuna beslenir. Portlardan sağlanabilecek akım oldukça düşük olduğu için, küçük ledler kullanılmıştır.
YAZILIM:
Devremizi kontrol etmek için, şimdiye kadarki söylediklerimizden de anlaşılacağı üzere bazı adreslere bilgi göndermek, bazılarından ise bilgi okumak gerekmektedir. Bu işlemleri C# veya VB.NET’de doğrudan bazı komutlarla yapmamız olası değil. Bunlarda böyle olanaklar yok. O zaman biz de başka bir dilde yazılmış DLL(Dynamic Data Library)’ler kullanarak bu işin üstesinden geleceğiz.
Dolayısıyla biz burada, bu eksikliği kapatacak , C++ diliyle yazılmış bir DLL kullanacağız. Çünkü C/C++’da doğrudan belirli port adreslerine veri koymak ve oralardan veri okumak için komutlar bulunmaktadır. Bunu kendimizin yazmasına da gerek yok. Zaten halihazırda bu işi oldukça iyi yapan ve her türden Windows’la (95/98, 2000,XP) uyumlu, Inpout32.dll (http://www.logix4u.net bir dll dosyası kullanacağız. Bu “dll”’i ParalelPortApp2.zip dosyamızın içersinde de bulabilirsiniz.
Devre detaylarımızı bu şekilde verdikten sonra şimdi, yukarıda bahsettiğimiz dll hakkında biraz bilgi verelim. Bu dll dosyasında bizim için önemli olan iki adet metot bulunmaktadır.
1)Inp(int adress) metodu . Bu metodla belirli bir adresten bilgi okuruz.
2) Out32(int adres,int veri) Bu metod da belirli bir adrese bilgi göndermeye yarar.
Diyelim ki, bizim okumak istediğimiz paralel portun temel adresi 0x378’dir. Bu durumda Status portunun adresi 0x378+2 yani, 0x380 olacaktır. Bu adresten , int data=Inp32(0x380) diyerek status portundaki bilgiyi okuyabiliriz. Şimdi asıl programımıza geçelim. Önce bu hazır aldığımız Inpout32.dll’i nasıl kendi programımıza ekleyeceğiz onu görelim. Bu dll dosyasını indirdikten sonra , bilgisayarınızın C:\Windows\System32 dizinine kopyalayın. Sonra, bir C# Windows Form uygulaması açın. Projede yeni bir sınıf dosyası ekleyin. Adına InpOut.cs diyelim.
Burada , .NET Framework’ün System.Runtime.Interopservices sınıfından yaralanarak, DLL’deki istediğimiz metodları çekeceğiz.InteropServices sınıfının DllImport niteliğini kullanarak, Inpout32.dll’nden ilgili metodları bu sınıfımızın içerisine aşağıdaki gibi yazabiliriz.
using System;
using System.Runtime.InteropServices;
namespace FirstPortApplication
{
/// <summary>
/// Summary description for InpOut.
/// </summary>
public class InpOut
{
[DllImport("Inpout32.dll")]
public static extern short Inp32(int address);
[DllImport("Inpout32.dll")]
public static extern short Out32(int address,int data);
}
}
Henüz kartımızı takmadan bir deneme yapalım isterseniz. Formumuzun üzerine bir adet “button” ve iki tane de textBox sürükleyelim. Burada yapacağımız şey, TextBox1’in içerisine yazacağımız, hexadesimal bir sayıyı paralel portumuzun Dataport kısmına yazdırmak, sonra da bu yazdığımız değeri oradan geri okuyup, TextBox2’ye yazmak olacaktır. Kısacası, Data port’a değer göndereceğiz, gönderdiğimiz değeri oradan tekrar okuyacağız;bu arada hem Out32(int address,int data) hem de Inp32(int address) metodlarını kullanmış olacağız.
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
private void button1_Click(object sender, System.EventArgs e)
{
byte data = byte.Parse(hexaData, System.Globalization.NumberStyles.HexNumber);
if(!(data>=0)) return;
InpOut.WriteControlPort(baseadres,data);
InOut.Out32(0x378,input);
int geri=InOut.Inp32(0x378);
int geri1=geri/16;
int geri2=geri-geri1*16;
textBox1.Text=Convert.ToString(geri1.ToString()+ge ri2.ToString());
}
Data portuna koyduğumuz değer, ikili sistemde: 01000111, hexadesimal(67) , onlu olarak da 103 dür. Programımız, kutuya hexadesimal rakam koymaya uygun olarak düzenlenmiştir. Aslında, metotlarımız yazılan ve okunulan değerleri tam rakam(integer) veya hexadesimal biçemli(0x67) gibi kabul etmektedir. Hexadesimal rakam versek bile o, içeride bunu tam rakama çevirir. Inp32() metodundan okuduğumuz değer ise devamlı onlu tam rakamdır. Biz bunu basit bir işlemle tekrar hexadesimal’a çevirip , TextBox2 kutusuna yazdırıyoruz. Hexadesimal’a çevirme nedenimiz, kafamızda hangi bit’lerin 0, hangilerinin 1 olduğunun daha iyi canlanması içindir.Örneğin, desimal 123 dediğimizde aslında 01111011 demekteyiz. Hexadesimal sitemde bu 7B’dir. “B” harfinden dolayı sağdaki 4 bitten, 2.bit dışındakilerin 1 olduğu kolaylıkla anlışılır. 7’nin çözümü ise hiç zor değildir. Halbuki, 123 dendiğinde bundan hangi bitlerin yüksek, hangilerinin düşük seviyede olduğunu çıkarmak ancak biraz hesaptan sonra olabilir.
İkinci programımız daha detaylı olup, hem Data ve Control Portuna bütün bir değer yazıp, aynı anda tüm bitleri kontrol etmek, hem de her bir bit’in ayrı ayrı açılıp-kapanmasını sağlamaya olanak verecek şekilde tasarlanmıştır.
Bu programda ayrıca girdi kanalı olarak kullanılan Status Portunu bir zamanlayıcı kontrolüne(Timer) bağlı olarak tarayıp, bu portun durumunu form üzerindeki “CheckBox” kontrollerine aktaran bir metot da bulunmaktadır.
Birinci olarak, control veya data port grubuna toptan değer göndermeye yarayan “Data Kelimesi yazma” groupBox’una bir göz atalım. Burada, kutulara girilecek değer hexadesimal olmalı. İlgili düğme tıklandığında , içeride program bu değeri (örneğin FF) normal byte değerine çevirip, öylece ilgili porta yazmaktadır.
Programda , ana form üzerine Data ve Control Portunun herbir kanalı için ayrı bir düğme sürükleyip, bırakma ve bunların herbirinin “Click” olayı içine ilgili veri değerini girmek oldukça kolay , fakat bir o kadar da hamallık gerektiren bir şeydir. Biz , burada bunun yerine ButtonArray diye bir Collection sınıfı oluşturduk. Bu ButtonArray sınıfının her bir elemanı NewButton diye , kendisi de Button kontrol sınıfından türemiş bir elemandan oluşmaktadır. Bu NewButton kontrol nesnesinin normal Button nesnesinden tek farkı, fazladan “status” diye bir boolean değişken içermesidir. Bu değişken, düğmenin açık mı, kapalı mı olduğunu belleyerek, düğmeye basıldığında, açıksa kapanmasını(beyaz renge dönüş), kapalıysa açılmasını(kırmızı renge dönüş) sağlamaktadır. Yani, sadece görsellik açısından, işimize yaramaktadır, bu değişken.
ButtonArray sınıfının AddNewButtonC()(control port grubu için) ve AddnewButtonD()(data port grubu için) metotlarını kullanarak, program çalışmaya başladığında , gerekli sayıda düğmeler ilgili groupBox kutusu içerisinde otomatik olarak oluşturulmaktadır. Her bir düğmenin “Tag” özelliğine düğme yaratılırken sayı numarası atandığından , düğmelerden birisi tıklandığında bunun hangi düğme olduğu kolaylıkla anlaşılabilmektedir. Böylece, her bir düğme için bir “EventHandler” yazmak yerine, iki ayrı grup için birer “EventHandler” yazabilmekteyiz. Hangi düğmeye basıldığı , “Handler” metodu içerisinde “Tag” özelliği kontrol edilerek bulunur.
Bu düğmeler , basıldığında iki konum arasında gidip gelen türde çalışacaklar(toggle button). Düğmenin rengi kırmızıya döndüğünde led’in yanması (hat yüksek seviyede), beyaza döndüğünde de ledin sönmüş olması(hat düşük seviyede ) gerekmekdedir.
Girdi portu olarak kullanılan Status port’unun her bir kanalına karşılık gelen bir “checkbox” bulunmaktadır. Bu portun ilgili kanalı mantıksal yüksek olduğunda, kutu “checked” , aksi halde “uncehcked” olacaktır.
İlk programımızda da gösterdiğimiz gibi , Data portuna veri koyarken fazla bir güçlük yoktur.Çünkü, bu port’un kanallarında herhangi bir tersine çevirme durumu olmadığından , 1 verirsek 1, 0 verirsek 0, değeri olduğu gibi karşılığını buldu, portun çıkış kanallarında.
Control portuna veri gönderme:
Control port’unda durum biraz değişiktir. Çünkü , paralel port bize sunulduğu haliyle Control portuna denk gelen 8 bitlik bir port’un sadece ilk 4 biti kullanmış, fakat bunlardan 0,1 ve 3 numaralı bitler dışarı çıkarken tersine çevrilmiştir. Bu ne demek oluyor şimdi? Şu demek oluyor: Bu saydığımız bitleri yüksek yapmak için 0, alçak yapmak için de yüksek değerleri yazmalıyız ilgili porta.Ancak böyle yaparsak, çıkışta istediğimiz sonucu elde edebileceğiz.Yani, diyelim ki , bu portun tüm kanallarını yüksek yapmak istiyoruz(5V). Yazacağımız değer ne olacak? Sağdan sola doğru, 0100 veya desimal olarak 4 değeri vermeliyiz.. Sıfırlar da , çıkarken tersine çevrilip, 1 olacaklarından çıkış olarak 1111 göreceğizdir; yani tüm control port kanallarının “yüksek” olduğunu.Bu portun kontrol ettiği tüm ledler yanacaktır.
Fakat, bu “terslenmiş” kanalların kafamızı karıştırmaması için, yani bildiğimiz gibi 1 verdiğimizde 1, 0 verdiğimizde 0 değeri elde etmek için aşağıdaki metodu kullanacağız. Metod, bizim için gerekli dönüşümleri yaparak , aynen Data portta olduğu gibi, bu portun ilgili kanalını 1 yapmak için 1, 0 yapmak için de 0 değerini gireceğiz. Gerisini metot halledecek:
Metoda bir göz atalım
public static void WriteControlPort(int base_address,int port_data)
{
int data=port_data & 1 ;
if (data ==1) {port_data=port_data & (255-1);}
else{ port_data=port_data | 1;}
data=port_data & 2 ;
if (data ==2) {port_data=port_data & (255-2);}
else{ port_data=port_data | 2;}
data=port_data & 8;
if (data ==8) {port_data=port_data & (255-8);}
else{ port_data=port_data | 8;}
Out32(base_address+2,port_data);//output a byte to control port.
}
Metot parametre olarak, LPT1 portunun temel adresini ve yerleştirmek istediğimiz veriyi almaktadır. Gelen bilginin, 0,1 ve 3. bitlerini ayrı ayrı yokluyoruz öncelikle. Bu hanelerdeki değerleri alıp tersine çeviriyoruz, ve Status porta bu yeni dönüştürülmüş veriyi gönderiyoruz. Bir hanenin değerini almak için, verinin kendisini , ilgili hanenin ağırlıklı değeriyle “AND”lemek yeterli olacaktır. Eğer elde edilen değer, yine ilgili bitin ağırlık değeriyle eşit ise, o bit yüksektir, yoksa alçak.
Bir bitin değerini tersine çevirmek için, eğer bir bit yüksekten alçağa değiştirilecekse, eldeki veriden bu bitin ağırlık değerini çıkarmak,yok eğer alçaktan yükseğer geçiş yapılacaksa, eldeki değeri ilgili hanenin ağırlık değeriyle “OR”’lamak gerekmektedir. Sonra da , son haline gelmiş veriyi, temel adres’e 2 ekleyip, Out32()metoduyla ilgili adrese yazmak kalıyor.Böylece Control portumuza istediğimiz veriyi yazmış oluyoruz.
Control ve Data Port’ununda Her bir kanalın ayrı ayrı kontrolu:
Bu eylemler için de ““ToggleDataPortBit()” ve “ToggleControlPortBit()” metotları bulunmaktadır, programda. Bu metodlar önce ilgili kanalın değerini alır. Bulduğu değerin tersini yazacak şekilde değer oluşturur ve porta yazar.
“Status portu”’ndan veri okuma:
Status portunun okunması ise biraz daha ilginç. Bu portta daha önce bahsedildiği gibi 5 kanalımız bulunmaktadır.Bu port bir byte’lık bir adresin 3,4,5,6 ve 7. kanallarını kullanmaktadır, Biz sadece bunların ilk 4’üyle ilgileniyoruz.Yani 3,4,5 ve 6. kanallar. Halbuki değer okurken, tüm bir byte(8 bit) okunmaktadır.Okuduğumuz bir byte’lık değerden 0,1,2 ve 7. kanallara ait değerleri atmalıyız. Sonra da elimizdeki , 0dddd000 haline gelen değeri 3 defa sağa kaydırarak, 0000dddd yaparak, kontrol ettiğimiz değerlerin en sağa gelmesini sağlamalıyız. Böylece, bu porttan 0-15 arası değer elde ediyor hale geliriz ve de bu değere bakarak ta hangi kanalın mantıksal 1, hangi kanalın ise mantıksal 0 olduğu kolaylıkla çözümlenebilir.
Bunu şu şekilde yaparız:
public int ReadStatusPort(int base_address)
{
int data= InpOut.Inp32(base_address+1);
data=data & 120;
return (data >> 3);
}
Metodumuza parametre olarak LP1 portunun temel adresini veriyoruz. Metot içerisinde buna bir ekleyerek, status portunun adresini elde ediyoruz. Bu adresten okuduğumuz değeri 0,1,2 ve 7. kanallarını devre dışı bırakmak için 120 ile “AND” liyoruz. Elde edilen 0dddd000 formatındaki bilgiyi 3 defa sağa kaydırarak , xxxxdddd formatımıza ulaşıyoruz.X’ler ilgilenmediğimiz bitleri göstermektedir. En sağdaki bit sıfırıncı bittir..
Örnek vermek gerekirse; elde edilen data değeri 7 (desimal) ise , yani 0111, ilk üç bitin yüksek son bitin ise alçak olduğu ortadadır.
Programımızda, girdi olarak kullanılan status portunun kanallarını taramak için bir adet timer controlu kullanmaktayız. Timer’ın herbir “tick” aralığında(interval=100ms alınmıştır), bu girdi kanallarındaki olası değişiklikleri kontrol ettirmekteyiz ve bunu yakıp söndürdüğümüz, ekran ve kart üzerindeki led’lerle göstermekteyiz. Çok kolay bir şekilde bu kanalları test etmenin yolu, +5V terminaline bir kablo bağlamak ve kablonun diğer ucunu sırasıyla status port’un klemense getirilmiş terminallerine değdirmektir. Aslında, karta güç verildiğinde, bu portun girdilerinde sinyal beslenmiş gibi ilgili ledler yanacaktır. Bu kullanılan tümleşik devreden kaynaklanan bir durum olup, önemli değildir. Örneğin, toprak hattına(0V) bağlanmış bir kabloyu sırasıyla bu uçlara değdirin;ledlerin söndüğünü ve de ilgili groupBox’taki “checkBox”’ların “checked” konumdan “Unchecked” konuma geldiklerine tanık olacaksınız, kabloyu 0V’ta tuttuğunuz sürece.
Bu bölüm bu kadar. Elimizdeki kart sadece kanalları dışarı çıkarmaya yaradı. Porttan gelen akım çok düşük olduğu için bunlarla daha büyük ledler veya küçük de olsa motor v.s gibi aletleri kontrol etmemiz olası değil. Gelecek bölümde bu karttan gelen sinyalleri kullanıp, nasıl röle v.s kontrolu yaparız, ona bakacağız. Bu ise bize d.c. motor, adım motor, ve daha yüksek güç isteyen cihazların kontrolü için olanak sağlayacaktır.
Fevzi Özgül
Son düzenleme Tactless; 11-09-2008, 21:21.Yorum
-
Konu: güneş paneli
hocam yazdıkların guzel motorun nasıl saga sola donecegini hızını nasıl degiştirecegimi biraz da olsa anladım dedigin işlemde benim için fazla zor gibi duruyor benim tam olarak istedigim 1 adet tus takımı olacak ve 4 adet motor olacak ve her motorun kodları olacak yani tus takımından bi motorun kodunu girdigimiz de o motor calısacak digerinin kodu nu girdigimizde digeri harekete gececekyani motorlar tus takımından yazdıklarımızla kontrol edilecek bunun en onemli si ise bu işlemlerin hepsi tek hat üzerinden gerceklesecekler ..su an acelem yoktur istedigin bir zaman ugras sen haberlerini bekliyorum her sey için cok cok tesekkürler...Yorum
-
Konu: güneş paneli
hocam haberlerini bekliyorum okul acıldı calısacam demiştin bu konuda bir seyler yaptıysan yaz bi zahmet sende n gelecek haberleri bekliyorum cunkuYorum
Yorum