Satır tarama sütun tarama farkı yalan mı?

Başlatan ziyaretci, 06 Ekim 2012, 18:44:33

ete

Elbette kullandığın yöntemin yanlışlığından dolayı arada fark yok. Ama satır tarama böyle yapılmıyor.
ELinde 8 adet matriks displayi olan bir devren var ise hepsinin 8 bitlik sütunlarını aynı anda sürmen gerekir.
İşlem sırasıda şöyle olmalıdır.

- Birinci satıra bütün matrikslerin ilk satırlarına ait bilgi verilir (shift register kullanılması gerekir)
- Birinci satır aktif edilir 1 ms beklenir ve satır kapatılır.
- İkinci satıra ait bütün matriks bilgileri sütunlara verilir. Satır aktif edilir 1 ms beklenir ve satır kapatılır.
- ...
-Son satıra ait bütünmatriks bilgileri sütunlara verilir. Satır aktif edilir ve 1 ms beklenir ve satır kapatılır.
Bu şekilde yaptığın zaman bütün tarama işlemi 8 ms sürer. Üstelik kaç sütunun olursa olsun bu süre değişmez.
İşin püf noktası burada.
Sen bit (dot) bazında çalışıyorsun. Senin hesabına göre 6x8 her bir matriksin tarama süresi zaten 48ms tutarki devrende birden fazla matriks var ise işin hepten zor demektir.
Dolayısyla o sistemi terket ve satır bilgisi bazında yani satıra byte bilgisini bir anda vererek çalışmayı dene.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

halilgalic

tabiki fark göremessin 1 dot için 8ms harcıyon 6 dot vardı 6*8==48ms.söyle yapalım==>
*bütün dotların 1 satır bilgilerini yolla ve satırı aktif et ve 1 ms bekle ve satırı kapat  ==>1ms gecti
*bütün dotların 2 satır bilgilerini yolla ve satırı aktif et ve 1 ms bekle ve satırı kapat  ==>1ms gecti
*bütün dotların 3 satır bilgilerini yolla ve satırı aktif et ve 1 ms bekle ve satırı kapat  ==>1ms gecti
*bütün dotların 4 satır bilgilerini yolla ve satırı aktif et ve 1 ms bekle ve satırı kapat  ==>1ms gecti
*bütün dotların 5 satır bilgilerini yolla ve satırı aktif et ve 1 ms bekle ve satırı kapat  ==>1ms gecti
*bütün dotların 6 satır bilgilerini yolla ve satırı aktif et ve 1 ms bekle ve satırı kapat  ==>1ms gecti
*bütün dotların 7 satır bilgilerini yolla ve satırı aktif et ve 1 ms bekle ve satırı kapat  ==>1ms gecti
*bütün dotların 8 satır bilgilerini yolla ve satırı aktif et ve 1 ms bekle ve satırı kapat  ==>1ms gecti
                                                                                                                              toplam=8ms
benin vermiş oldugum devreyi simülasyonu yavas (osc freq)çalıştırarak incelersen anlarsın.

ziyaretci

Alıntı yapılan: ete - 15 Ekim 2012, 10:09:34
Elbette kullandığın yöntemin yanlışlığından dolayı arada fark yok. Ama satır tarama böyle yapılmıyor.
ELinde 8 adet matriks displayi olan bir devren var ise hepsinin 8 bitlik sütunlarını aynı anda sürmen gerekir.
İşlem sırasıda şöyle olmalıdır.

- Birinci satıra bütün matrikslerin ilk satırlarına ait bilgi verilir (shift register kullanılması gerekir)
- Birinci satır aktif edilir 1 ms beklenir ve satır kapatılır.
- İkinci satıra ait bütün matriks bilgileri sütunlara verilir. Satır aktif edilir 1 ms beklenir ve satır kapatılır.
- ...
-Son satıra ait bütünmatriks bilgileri sütunlara verilir. Satır aktif edilir ve 1 ms beklenir ve satır kapatılır.
Bu şekilde yaptığın zaman bütün tarama işlemi 8 ms sürer. Üstelik kaç sütunun olursa olsun bu süre değişmez.
İşin püf noktası burada.
Sen bit (dot) bazında çalışıyorsun. Senin hesabına göre 6x8 her bir matriksin tarama süresi zaten 48ms tutarki devrende birden fazla matriks var ise işin hepten zor demektir.
Dolayısyla o sistemi terket ve satır bilgisi bazında yani satıra byte bilgisini bir anda vererek çalışmayı dene.

Ete

Alıntı yapılan: halilgalic - 15 Ekim 2012, 10:34:53
tabiki fark göremessin 1 dot için 8ms harcıyon 6 dot vardı 6*8==48ms.söyle yapalım==>
*bütün dotların 1 satır bilgilerini yolla ve satırı aktif et ve 1 ms bekle ve satırı kapat  ==>1ms gecti
*bütün dotların 2 satır bilgilerini yolla ve satırı aktif et ve 1 ms bekle ve satırı kapat  ==>1ms gecti
*bütün dotların 3 satır bilgilerini yolla ve satırı aktif et ve 1 ms bekle ve satırı kapat  ==>1ms gecti
*bütün dotların 4 satır bilgilerini yolla ve satırı aktif et ve 1 ms bekle ve satırı kapat  ==>1ms gecti
*bütün dotların 5 satır bilgilerini yolla ve satırı aktif et ve 1 ms bekle ve satırı kapat  ==>1ms gecti
*bütün dotların 6 satır bilgilerini yolla ve satırı aktif et ve 1 ms bekle ve satırı kapat  ==>1ms gecti
*bütün dotların 7 satır bilgilerini yolla ve satırı aktif et ve 1 ms bekle ve satırı kapat  ==>1ms gecti
*bütün dotların 8 satır bilgilerini yolla ve satırı aktif et ve 1 ms bekle ve satırı kapat  ==>1ms gecti
                                                                                                                              toplam=8ms
benin vermiş oldugum devreyi simülasyonu yavas (osc freq)çalıştırarak incelersen anlarsın.

  En baştan beridir kafama takılan yer eğer taramadan kar olması gerekiyorsa 1ms de bütün satırlardaki bilgileri göstermekti, burasıda değil  mantıksız olarak gördüğüm; bu seferde ne kadar dot varsa o kadar port'a ihtiyacımın olması idi.Böyle birşeyin olması çok daha fazla maliyet gerektiriyordu[ Bu işlevi sadece PIC ile yapabileceğim düşüncesi vardı.( Başlangıçtaki bilgilerimin üzerine )]
   Bu şekilde olması için en azından bir kereliğine verdiğim bilgiyi hafızaya alan bir eleman lazım. Yoksa bu 595 mi?

595 ise 1 byte  bilgiyi seri olarak atıyoruz hafızaya doğru mudur? Ben 595 i 74hc154 satır seçme işleminde kullandığım farklı bir model eleman olarak görüyordum.

SERRO EFE

evet 74hc595 e 1 byte bilgiyi seri olarak yükleyebilirsin hatta ardışıl bağlayıp istediğin kadar veri gönderebilirsin.Karakterlerin kaydırma işlemi olarakta kaç 595 kullanıyorsan her satır için o kadar değişken oluşturup veriyi bu değişlenler içinde kaydırman lazım.

ziyaretci

Alıntı yapılan: SERRO EFE - 17 Ekim 2012, 10:48:56
evet 74hc595 e 1 byte bilgiyi seri olarak yükleyebilirsin hatta ardışıl bağlayıp istediğin kadar veri gönderebilirsin.Karakterlerin kaydırma işlemi olarakta kaç 595 kullanıyorsan her satır için o kadar değişken oluşturup veriyi bu değişlenler içinde kaydırman lazım.

   İnternetten baktım bilgiler 595 den gösteriliyor(matrixte). Fakat misal 48 sütunlu tabela var.Tabeladaki 1. satırın bilgilerini aynı anda göstericezki  zamandan kar edelim(satır tarama). İnternetteki örnek uygulamalarda 595 in dataları ortak alınmış. Biz seri olarak her bir 595 e farklı bir bilgi yüklemek istersek nasıl bir algoritma kullanmamız gerekir ?


   Mesela bizde 5 tane 595 var ilk gönderdiğimiz bilgiyi 5. 595 e nasıl göndeririz?


 
 

ete

ELinde 5 adet 595 var ise zaten her biri için ayrı bilgi vermen gerekiyor. Shift Register, her clk palsinde girilen bilgiyi bir sonraki çıkışa kaydırır.
Bu nedenle A-B-C-D-F bilgilerini sıraya uygun olarak vemen gerekiyor.
Diyelimki data girişin 595-A da. Sen elindeki F filgisini 595-F ye aktarmak istiyorsun.
O halde seri bağlı sistemde verilen ilk byte F ye ait olmalıdır. Zira Önce F bilgisini verdin. Bu bilgi 595_A ya girer. Başka bilgi girmez isen orada bekler. Ama sen peşinden D bilgisini girmelisin. Böylece F bilgisi bu sefer 595-B ye geçer. D bilgisi 595-A da kalır. Bu sefer C bilgisini verirsin F bilgisi otomatikman 595-C ye geçer. Sen her 8 bitlik bilgiyi verdikçe ilk girilen bir sonrakine aktarılır. Sonuçta sen A bilgisini verdiğin zaman ilk verilen F bilgisi 595-F ye ulaşmış olur. Bu aşamada sende aktar pinine aktarma palsini vererek ön bellekte tutulan yeni bilgileri çıkış pinlerine aktarırsın.
Basic de bu işlem SHIFTOUT DTA,CLK,1,[F,D,C,B,A] şeklinde komut verilerek bir anda yapılmaktadır.
Ete

Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

halilgalic

ete hocam anlatmıs ben ccs de nasıl yapacagını söyleyeyim.Ccs c nin kendi 595 kütüphanesini kullandıgını varsayıyorum.5 tane 595 var  ise =>
int data[5];   //5 tane 595 oldugu için 5 farklı değişken

data[1]=0x01;
data[2]=0x02;
data[3]=0x03;
data[4]=0x04;
data[5]=0x05;



write_expanded_outputs(data);//ilk registere 1 ,iknciye  2,ücüncüye 3.......şeklinde gider

ziyaretci

Ete hocam , kafama takılan sorunu cevabını gayet güzel anlattınız. Teşekkür ederim.

@halilgalic  teşekkürler.

vatandas30

bende aklıma takılan birşeyi sorayım.
SHIFTOUT DTA,CLK,1,[F,D,C,B,A]

bu komutu 5 adet 595 e bilgi göndermek için kullanıyoruz.  bu  bilginin 595 lere gitme süresi nedir? 20 adet 595' e bilgiyi bu şekilde gönderirken önemli bir gecikme oluşur mu?

ziyaretci

Alıntı yapılan: vatandas30 - 31 Ekim 2012, 17:47:50
bende aklıma takılan birşeyi sorayım.
SHIFTOUT DTA,CLK,1,[F,D,C,B,A]

bu komutu 5 adet 595 e bilgi göndermek için kullanıyoruz.  bu  bilginin 595 lere gitme süresi nedir? 20 adet 595' e bilgiyi bu şekilde gönderirken önemli bir gecikme oluşur mu?

Yanlış hatırlamıyorsam, 20 Mhz lik bir kristalle çalışan denetleyicinin , bir komutu işleyip diğer komuta geçmesi  0.2us kadar sürüyor.

Her bir 595 üzerindeki gecikme dikkate alınacak büyüklükte olmayabilir. 
Maksimum 0.2us'de olabilir.

halilgalic

120 tane 595 sürdüm süre ile ilgili hiç bir problem yaşamadım ama 595 lerin birbirleri arasındaki mesafe artıığı zaman clk ve data sinyalleri zayıflıyor buda sondaki 595 lerin kararlı çalışmamasına neden oluyo.