İçerik Aktarma PBP

Başlatan sir_hawk, 16 Nisan 2009, 15:59:19

sir_hawk

Merhaba,


Bir dizi içerisinde ki verinin bir kısmını bir değişkene aktarmak istiyorum,şöyle ki ;

Data[0...7]=Bilgi        ' ilk 8 biti bilgi reg.ine yazmak
Data[10...17]=Bilgi     '10. ile 17. bitlerin olduğu kısmı bilgi reg.ine yazmak



veya bu data dizisinin içerisinde ki 8 bitlik kısımları tek tek secip seri olarak nasıl gönderirim,şöyleki ;

Data[0..7] , Data[1...8]  bu aralıktaki bitleri seri olarak gönderebilirmiyim.



umarım anlatmayı becerebilmişimdir  :oops:    :oops:



Acaba bunları nasıl yapabilirim ?


Yardımlarınız için şimdiden teşekkürler.

ete

Ben anlatmayı beceremediğin kanısındayım. Bakıyorum ama bir şey anlamıyorum. Bir şeyler sezinliyorum ve anlamaya çalışıyorum ama tam olarak oturmuyor.

Bir defa bit ve byte kargaşası var gibi gözüküyor. Hep bit olarak bahsetmişsin ama diğer taraftan bir dizi değişkeni içindeki 8 biti diye bir tabir kullanmışsın. Tamamen karma karışık. Ben anlayamadım doğrusu.
Yeniden bir açıklama yapacak isen;
DATA [X] değişkeni byte cisnindenmi word cinsindenmi onu belirt.

Data[0...7]=Bilgi ' ilk 8 biti bilgi reg.ine yazmak teriminden neyi kast ediyorsun pek anlaşılmıyor. Zira , DATA[0..7] değişkenleri ise bunun ilk 8 biti ne demek oluyor.?
Yok bu bir değişken ve sen ilk 8 bitini başka bir değişkene atamak istiyorsan o zaman DATA değişkeni 16 bitlik ve sen LOW bytını almak istiyorsun anlamına gelir.

Her neyse yazdıkların pek anlaşılmıyor daha detaylı açıklarsan ve bit ile byte terimlerine ekstra dikkat edersen memnun olacağım.

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

sir_hawk

Kusura bakmayın hocam,biraz uykusuzluk sözkonusu  :oops:  

Tekraren,

Data adında bir dizim var,

Data
  •    ve

    Data var BYTE[400]

    olarak tanımlıyorum.

    Bu dizide ki tüm byteları seri olarak çıkışa aktardıktan sonra,tüm içeriği 1 sıra sola kaydırıp tekrar seri olarak aktarmak istiyorum. Bu kaydırma işlemini dizi içerisinde ki tüm byteları etkileyecek şekilde gerçekleştirebilirmiyim yoksa byte bazında mı işlem yapabilirim ?


    Hocam yine olmadı anlatamadın derseniz devre şemamı yükleyeyim onun üzerine konuşalım  :?

    Yapmak istediğim bir kayan yazı projesi,ancak ben devrede 74hc595 kullanıyorum ve çizdiğim şemaya kod yazmak istiyorum. Belki şema daha öncede çizilmiştir yazılmıştır ama ben kendim yazmak istiyorum. Kendi çabaladığının tadını vermiyor hiçbirşey   :roll:

Tagli

Seri çıkış fonksiyonunu kendin yazmadığın sürece yapamazsın. Her byte'ı ayrı olarak işlemen gerekir ama bir döngü içinde bunu yapmak zor olmasa gerek.
Gökçe Tağlıoğlu

ete

Anladığım kadarı ile bir seri dizi değişkeni içindeki değerleri kaydıracaksın.
Basit bir örnekle açıklamaya çalışayım.
Data(0)=1
Data(1)=2
Data(2)=3
Data(3)=4
şeklinde 4 adet değişken olduğunu düşünelim.
Şimdi bunları kaydıracağımızı farz edelim.
ilk baştakini bir geçici değişkene veririz.
temp=data(0)
data(0)=Data(1)
data(1)=Data(2)
data(2)=Data(3)
Data(3)=temp
Şimdi bunu seri olarak bir döngü içinde yapar isek;

temp=data(0)
For I=0 to 2  (dizi adedinin bir eksiği kadar)
Data(I)=Data(I+1)
next
Data(3)=temp

Sanıyorum bu işlemi sordun cevabı budur.
Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

Tagli

@ete hocam, yanlış anlamadıysam arkadaş bu byte'ların kendi içinde bitlerini kaydırmak istiyor.
Gökçe Tağlıoğlu

ete

Tagli,
Aslında ne istediğini bir türlü tam olarak anlatamadı. Hep tahminlerde bulunarak cevap yazıyorum. Normal olarak kayan yazı yapacak ise tabiiki bit bazında kaydırma yapması gerek. Ama data ları byte değişkenlerine alıyor o zaman bitlere nasıl hükmedecek? doğrusu bende tam olarak düşünemiyorum.
Sonuç olarak burada, değişkenleri tutuş biçimini açıklar  ve birde örnek verir ise biraz daha düşünür belki bir yol buluruz.

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

sir_hawk

Geç cevap yazdığım için özür dilerim,


Tagli hocamın söylediğini yapmak istiyorum. Dizi içerisine bytelara hükmedemeyeceksem yada gerçekten zor olacaksa hocam,

eeproma yazılmış veriyi 1 kaydırarak nasıl yapabilirim ?


devre şemasını yüklüyorum ;




hocam şemam bu şekilde ve kayan yazı yapmaya çalışıyorum,

usb den aldığım veriyi eeproma yazıcam ve buradanda dataları çağırıp çıkışa aktarıcam. Usbden veri alıp eeproma yazma konusundanönce dataları eepromdan cağırıp kaydırmak istiyorum.  (çünkü eeproma veri yazıldıktan sonrası esas sorun benim için )


Yardımlarınız için çok teşekkürler ve biraz sıkıntı yarattığım  için üzgünüm  :oops:

ete

Kaydırma sistemlerinden başlayarak açıklama yazmaya çalışıyordumki baktım konu zaten karışık ve bu anlatımla pek çok kişinin kafası iyice karışacak. O nedenle kaydırma örnekleri vererek konuya cevap vereyim dedim.
Elimizde MEVCUT [8] şeklinde bir dizi değişkenimiz mevcut olsun bunu 1 bit kaydırarak KAYAN [8] isimli değişkene aktaracağız.
Genelde 1 bitlik kaydırma yapılacağı için yani KAYAN.Bit0=MEVCUT.bit1 şeklinde bir kaydırma olacağı için MEVCUT.Bit7 boşta kalacaktır. Bu bit ya sıfır ile tamamlanır yada bir önceki bilginin 0. biti bunun yerini alır. Bu iş tamamen yapılan kaydırma tipine göre düzenlenir. O nedenle bu biti ben şimdilik 0 ile tamamlıyorum.

Önce diziye bağlı olmayan bir değişkenin bitlerinin döngü içinde kaydırılmasına bakalım.
KAYAN.bit0=0
FOR I=0 to 6
KAYAN.Bit0[I+1]=MEVCUT.Bit0[I]
next

Bu komut dizisi Mevcut bitlerini birer bit sola kaydırarak Kayan isimli değişkene aktarır.

Aynı işi tek komutlada yapmak mümkün. Şöyle;
Kayan=Mevcut<<1
bu komut teorik olarak yukarıdaki döngüye eşdeğer bir işlem yapar.

Şimdi bunu biraz daha otomatiğe bağlayıp bir dizi içindeki bitlerin kaydırılmasını yapmaya çalışalım.

FOR X=0 to 7  'dizi adedi kadar döngü kuruyoruz.
  TEMP=MEVCUT [X]
  KAYAN[X]=TEMP<<1
NEXT

Dizi bir sütün dizisi ise bitlerin bir birlerini takip etmeleri gerekir.

Yani her  kaydırmadan sonra bir dizinin bitimine diğerinin başlangıcını eklemek gerekir. Daha açık bir örnek vermek gerekir ise;
Elimizde birbirini takip eden iki byte lık bilgi olsun. Bunlar;
Mevcut (0)=%11100111  ve  Mevcut(1)=%01100110 şeklinde olsunlar.
Mevcut(0 ve 1) değişkenlerini 1 bit sola kaydırırsak son durumları şöyle olacaktır;
Mevcut(0)=%11001110 ve Mevcut(1)=11001100
Mevcut(0) byte ın ilk biti yani bit0 Mevcut(1) in 7. biti olarak alınmalıdır.
İkinci bir kaydırma yapılınca;
Mevcut(0)%10011101 ve Mevcut(1)=10011000 şeklinde yürüyecektir.
Bu durumda döngü için be işlem şöyle yapılabilir.

FOR X=0 to 7  'dizi adedi kadar döngü kuruyoruz.
  TEMP=MEVCUT [X]
  MEVCUT[X]=TEMP<<1
  ARA=MEVCUT(X+1)'bir sonraki diziyi alıyoruz.
  TEMP.0=ARA.7 'öncekinin 0. biti olarak bir sonrakinin 7 bitini veriyoruz.
  MEVCUT(X)=TEMP ve geçici değişkeni yeniden yerine aktarıyoruz.
NEXT

Umarım bir şeyler açıklayabilmişimdir. Teorik olarak başka bir yolda izlenmez. Birde uzun yoldan halledilmesi mümkün bu işin. Her bir dizi değişkeninim teker teker ele alıp diğerine eşitlemek olabilir.

Bu açıklamaların dışında net olarak ne isteniyor ise onu belirtip cevap aramak gerekir. Değilse genel olarak sorulan sorulardan bu kadar anlam çıkartabiliyor ve cevaplaya biliyorum.

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

sir_hawk

Cevaplarınız için çok teşekkürler,özellikle ETE hocam.
Verdiğiniz bilgilerle sorunumu çözdüm.
Ama şimdi de esay hid ile oluşan pbp kısmında aynı programı derlerken hata alıyorum  :cry:  
Biraz daha üzerinde çalışayım belki kaçırdığım bir nokta vardır,
ama beceremezsem yine yardımlarınızı rica edebilirim  :oops:    :oops: