25 mm display sürme yardım...

Başlatan gokhan1500, 13 Mart 2009, 14:59:18

gokhan1500

Arkadaşlar saat devresi tasarlıyorum.Devrede 25mm ortak anot display kullandım.Bunların transistörle nasıl sürerim.Çok uğraştım ama beceremedim.

Port B ye 7447 bağlı...

void display(void)
{
     
     rtc_get_time(saat,dakika,saniye);
   
     birler1=dakika%10;
     onlar1=dakika/10;
     birler2=saat%10;
     onlar2=saat/10;
     output_high(display2);
     output_b(birler1);
     delay_ms(5);
     output_low(display2);
     output_high(display4);
     output_b(birler2);
     delay_ms(5);
     output_low(display4);
     output_high(display1);
     output_b(onlar1);
     delay_ms(5);
     output_low(display1);
     output_high(display3);
     output_b(onlar2);
     delay_ms(5);
     output_low(display3);
     
     
}

ferit06

http://pdf1.alldatasheet.com/datasheet-pdf/view/116730/NSC/DM74LS47.html

Yazdığın kodları tam bilmiyorum ama anladığım tarama tipi display sürüyorsunuz.  Tarama tipi sürmede displaylerde geçiş yaparken gösterimi biteni karartma yapmanız gerekir. Yoksa tarama sırasında komşu displaylerin karakterleri biribirine girer. Buna göre 1 adet çıkış pinini 7447(74LS47) nin 5 nolu pinine bağlayarak bu pini "L" yaparak karartma yapmanız gerekir.

.....
output_b(birler1);
delay_ms(5);
output_low(display2);
.... Karatma komutu....
output_high(display4);
output_b(birler2);
... karartmanının sonu...
delay_ms(5);
output_low(display4);
....karartma komutu
output_high(display1);
.....
Daha fazla bilgi alabilmeniz için ise kullandığınız devrenin şemasını vermeniz, programın tamamını vermeniz iyi olur

gokhan1500

Arkadaşım progamı böyle düzenledim.Ortak anot bacakları direk pice bağladığım zaman hiç bir sorun yaşamıyorum.(Karartmasızda sorun yok)
Ama transistörle sürmeye kalktığım display diğer segmentlerle iç içe giriyor.

void display(void)
{
     
     rtc_get_time(saat,dakika,saniye);
   
     birler1=dakika%10;
     onlar1=dakika/10;
     birler2=saat%10;
     onlar2=saat/10;
     output_high(display2);
     output_b(birler1);
     delay_ms(5);
     output_low(display2);
     output_low(PIN_B7);  //Karartma
     output_high(display4);
     output_b(birler2);
     output_high(PIN_B7);   //Karartma Sonu
     delay_ms(5);
     output_low(display4);
     output_low(PIN_B7);  //Karartma
     output_high(display1);
     output_b(onlar1);
     output_high(PIN_B7);  //Karartma Sonu
     delay_ms(5);
     output_low(display1);
     output_low(PIN_B7);  //Karartma
     output_high(display3);
     output_b(onlar2);
     output_high(PIN_B7);  //Karartma  Sonu
     delay_ms(5);
     output_low(display3);
     
     
     
}

ferit06

Kullandığın transistorlerin tam kesime girmemesi nedeniyle  bu durum oluşuyor olabilir. Transistorlerin Base uçlarına birer 1N4148 diyod (veya 1.2V gibi bir değerde zener diyod)bağlarsan çözebilirsin / ortak anaodların bir veye iki adet 1N4001 gibi seri bağlanan diyod üzerinden bağlanması ile)

Transistor ile sürmelerde devreni NPN transistörle sürecek şekilde düzenlersen daha az sorunla karşılaşırsın Bu durumda ortak katotlu displayler kullanman gerekecek.

Bir de.. programda hiç bir değişiklik yapmadan transistor ile surmeye çalışıyor iseniz bu karışıklık olur. Transistorsuz high yapmış olduğunuz ortak anot pinini transistorlü versiyonda Low yapmanız kapatırken de tersini yapmanız gerekir.....

kara_kalem

BC337 ve BD 140'ı darlington bağlayarak displayi sürmeyi deneyebilirsin.