Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

74hc595 sorunu

Başlatan exper, 27 Aralık 2014, 09:27:51

exper

arkadaşlar 74hc595  ile port çoğullama yaptım ,fakat 74hc595  e 2. data'yı gönderdiğimde  74hc595  in diğer çıkışların durumu değişiyor ,portlar değişmeden sadece ilgili portun durumunu nasıl kontrol edebilirim tşk..

Device 16F628
  Xtal = 4'MHZ
TRISB=%11111111   'PortB tamamı çıkış yapıldı.
TRISA=%00000000   'A portu tamamı çıkış yapıldı.
Symbol CLK=   PORTA.0
Symbol DTA=   PORTA.1
Symbol AKTAR= PORTA.2
tuş VAR  Word

BASLA:
   If portb=0   THEN  BILGI=1
   If portb=1   THEN  BILGI=2
   If portb=2   THEN  BILGI=4
   If portb=3   THEN  BILGI=8
   If portb=4   THEN  BILGI=16
   If portb=5   THEN  BILGI=32
   If portb=6   THEN  BILGI=64
   If portb=7   THEN  BILGI=128

    SHOut DTA,CLK,1,[BILGI]
        PulsOut AKTAR,5
DELAYMS 200

GOTO BASLA
END

Kabil ATICI

 ...
BILGI=0
If portb=0   THEN  BILGI=BILGI+1
If portb=1   THEN  BILGI=BILGI+2
If portb=2   THEN  BILGI=BILGI+4
...
SHOut DTA,CLK,1,[BILGI]
        PulsOut AKTAR,5
...

diğerlerini aynen değiştir...
ambar7

ete

595'e verilen ilk rakam BILGI isimli değişkende tutuluyor. Bunu sürekli olarak en son verilen şeklinde saklaman gerekiyor.
Diyelimki ilk verilen bilgi VERI=%00000001  şeklinde verilmiş olsun.
İkinci bilgi olarak da BILGI=%01000000 şeklinde olsun. Bu durumda 595 de hem ilk verilen %00000001 bilgisi hemde son verilen birlikte yer alması gerekiyor. Bu işi basitçe bir OR işlemi ile yapabilirsin. VERI=VERI | BILGI şeklinde bu iş olur. Ancak burada bir problemin daha olabilir.
Zira bu iişlem sonucunda VERI=%01000001 değerini alacaktır. Diyelimki tekrar VERI=%00000001 yapmak isteyeceksin o zaman ne yapacaksın.
Bu durumda VERI=VERI & %10111111 yapman gerekir.
Şayet sürekli 595 bitlerini set edip hepsi set olduktan sonra bir kerede hepsini sıfırlıyor isen bu yöntemi kullanmakta bir sakınca yok.
Ama 595 bitlerini toggle çalıştıracak isen şöyle de yapabilirsin.
   If portb=0   THEN  BILGI=1
   If portb=1   THEN  BILGI=2
   If portb=2   THEN  BILGI=4
   If portb=3   THEN  BILGI=8
   If portb=4   THEN  BILGI=16
   If portb=5   THEN  BILGI=32
   If portb=6   THEN  BILGI=64
   If portb=7   THEN  BILGI=128

yerine;
  
   If portb=0   THEN  TOGGLE BILGI.0
   If portb=1   THEN  TOGGLE BILGI.1
   If portb=2   THEN  TOGGLE BILGI.2
   If portb=3   THEN  TOGGLE BILGI.3
   If portb=4   THEN  TOGGLE BILGI.4
   If portb=5   THEN  TOGGLE BILGI.5
   If portb=6   THEN  TOGGLE BILGI.6
   If portb=7   THEN  TOGGLE BILGI.7

şeklinde bir kod dizisi kullansan senin için daha uygun olur. Böylece ilgili bit set edilmemiş ise set edilir , set edilmiş ise reset edilmiş olur.

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

exper

ete hocam verdiğin bilgiye tşk. ederim işime yaradı, 3tane 595 seri bağladıpımda 3.   595.in 8. pini  yani 24.pin i değiştrmek istediğimde komut nasıl olacak.. tşk...

mehmet

Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr
https://creativecommons.org/licenses/by/4.0/deed.tr "CC BY"

ete

Bu soruyu sormasan daha memnun olurdum.Çünki cevabı çok basit. 595 ler 8 bitlik bilgi ile çalışıyorlar. Bu durumda her birine ayrı bir 8 bitlik Bilgi vermen gerekecek. 1 Nolu 595'e verdiğin değer BILGI1, 2 noluya verdiğin BILGI2 ve 3 noluya verdiğin BILGI3 olunca hepsi için açıkladığım işlemi yaparsan her bir için benzer sonuç elde edersin.

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

exper

#6
hocam 3 tanesi biribirine seri olarak bağlı birin Q7' si digerinin data sına giriyor. pin tasarrufu yapmak için....



mesaj birleştirme:: 27 Aralık 2014, 16:01:31

         Toggle  BILGI1.0

        SHOut DTA,CLK,1,[BILGI1,BILGI2,BILGI3]
        PulsOut AKTAR,5

şeklinde yazıyormuşuz tşk .....

AKIL

sipogondermeornek:'------------ birde böyle

Dim tumbilgi As Dword       
Symbol bilgi1 = tumbilgi.Byte0 '
Symbol bilgi2 = tumbilgi.Byte1 '
Symbol bilgi3 = tumbilgi.Byte2 '
Symbol bilgi4 = tumbilgi.Byte3 '

    SetBit tumbilgi,12      'tumbilginin 12.ci bitini 1 yap
   
boyle_gonder:
        SHOut _DTA_595,_CLK,MsbFirst ,[bilgi4,bilgi3,bilgi2,bilgi1]
        High _STL_595 :DelayUS 1 :Low _STL_595 'latch
       
veyaboyle_gonder: 
        SHOut _DTA_595,_CLK,MsbFirst ,[tumbilgi.Byte3,tumbilgi.Byte2,tumbilgi.Byte1,tumbilgi.Byte0]
        High _STL_595 :DelayUS 1 :Low _STL_595 'latch

omereliusuk

SHOut _DTA_595,_CLK,MsbFirst ,[tumbilgi\Str4]

AKIL

peki sipo (74hc595 - 74hc494) yada piso (74hc165 - 74hc597)yu  donanımsal olarak sürekli tarama
yani lazım olduğunda sipo yazmak piso okumak yerine altta surekli donanımsal olarak SPI ve SRNQ yü çalıştırarak
biz sadece sıradaki giriş yada çıkış için atadıgımız data registerimizin degerini değiştirerek  nasıl yapıyoruz
zannederim bir byte değilde bir çok byte yani fifo kullanımı sadece 25 .. 46k22 serisi destekliyor