595 sürmede algoritma farklılığı

Başlatan gokhangokcen, 20 Aralık 2009, 10:46:24

gokhangokcen

iyi günler algoritma konusunda çözemediğim bir nokta var konu 74595 sürmede sıkıntı yaşıyorum.

sıkıntımı bir örnekle açıklayayım;

bir kayan yazı düşünelim birbirine kaskat bağlanmış 595 lerden satır taraması şeklince çalışıyor.Buradaki 595 leri sürmek için ben protonda şu şekilde bir kod yazıyorum ve gayet güzel bir şekilde çalışıyor:

shout dta,clc,1,[stn,stn1,stn2,stn3,... stnn] stnlar byte tipi değişken
n adet 595e hangisine istersem ilgili byte stn unu değiştirip yeniden data basarak istediğimi yapıyorum.Fakat bunu bir kaç programda denk geldi şu şekildede yapmışlar:

sat_uz = 96 demiş örneğin,

for j=0 to sat_uz-1
       
               sutun=dizi[j]
               e_data=sutun.0
               
               e_clock=1
               e_clock=0            
               
           next

for j=0 to sat_uz-1
       
               sutun=dizi[j]
               e_data=sutun.1
               
               e_clock=1
               e_clock=0
           
               
           next
  .
  .
  .
for j=0 to sat_uz-1
       
               sutun=dizi[j]
               e_data=sutun.7
               
               e_clock=1
               e_clock=0
           
               
           next
           
           

buradaki mantığı çözümleyemedim tam olarak   :roll: cevap ve yorumlarınız için şimdiden teşekkürler.İyi günler...
Bildiğini paylaşmak, Allah'ın verdiği öğrenme yeteneğinin zekatıdır.

ete

Mantığı gayet basit. Önce 595 in ne olduğunu açıklayayım. Bu bir seriden paralele çeviren shift registerdir. Data girişinden bir clk palsi eşliğinde verdiğin seri 8 bitlik bilgiyi Q0-Q7 çıkışlarından sana paralel olarak verir.
İşin püf noktası her bir clk palsi eşliğinde data bilgisinin bir biti  Q çıkışlarına verilir (Latch - kilit pinine uygulanacak bir pals ile).
Biraz dah açalım konuyu,

Elinde Data=%11011101 bilgisi olsun.
Bu bilgiyi bit bazında data girişine verir ve her verişten sonra CLK girişine bir puls uygular isen data girişindeki bit 595 'in ön hafızasına kayıt edilir. Kilide bir puls uygularsan bilgi Q çıkışlarında ilgili yerine aktarılır.
Şimdi yukarıda verilen bilginin Data.0 biti olan 1 bilgisini Data girişine verelim.
CLK girişine bir puls uygulayalım.( CLK=1 ve hemen ardından CLK=0 bilgisi bir puls uygulamasıdır.)
Bu aşamada 1 bilgisi içeri alınır ve kilit bacağına da bir puls uygularsak 1 bilgisi Q0 pininden dışarı verilir.
İkinci aşamada Data.1=0 bilgisini Data girişine verelim ve CLK girişine bir puls daha uygulayalım. Böylece bu bilgide içeri alınır ve kilite bir puls uygulanır uygulanmaz 0 bilgiside Q1 pininden çıkartılır.
Bu şekilde 8 bit 595'e verilerek işlem tamamlanır.
Shiftout komutu bunu otomatik yapar. Ama sizde bir döngü kurarak ve her bir biti kendiniz ayıklayarak teker teker 595 e verip clk girişine bir puls uygulayarak bilgiyi almasını sağlayabilirsiniz. Dikkat ederseniz döngüler onu yapmaktadır. Her bir döngü dizi değişkenlerinin bir bitini toplam sütün boyunca 595 lere aktarmaktadır.
Bu programcılık açısından daha uzun zaman alan bir iştir.
Shiftout komutu bu işi daha kısa zamanda ve daha az kod harcayarak yapar. Siz tercihen onu kullanın bence.

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

gokhangokcen

Ete hocam öncelikce cevabınız için teşekkür ederim.Aslında işin aslı şu ben bascom avr de program yazmayı öğreniyorum.Protonda kendim kayan yazı uygulaması yaptım.Fakat bascomda bu esnekliği ben göremedim.

shiftout komutu sadece 1 byte lik veri gönderiyor.Bascom avr de shiftout dta,clk,1,[stn] yazabiliyorum sadece burdada takıldım.protonda 595 kadar stn değişteni tanımlayabiliyordum.bascomda bu olayı çözemedim bundan dolayı bir arayış içindeyim.İyi günler.
Bildiğini paylaşmak, Allah'ın verdiği öğrenme yeteneğinin zekatıdır.