74hc595 ile ilgili yardım lütfen!

Başlatan emrah, 14 Eylül 2011, 15:15:50

emrah

selam,

pic ile 74hc595 entegresine seri data göndererek pinlerden sırası ile çıkış almam lazım fakat çözemedigim bir sorun var.


LOOKUP VERI,[1,2,4,8,16,32,64,128],BILGI
SHIFTOUT DTA,CLK,1,[BILGI]

HIGH AKTAR: PAUSEUS 1: LOW AKTAR


şeklinde sırası ile seri dataları gönderdigimde 1 adet 74hc595 ten pinlerin sırası ile 1 bilgisi alıyorum tek tek fakat 74hc595in arkasına bir 74hc595 daha ekledigim zaman iki entegrede aynı çıkışı vermeye baslıyor datalar kaydıgı için bu normal. nasıl bir mantıkla önce ilk entegreden 1,2,4,8,16,32,64,128 daha sonra 2. entegreden sırası ile 1,2,4,8,16,32,64,128 bilgisi alabilirim  picbasic te ?

bu şekilde 5 adet 74hc595 ard arda ekleyecegim ve çıkışlar yürüyen ışık devresi mantıgı gibi çalısmalı.

yardımlarınızı bekliyorum...

OG

İlk 595'in data inp pini (DS, pin 14) pic data çıkışına bağlanır.

Diğer 595 in data girişi ise, ilk 595'in Q7'  (pin 9)  una bağlanır. Data zinciri böyle devam eder.

Diğer kontrol uçları ise (alttakiler) hepsi paraleldir.
SH_CP ( pin 11)
ST_CP ( pin 12)
MR ( pin 10)
OE ( pin 13)


FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

SERRO EFE

ilk biti 1 gönder sonra her kaydırma işlemi için sadece clk ver 40 clk sonra tekrar işleme baştan başla

Tagli

#3
5 x 8 = 40 bitlik değerleri kaydırman gerekiyor. 40 bitlik bir değişken olmadığı için bu işi elle yapman gerekecek sanırım, yani SHIFTOUT komutunu kullanmadan.

Aslında, sadece tek bir biti kaydırdığını düşünürsek, her işlem için 40 bit kaydırmana gerek yok. DATA ve CLOCK bacaklarını kendin kontrol et. Başlangıçta 1 tane 1 kaydır, sonra DATA bacağını 0'da tut. Kaydırma işlemi için CLOCK vermen yeterli olacak. Her 40 adımdan 39 tanesinde DATA 0 olurken, 1 tanesinde de 1 olacak.

PicBasic'te 64 bitlik değişken varsa onu SHIFTOUT ile kaydırmayı deneyebilirsin ama 1 bit için 64 bit kaydırmak mantıksız geliyor, her ne kadar bu durum senin uygulamanda sorun çıkarmayacak olsa da.

Ayrıca, devre sadece yürüyen ışık için kullanılacaksa, bu işi PIC kullanmadan da yapabilirsin sanırım. Eğlenceli de olabilir :)

Not: Ben bu cevabı yazarken SERRO EFE benden hızlı davranmış, göndereceğim sırada farkettim. :)
Gökçe Tağlıoğlu

Gökhan BEKEN

Tam anlamadım zaten picbasic bilgimde yok ama mantık şu.
Farz edelimki  595 leri soldan sağa doğru seri bağladınız.
son 595 teki(en sağdaki) görmek istediğiniz verileri ilk başta göndereceksiniz.
ilk 595 teki(en soldaki) görmek istediğiniz verileri en son göndereceksiniz.

Mesela, 3 tane 595 var ve bu verileri görmek istiyorsunuz (11100011)(01011100)(10101000)

verileri şöyle(sonran başa doğru) göndereceksiniz: (00010101)(00111010)(11000111)
Özel mesaj okumuyorum, lütfen göndermeyin.

emrah

yardımlarınız için sagolun. heralde 1 bilgisi gönderdikten sonra sadece clk işlemi yapmak mantıklı görunuyor. deneyecegim. yuruyen ışık için degil daha önceden yapılmıs bir dot matrris devresi var fakat programı ve işlemcısı yok onun alt taramasında 74hc kullanılmıs bende onun ptrogramını yazmaya calısıyorum.

OG

FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

SERRO EFE

sütun değilde satır taramada olabilir.. pixel bilgilerini 595 e yüklemek daha mantıklı

emrah

OG hocam çizimde daha net anlasıldı fakat benim seri dataları 8 bit şeklinde gönderildigi için ikici gönderdigim 8 bitlik, ilk gönderdigim 8 bitligi öne ittigi için olmuyor. basit simule ediyorum. devrenin aynısını isite çizdim ve malesef matris displaye pinler sırası ile girmiyor. devreyi tasarlayan neye göre yaptı bilemiyorum. baglantılar şu şekilde ;

[IMG]http://img191.imageshack.us/img191/6306/adszogo.jpg[/img]

Uploaded with ImageShack.us


http://s2.dosya.tc/server2/Jwl3OX/kayan.rar.html


bu devre için nasıl program yazılabilir?

benim duşuncem şöyleydi ;

satırları tarayarak, alfabeleri sutundan  belirlemekti. basit mantık olarak ama satırarı tarayacak bir program yapamadım daha.

OG

#9
8 bitlik data süreceksin ama yine bit bit süreceksin, yani mantık değişmez.

mesela 2 byte sürelim,
a_sayi var byte
b_sayi var byte

x var byte

portb.6 = 0
portb.7 = 0

a_sayi = %00101101
b_sayi = %10000010

for x = 0 to 7
PORTB.5 = a_sayi.0[x]  '' a_sayi nın x numaralı bitini portb.5 e ver
portb.7 = 1      ''' iteleme palsi
''' burada gereken kadar bekle  pic çok hızlı çalışıyorsa bu süre önemli
portb.7 = 0
''' burada gereken kadar
next

''' a_sayi  gitti şimdi b_sayi yı gönder

for x = 0 to 7
PORTB.5 = b_sayi.0[x]  '' b_sayi nın x numaralı bitini portb.5 e ver
portb.7 = 1      ''' iteleme palsi
''' burada gereken kadar bekle
portb.7 = 0
''' burada gereken kadar
next

''' o da gitti çıkışa ver

portb.6 = 1
''' burada gereken kadar bekle
portb.6 = 0


''' Şimdi çıkıştalara ama üstteki 595 de sürülmesi gerekir ki ledler enerjilenebilsin.

Onu da aynı mantıkla süreceksin.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

emrah

hocam dediginizi net bir şekilde anladım fakat  matrislerin alttaki 74hc595 baglantılarına bakacak olursak  her seferinde farklı sayı göndemem gerekiyor. 74hc nin 15. pini yani 0. çıkış ikinci dotmatrisin 3. satırına gidiyor.  ilk başta 128 datasını göndermeliyim ardından 64 ,32,16,8...1 şeklinde datalar göndermeliyimki dotmatrisi bastan sonra düzgün şekilde tarayayım. ilk 128 bilgisini gönderdik diyelim ardından 64 gitmesi gerekiyor, 64 ü gönderdigim zaman 128 sayısı bir sonraki shiftregestere kayıyor ve ordada çıkış vermiş oluyorum.

ete

Konuyla iligili olarak yazdığım ders notları var. Orada bir matrix saat sistemi senin sisteme benzer şekilde sürülmekte ancak satır taraması yapılmaktadır. Açık kodlar ve açıklamalar mevcut bir oku istersen.

Ete

http://etepic.com/index.php?action=dlattach;topic=24.0;attach=18
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

Tagli

emrahGS, eğer donanım ve yazılımdan kaynaklanan sebeplerle ihtiyaç fazlası bit göndermek zorunda kalıyorsan, fazla bitleri sağ tarafta bırakıp gerçek veriyi sola hizalamalısın. Bırak fazla olanlar son 595'in ucundan fırlayıp gitsin :)

Eğer bu 40 bitten bazılarının değişmeden kalması gerekiyorsa, yeni yollayacağın 40 bite bu eskilerini de eklemelisin. Bu işlem yazılımda kolaylıkla yapılabilir. Bunun için, bir önce gönderdiğin veriyi hafızada tutman gerekli.
Gökçe Tağlıoğlu

emrah

ete hocam ders notlarını inceleyecegim.
tagli, öylede düşünüyorum fakat alt kısımda tarama yapılacagı için boşta gönderdigim veriler taramayı etkilemezmi, matrislerin satır bilgileri ortak baglı sonuçta. bu devreyi yapan neye göre yaptı çözemiyorum ama kesinlikle bunun programı C ile yazıldıgından yapan  iyi kontrol etmiş. devre büyük 5 adet 5x7 matrislerle yapılmıs yeniden tasarlamakta baya zamanımı alır bunun için çözüm üretmeye çalısıyorum. ete hocanın dersine biraz çalısayım bişeyler çıkaracam ortaya .