MC74HC595AN SHOUT problemi...

Başlatan My75, 05 Eylül 2009, 16:44:20

My75

Arkadaşlar,32 adet kameranın loop kontrolu için bir devre yaptım fakat sorun var,nedenini anlamış değilim..Aşağıdaki yöntem ile 4 adet ULN2803'ü 4 adet 595 entegre ile sürüyorum.Yaptığı sadece 32 kanalı bağımsız açıp kapamak.Bazen çok güzel çalışıyor,bazen sapıtıyor,bazende hiç çalışmıyor bir türlü anlayamadım.Latch için pulsout,8 yapmıştım ama son hali aşağıdaki gibi.(RX girişi başka bir RX girişi ile ortak)


Device 16F628A
HSERIAL_BAUD=2400
HSERIAL_RCSTA=%10010000
HSERIAL_TXSTA=%00100000
HSERIAL_CLEAR=On
ALL_DIGITAL TRUE
PORTB_PULLUPS On
Config INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, BODEN_OFF, LVP_OFF, MCLRE_OFF,CP_ON

TRISA = %00100000
TRISB = %00000010
Dim CLK     As PORTB.4
Dim DATAA   As PORTB.5
Dim LATCH1  As PORTB.6
Dim LATCH2  As PORTB.7
Dim LATCH3  As PORTA.6
Dim LATCH4  As PORTA.7

Dim KAMERA  As Byte
Dim LOOP    As Byte
Dim ULN1    As Byte
Dim ULN2    As Byte
Dim ULN3    As Byte
Dim ULN4    As Byte

PORTA=0
PORTB=0

ULN1=ERead 1
ULN2=ERead 2
ULN3=ERead 3
ULN4=ERead 4
Low LATCH1:Low LATCH2:Low LATCH3:Low LATCH4


SHOut DATAA,CLK,msbfirst,[ULN1]
High LATCH1
DelayMS 1
Low  LATCH1

SHOut DATAA,CLK,msbfirst,[ULN2]
High LATCH2
DelayMS 1
Low  LATCH2

SHOut DATAA,CLK,msbfirst,[ULN3]
High LATCH3
DelayMS 1
Low  LATCH3

SHOut DATAA,CLK,msbfirst,[ULN4]
High LATCH4
DelayMS 1
Low  LATCH4


BASLA:
HSerIn [KAMERA,LOOP]
If LOOP=0 Then BASLA
If LOOP=1 Then KAPA
If LOOP=2 Then AC
GoTo BASLA

AC:
If KAMERA=1  Then ULN1=ULN1 ^ %00000001 :GoTo LATCHA   '1. BİTİ TERSLE
If KAMERA=2  Then ULN1=ULN1 ^ %00000010 :GoTo LATCHA
If KAMERA=3  Then ULN1=ULN1 ^ %00000100 :GoTo LATCHA
If KAMERA=4  Then ULN1=ULN1 ^ %00001000 :GoTo LATCHA
If KAMERA=5  Then ULN1=ULN1 ^ %00010000 :GoTo LATCHA
If KAMERA=6  Then ULN1=ULN1 ^ %00100000 :GoTo LATCHA
If KAMERA=7  Then ULN1=ULN1 ^ %01000000 :GoTo LATCHA
If KAMERA=8  Then ULN1=ULN1 ^ %10000000 :GoTo LATCHA


If KAMERA=9  Then ULN2=ULN2 ^ %00000001 :GoTo LATCHB
If KAMERA=10 Then ULN2=ULN2 ^ %00000010 :GoTo LATCHB
If KAMERA=11 Then ULN2=ULN2 ^ %00000100 :GoTo LATCHB
If KAMERA=12 Then ULN2=ULN2 ^ %00001000 :GoTo LATCHB
If KAMERA=13 Then ULN2=ULN2 ^ %00010000 :GoTo LATCHB
If KAMERA=14 Then ULN2=ULN2 ^ %00100000 :GoTo LATCHB
If KAMERA=15 Then ULN2=ULN2 ^ %01000000 :GoTo LATCHB
If KAMERA=16 Then ULN2=ULN2 ^ %10000000 :GoTo LATCHB

If KAMERA=17 Then ULN3=ULN3 ^ %00000001 :GoTo LATCHC
If KAMERA=18 Then ULN3=ULN3 ^ %00000010 :GoTo LATCHC
If KAMERA=19 Then ULN3=ULN3 ^ %00000100 :GoTo LATCHC
If KAMERA=20 Then ULN3=ULN3 ^ %00001000 :GoTo LATCHC
If KAMERA=21 Then ULN3=ULN3 ^ %00010000 :GoTo LATCHC
If KAMERA=22 Then ULN3=ULN3 ^ %00100000 :GoTo LATCHC
If KAMERA=23 Then ULN3=ULN3 ^ %01000000 :GoTo LATCHC
If KAMERA=24 Then ULN3=ULN3 ^ %10000000 :GoTo LATCHC

If KAMERA=25 Then ULN4=ULN4 ^ %00000001 :GoTo LATCHD
If KAMERA=26 Then ULN4=ULN4 ^ %00000010 :GoTo LATCHD
If KAMERA=27 Then ULN4=ULN4 ^ %00000100 :GoTo LATCHD
If KAMERA=28 Then ULN4=ULN4 ^ %00001000 :GoTo LATCHD
If KAMERA=29 Then ULN4=ULN4 ^ %00010000 :GoTo LATCHD
If KAMERA=30 Then ULN4=ULN4 ^ %00100000 :GoTo LATCHD
If KAMERA=31 Then ULN4=ULN4 ^ %01000000 :GoTo LATCHD
If KAMERA=32 Then ULN4=ULN4 ^ %10000000 :GoTo LATCHD
GoTo BASLA

KAPA:
If KAMERA=1  Then ULN1=ULN1 | %00000001 :GoTo LATCHA   '1. BİTİ 1 YAP
If KAMERA=2  Then ULN1=ULN1 | %00000010 :GoTo LATCHA
If KAMERA=3  Then ULN1=ULN1 | %00000100 :GoTo LATCHA
If KAMERA=4  Then ULN1=ULN1 | %00001000 :GoTo LATCHA
If KAMERA=5  Then ULN1=ULN1 | %00010000 :GoTo LATCHA
If KAMERA=6  Then ULN1=ULN1 | %00100000 :GoTo LATCHA
If KAMERA=7  Then ULN1=ULN1 | %01000000 :GoTo LATCHA
If KAMERA=8  Then ULN1=ULN1 | %10000000 :GoTo LATCHA


If KAMERA=9  Then ULN2=ULN2 | %00000001 :GoTo LATCHB
If KAMERA=10 Then ULN2=ULN2 | %00000010 :GoTo LATCHB
If KAMERA=11 Then ULN2=ULN2 | %00000100 :GoTo LATCHB
If KAMERA=12 Then ULN2=ULN2 | %00001000 :GoTo LATCHB
If KAMERA=13 Then ULN2=ULN2 | %00010000 :GoTo LATCHB
If KAMERA=14 Then ULN2=ULN2 | %00100000 :GoTo LATCHB
If KAMERA=15 Then ULN2=ULN2 | %01000000 :GoTo LATCHB
If KAMERA=16 Then ULN2=ULN2 | %10000000 :GoTo LATCHB

If KAMERA=17 Then ULN3=ULN3 | %00000001 :GoTo LATCHC
If KAMERA=18 Then ULN3=ULN3 | %00000010 :GoTo LATCHC
If KAMERA=19 Then ULN3=ULN3 | %00000100 :GoTo LATCHC
If KAMERA=20 Then ULN3=ULN3 | %00001000 :GoTo LATCHC
If KAMERA=21 Then ULN3=ULN3 | %00010000 :GoTo LATCHC
If KAMERA=22 Then ULN3=ULN3 | %00100000 :GoTo LATCHC
If KAMERA=23 Then ULN3=ULN3 | %01000000 :GoTo LATCHC
If KAMERA=24 Then ULN3=ULN3 | %10000000 :GoTo LATCHC

If KAMERA=25 Then ULN4=ULN4 | %00000001 :GoTo LATCHD
If KAMERA=26 Then ULN4=ULN4 | %00000010 :GoTo LATCHD
If KAMERA=27 Then ULN4=ULN4 | %00000100 :GoTo LATCHD
If KAMERA=28 Then ULN4=ULN4 | %00001000 :GoTo LATCHD
If KAMERA=29 Then ULN4=ULN4 | %00010000 :GoTo LATCHD
If KAMERA=30 Then ULN4=ULN4 | %00100000 :GoTo LATCHD
If KAMERA=31 Then ULN4=ULN4 | %01000000 :GoTo LATCHD
If KAMERA=32 Then ULN4=ULN4 | %10000000 :GoTo LATCHD
GoTo BASLA

LATCHA:
SHOut DATAA,CLK,msbfirst,[ULN1]
High LATCH1
DelayMS 1
Low  LATCH1
EWrite 1,[ULN1]
DelayMS 100
GoTo BASLA

LATCHB:
SHOut DATAA,CLK,msbfirst,[ULN2]
High LATCH2
DelayMS 1
Low  LATCH2
EWrite 2,[ULN2]
DelayMS 100
GoTo BASLA

LATCHC:
SHOut DATAA,CLK,msbfirst,[ULN3]
High LATCH3
DelayMS 1
Low  LATCH3
EWrite 3,[ULN3]
DelayMS 100
GoTo BASLA

LATCHD:
SHOut DATAA,CLK,msbfirst,[ULN4]
High LATCH4
DelayMS 1
Low  LATCH4
EWrite 4,[ULN4]
DelayMS 100
GoTo BASLA

End
Tomurcuk için çaba göstermeyen dal,odun kalmaya mahkumdur...

Murat Mert

S.A.
Sn. arkadaşım birde bu yöntemi uygula, işine uyar belki buda benim sistem. Kolay gelsin.

port çoğullama
mert07

drmp

arkadaşa katılıyorum bana göre 74574 kullanılarak yapılan port çoğullama daha güvenli ve softwareside basit oluyor

My75

mert07 arkadaşım, gönderdiğin isis dosyasını açamadım ama yazılımdan anladığım 16 girişin hangisi aktif ise o girişlere ait bitleri 1 yapıyorsun,hangi bit bir ise ona ait değişkenleri topluyorsun fakat anlamadığım else komutu kullanmışsın,yani o giriş 1 ise bit 1,çıkış sıfır ise bit sıfır,sonrada o bitleri topluyorsun burada bitlerin anlamı kalmamış,onun yerine direkt olarak şöylede yapabilirdin

DI:PORT GİRİŞ     O1:BIT      R:DEĞİŞKEN

If DI1=1 Then O1=1 :Else : O1=0
If DI2=1 Then O2=1 :Else : O2=0
If DI3=1 Then O3=1 :Else : O3=0

If O1=1 Then R1=1 : Else : R1=0
If O2=1 Then R2=2 : Else : R2=0
If O3=1 Then R3=4 : Else : R3=0

BILGI=R1+R2+R3+R4+R5+R6+R7+R8

bu senin yaptığın,bunun yerine

IF DI1=1 THEN R1=1
IF DI2=1 THEN R1=2
IF DI3=1 THEN R1=3
BILGI=R1+R2+R3+R4+R5+R6+R7+R8

hani else olmasa o bitlerin latch niyetine olduğunu anlayacağım değil.Üstelik benim yazdığım kodda (ilk kodum) 74HC595 ile Pic'in 6 portu  ile 32 çıkış elde ediyorum ve her çıkışı birbirini etkilemeden açıp kapatıyorum.74HC573 veya 574 olsa 32 çıkış için en az 12 port kullanmam gerekecek.Gerçi sorunu hallettim,kartın 5v beslemesini başka karttan almıştım,kendine özel besleme yaptım sorun halloldu.
Tomurcuk için çaba göstermeyen dal,odun kalmaya mahkumdur...

Murat Mert

S.A.
Sn. My75 ben burada çıkışlara bit ler ile pin ismi vermek için böyle yaptım anlatmaya çalıştığımı en altseviyedeki arkadaşlarımızda anlasın anlamazsada bir ışık çaksın niyeti ile yaptım.
Örnek proteus 7,5 le yapıldı.  :D
mert07

mustafa_cmbz

Alıntı yapılan: My75 - 05 Eylül 2009, 16:44:20


Dim CLK     As PORTB.4
Dim DATAA   As PORTB.5
Dim LATCH1  As PORTB.6
Dim LATCH2  As PORTB.7
Dim LATCH3  As PORTA.6
Dim LATCH4  As PORTA.7




Aradan çok süreler geçmiş fakat cevap vermek örnek olması açısından iyi olur diye düşündüm..


Yazılımın sapıtmasının sebebi yukarıda verdiğiniz port tanımlamalarını dim olarak yapıldığından dolayı sorun yaratıyor gibi duruyor.

İyi çalışmalar..