port çoğullama sorunu

Başlatan soneryumruk, 18 Nisan 2011, 18:47:01

soneryumruk

selam arkadaşlar. ben 50 sütunlu bir bayrak projesi yapmaya çalışıyorum. ayrıca ay ve yıldızda toplam 200 kadar led olacak ve herbirini tek tek kontrol edeceğim. bunun için benim mecburen port çoğullamam gerekecek. programı parça parça oluşturup sonra hepsini birleştirmeyi düşünüyorum. fakat 74164 için bir deneme yapmak istedim. 3 tane 74164ü arka arkaya bağladım. programı yazdım. toplamda 22 tane ledi (sütun olarak düşünebiliriz) kontrol ettim. isis simülasyonunda hiç bir sıkıntı yok. fakat programı pice yükeyip çalıştırdığımda ledler tek tek en baştan en sona doğru yanarak gidiyor. en sondan en başa doğru da tek tek sönerek geliyor. fakat bu esnada her sönen led diğerleri sönene kadar çok net farkedilmese de kıpraşım yanıyor. yani hızlı ve çok az bir şekilde yanıp sönüyor. sorunu bir türlü halledemedim. sizce sebebi  ne olabilir acaba. yardımcı olursanız çok sevinirim. aşağıda size c dilinde yazdığım kodları gönderiyorum.
#INCLUDE <16F628.H>
#USE  DELAY(CLOCK=4000000)
#USE  FAST_IO(B)
#USE  FAST_IO(A)
#DEFINE  PORTB=0X06;
INT   a,i,j,x,y,T=0,z=0;
VOID MAIN()
{
SETUP_TIMER_1(T1_DISABLED);
SETUP_TIMER_2(T2_DISABLED,0,1);
SETUP_CCP1(CCP_OFF);
SET_TRIS_B(0X00);
SET_TRIS_A(0x00);
OUTPUT_A(0X00);
OUTPUT_B(0X00);
WHILE(1)
{
FOR(A=0;A<24;A++)
{OUTPUT_LOW(PIN_A0);
OUTPUT_HIGH(PIN_A1);
OUTPUT_LOW(PIN_A1);
}
FOR(A=0;A<24;A++)
{
OUTPUT_HIGH(PIN_A0);
OUTPUT_HIGH(PIN_A1);
OUTPUT_LOW(PIN_A1);
IF(A==7)
CONTINUE;
IF(A==15)
CONTINUE;
DELAY_MS(100);
}
FOR(A=0;A<24;A++)
{
FOR(Y=0;Y<1+A;Y++)
{
OUTPUT_LOW(PIN_A0);
OUTPUT_HIGH(PIN_A1);
OUTPUT_LOW(PIN_A1);
DELAY_US(10);
}
FOR(T=0;T<23-A;T++)
{
OUTPUT_HIGH(PIN_A0);
OUTPUT_HIGH(PIN_A1);
OUTPUT_LOW(PIN_A1);
DELAY_US(10);
}
DELAY_MS(100);
}
FOR(A=0;A<20;A++)
{FOR(X=0;X<24;X++)
{OUTPUT_HIGH(PIN_A0);
OUTPUT_HIGH(PIN_A1);
OUTPUT_LOW(PIN_A1);
OUTPUT_LOW(PIN_A0);
OUTPUT_HIGH(PIN_A1);
OUTPUT_LOW(PIN_A1);
}
DELAY_MS(100);
FOR(X=0;X<24;X++)
{OUTPUT_LOW(PIN_A0);
OUTPUT_HIGH(PIN_A1);
OUTPUT_LOW(PIN_A1);
OUTPUT_HIGH(PIN_A0);
OUTPUT_HIGH(PIN_A1);
OUTPUT_LOW(PIN_A1);
}
DELAY_MS(100);
}
FOR(A=0;A<24;A++)
{OUTPUT_LOW(PIN_A0);
OUTPUT_HIGH(PIN_A1);
OUTPUT_LOW(PIN_A1);
}
DELAY_MS(100);
}
}

programda kısaca yaptığımı anlatayım. önce tüm 74164lerin tüm çıkışlarını sıfırlıyorum.(while döngüsünün altındaki ilk for döngüsü ile)daha sonra önce tek tek bütün 74164 çıkışlarını bir yapacak döngü çalışıyor. aralarında bekleme süresi var(delay_ms(100);)burada 8. ve 15. clock sinyallerinde ledlere bilgi gönderilmediği için continue deyimiyle buralarda 100ms bekleme süresi atlanmıştır. daha sonra iki döngü ile 0 bilgisini en baştan en sona arkasından 1 bilgisi gidecek şekilde gönderiyorum. ve bu döngüde gönderilen 0 sayısı her defasında bir artıyor, 1 sayısı da bir azalıyor. en sonda da ledlere 20 defa flip flop yaptırılıyor ve hepsi sıfırlanıp program başa dönüyor. benim yaptığım uygulamada sorun çıkan asıl kısım 0 ve 1 bilgilerini arka arakaya gönderirken sönen ledler hafif bir ışıkla hızlıca yanıp sönüyor, yani kıpraşıyor. umarım sorunu net anlatmışımdır.
NE MUTLU TÜRKÜM DİYENE! M.KEMAL ATATÜRK

yamak

Eğer mosfet kullanmayıp darlington transistör falan kullanmışsan ondan olabilir.Darlingtonların tepki süresi mosfetlere göre düşük.Yani yeterince hızlı tarama yapılamıyo darlingtonlarla.

soneryumruk

ŞUAN SADECE BREAD-BOARD ÜZERİNDE LEDLERİ DİREK SÜRDÜM. GERÇEK UYGULAMADA BDX53 KULLANMAYI DÜŞÜNÜYORUM. YANİ DENEME AŞAMASINDA HENÜZ BİR YÜKSELTEÇ YOK. AMA BC237 İLE DE DENEYEYİM DEDİM. YİNE AYNI SORUN OLDU. NORMALDE 4MHz KRİSTAL İLE BİR KOMUTUN İŞLENME SÜRESİ 1usn.TOPLAMDA 50 KOMUT GÖNDERSEM (50 SÜTUN İÇİN) 50usn YAPAR. BUNUN ALGILANMAMASI GEREKİR AMA KIPRAŞIMA NEDEN OLUYOR İŞTE.
NE MUTLU TÜRKÜM DİYENE! M.KEMAL ATATÜRK

soneryumruk

CEVAP VEREBİLECEK KİMSE YOK MU?
NE MUTLU TÜRKÜM DİYENE! M.KEMAL ATATÜRK

yamak

Devreyi görmediğim için tam bişey söyleyemeyecem o zaman.Ama genellikle böyle sorunlar herbir döngünün sonuna koyduğun beklemeden kaynaklanıyo.Döngünün sonuna koyduğun beklemeyi artır belki o zaman düzelir.

soneryumruk

arkadaşlar ben sorunu çözdüm.yardımcı olmaya çalışanlara teşekürler.
NE MUTLU TÜRKÜM DİYENE! M.KEMAL ATATÜRK

yamak

Arkadaşım sorunu nasıl çözdün bizle de paylaşır mısın?