Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

yine 4094

Başlatan cabbar27, 25 Şubat 2011, 21:21:03

cabbar27

Arkadaşlar lütfen mazur görün. Daha önce Araştırdığım devrelerde 4094 ile hep matrix vs vs led devreleri yapılmış bana lazım olan yani öğrenmek istediğim 10 tane seri 4094 8x10= 80 çıkış birimim var
bunların isteğim herhangi birisini data ile tetiklemek istiyorum. Takıldım kaldım yaa! microC ve Pic Basic Pro  kullanıyorum (acemi düzeyde)  Bana yardım edin en azından seri bus mantığı nedir  bunları derlemede kullanılacak 1 2 örnek kod dosyası gibi Ders notuda olur.
Ben buldum ama Dediğim gibi matrix vs vs adamlar uçmuşlar bana biraz fazla geldi okudugum makalelerdede bu konuya hiç değinilmemiş! clock pulse data pulse strobe pulse nedir ne işe yarar ve nasıl kullanılır port atamaları nasıl yapılır! :D Neyse anlatabildim herhalde . İşte buda devre şeması. :-\



http://img72.imageshack.us/i/yeni1h.jpg/

eseneren

#1
Tam olarak anladımmı bılmem ama anladıgımı sandıgım soruna ;
oncelıkle nıye 4094 HC595 değil?
10(shift reg)*8 bit = 80 bit eder
basitce datayı gırdıkden sonra clk pinine bir pulse gonderıyorsun (yukselen kenarda tetıklendıgını varsayarsak 0->1)
data da 0011 olsun sırayla data ve clk pininden asagıdakıleri yollaman yeterli
Data CLK
1      0   // mcudan data gonderıldı
1      1   // pulse verildi data shift registera aktarıldı
1      0   // mcudan data gonderıldı
1      1   // pulse verildi data shift registera aktarıldı
0      0   // mcudan data gonderıldı
0      1   // pulse verildi data shift registera aktarıldı
0      0   // mcudan data gonderıldı
0      1   // pulse verildi data shift registera aktarıldı

Mantıgı bu kadar.

misal dotmatris 1 sıra 10 hane ıse 8bit*80bit (8x8 monocolor icin)
8 bıt data verıcem 80bit ıle tek tek tarama yapıcam dersen 8bit butun chiplere yollayıp ilgili chipi enable edersın.
(bunu yapmam ama yaparsam 4017 gıbı cansınkaunter gıbı bır sey kullanırım)
Seçim yapmak için durum hakkında bilgi sahibi olmak zorunda değilsin, sonucuna hazır olmak için durum hakkında kaygılanırsın.  http://bit.ly/gixfTk

cabbar27

sagol kardeşim az çok dediğinle ilgilendim Bu seferde Portlara clk  strb ve data uclarını pıc et nasıl anımlıycam
define clk portb.0
gibimi Biraz Anlatırsan sevinirim Şunun gibi
clock pulse şu işe yarar porta aktarırken port şu şekilde seçilir vs vs 
strobe  ......
data .....
umarım canınızı sıkmıyorumdur! Dediğim gibi daha acemiyim! kafaya koydum yapmam gerek  :D ve 4094 le!!!
:P

ete

#3
Bana kalırsa shift registerin ne olduğunu ve bu aletin nasıl kontrol edildiğini bilmiyor bu arkadaş.
Bir açıklamada ben yapayım iki açıklamadan aklında bir şeyler kalır sanırım.
Shift register basit anlatımla seri giriş yapılarak paralel çıkış elde edilen bir entegre . Giriş yapılan bacakları DATA (bilgi girişi olup 4094 de bu uç D ile gösterilmiş) , CLK (Clk girişi olup 4094 de bu uç CLK olarak işaretlenmiş) tir. Aynı devrede birden fazla entegre yer alınca hangisi ile çalılacağını belirlemek amacı ile birde Output Enable ucu vardır (4094 de bu uç OE olarak adlandırılmış). Bu ucu HIGH yaparsan entegre aktif olur LOW olursa aktıf olmaz. Son olarak da birde Data ucundan verilen bilgi daima içeride bir ön hafızada tutulur ve dışarı ancak STB bacağına bir PULS uygulanırsa aktarılır. STB bacağı senin STROB dediğin bacak olup bir çok entegrede buna Latch yani Kilit ismide verilmektedir.
Kısaca 4094 e 8 bitlik bir bilgiyi aktardığın zaman STB bacağı LOW da tutulmalı ve 8 bit tamamlandıktan sonra bu bacak önce HIGH sonra tekrar LOW'a geçirilmelidir. Buna bir puls diyoruz. Böylece 8 bitlik bilgi çıkış bacaklarına aktarılmış olacaktır.
Bilgi nasıl verilir birazda ona değinelim. Önce işin temel mantığını vereyim.
- OE bacağını HIGH yaparak entegre yada entegreleri aktif hale getirirsin.
- Data bacağına yollayacağın bilginin 7.ci bitini verirsin. (Bu bilgi HIGH ise data bacağı HIGH low ise data bacağı LOW olacaktır)
- CLK bacağını önce HIGH sonra LOW yaparsın . Böylece ilk bilgi 4094 ün ön hafızasına aktarılmış olur. Ancak çıkış bacaklarına henüz verilmez.
- Sonra bilginin 6.biti Data bacağına verilir ve CLK ucuna br puls uygulanır (önce HIGH ve sonra LOW)
- Bu şekilde bilginin sıfırıncı bitide verildikten sonra STB bacağına bir puls uygulanır Bu şekilde Bilgi çıkış bacaklarına belirir.

Birden fazla 4094 seri olarak bir birine bağlanabilir. Bunun için Data girişi ilk 4094 ün data bacağından yapılır sonrakiler bir birine seri bağlanır. Nasıl bağlandığını görmen için senin verdiğin örnek devre şemasına bakmanı öneririm. O devrede ilk 4094 den data girişi yapılmış ve aynı entegrenin 9 nolu QS bacağı bir sonrakinin Data girişine bağlanmıştır. Bu şekilde istediğin sayıda 4094'ü seri olarak bir birine bağlaya bilirsin. Şimdi de istenen bir bit in hangi entegrede nasıl set edileceğini anlatayım.
Bu şekilde 10 adet 4094 seri bağlandığını farz edelim.
Elinde 10 adet 8 bitlik bilgi olması gerekiyor. Her biri 10 adet 4094 de yer alacak bilgiyi içermiş olacaktır.
Bu durumda 3 Nolu 4094 ün üçüncü biti HIGH yapılacak ise elimizdeki değişkenlerin değerleri şöyle olmalıdır;
Soldan sağa doğru 10 ....1 nolu entegre olduğunu farz edersek;
%00000000  %00000000  %00000000  %00000000  %00000000  %00000000  %00000000  %00000100  %00000000  %00000000
Dikkat edersen sağdan 3. cü değerin 3. biti 1 dir.
Şimdi sırası ile bu bilgileri ilk entegreden seri dizilmiş bu seriye verelim.
-Önce en soldaki  bilgi olan  %00000000  bilgisi verilir  yani 10. entegre bilgisi
- Sonra 9. entegre bilgisi olan %00000000 bilgisi verilir.
- Sonra 8. entegre bilgisi olan %00000000 verilir.
- Sonra 7. entegre bilgisi olan %00000000 verilir.
- sonra 6. entegre bilgisi olan %00000000 verilir.
- Sonra 5. entegre bilgisi olan %00000000 verilir.
- Sonra 4. entegre bilgisi olan %00000000 verilir.
- Sonra 3. entegre bilgisi olan %00000100 verilir.
- Sonra 2. entegre bilgisi olan %00000000 verilir.
- Sonra 1. entegre bilgisi olan %00000000 verilir.
- en sonunda stb bacağı na bir puls uygulanarak ön hafızada tutulan bilgilerin çıkışa aktarılması sağlanır.
Seri devrelerde CLK - STB ve OE bacakları bir birine bağlanarak tek pinden kontrol edilmeleri sağlanır.

Hepsi bu kadar umarım artık anlamışsındır.

Ete

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

cabbar27

Emeğine sağlık Kardeşim Adım Mehmet Gaziantepte otomasyon üzerine çalışıyorum Benim asıl branşım plc
ama son zamanlarda iyice canımı sıkmaya başladı bu plc işi elektronik devrelerin içini açıpta bakamıyorsun
copyproject entegreleri kopyalayamıyorsun Kendi İşimize yarayacak devremizi yaptıktan sonra neden PLc veye yan ürünlerde dışa bağımlı kalayımki!  En basitinden Tek potrlu bir analog dijital çevirici devresi 350$ tabi bu markaya göre değişiyor Neyse kardeşlerim başınızı ağrıtmiym . Çok Teşekkürler Tüm İlgilenen arkadaşlara  hepinizi :-*
muahuah  ;D çok sevinçliyim

cabbar27

#5
kardeşim senin dediklerin doğruktusunda  şöyle bir ufak prgoram yazdım 100 ms arayla set oluyo ama ledleri söndüremiyorum birde böyle cok uzun oluyor kısa yolu yokmu bunun :D!!! düşünsene ben sadece 79 nolu biti set etmek istiyorum :D ha bide dataları nasıl resetliyoruz herhalde her döngüde datayı 1 kaydırıp tekrar yazoyor :D yardımcı olurmusunuz
Pic basic pro kullanıyorum MicroC de olabilir!


TRISA=0
TRISB=0
porta=0
portb=0
symbol clock=portb.1
symbol dat=portb.0
symbol strob=portb.2
symbol enb=portb.3
basla:
enb=1
dat=1
dat=0
clock=1
clock=0
strob=1
strob=0
pause (100)
enb=0
goto basla
end

eseneren

http://www.jaycar.com.au/images_uploaded/CD4094BC.PDF
Bunu okursan
1. bekleme 100ms yapacaksan Veriyi gonder o sırada 70ms bekle (misal)
2. sadece 50.bit 1 ise sırada 51 var ise 0 data gonder 1 kere shift et
kullanacagın entegrenın datasheetınden daha guzel kaynak yoktur...
Seçim yapmak için durum hakkında bilgi sahibi olmak zorunda değilsin, sonucuna hazır olmak için durum hakkında kaygılanırsın.  http://bit.ly/gixfTk

ete

Tabiiki kolay yolu var.
Low OE
Shiftout DataPin, ClkPin, 1, [Veri10, veri9, veri8, veri7 , veri6 , veri5, veri4 , veri3 ,veri2, veri1]
Pulsout STB,10

bu üç satır 10 adet entegreye kendi verilerini yazar. Dahada kolayı yoktur.

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

cabbar27

Sayın Ete ve eseneren abilerim Bir kontrol edermisiniz dosyadakileri Olmuşmu ve içindeki yazılı olan projemin olabilirlik derecesi ne ?? Sizce fazlamı uçmuşum!! Nacizane Benim Devrem!!  ::) http://rapidshare.com/files/450015644/i__TE_OLDU.rar

ete

Yaptığın pek olmamış. Yazdıklarıma çok dikkat etmemişsin. En sondaki (C) 4094 ünbilgisi en önce verilmeli sen A yı önce vermişsin.
Devre şemasında yer alan 4050 leri kaldır onlar  gereksiz. Adamın kendi devresinde bir başka amaçla kullanılmış. Pic ile 4094 arasını direk bağla arada başka bir şey olmasın. Daha sonra aşağıdaki programı bir dene bakalım.

Ete
TRISA=0
 TRISB=0
 porta=0
 portb=0
 symbol clock=portA.1
 symbol dat=portA.0
 symbol strob=portA.2
 symbol enb=portA.3
 A VAR BYTE
 B VAR BYTE
 C VAR BYTE
 I var byte
 ENB=1
 PAUSE 500
 BASLA:
 B=0:C=0
 A=1
  for I= 0 to 7 
      Shiftout DAT, CLOCK, 1, [C,B,A]
      Pulsout STROB,10
      PAUSE 500
      A=a*2
  next
  A=0
  B=1
  for I= 0 to 7 
      Shiftout DAT, CLOCK, 1, [C,B,A]
      Pulsout STROB,10
      B=B*2
      PAUSE 500
  next
  B=0
  C=1
  for I= 0 to 7
      Shiftout DAT, CLOCK, 1, [C,B,A]
      Pulsout STROB,10
      PAUSE 500
      C=C*2
  next

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

cabbar27

http://rapidshare.com/files/450241666/deney_1.rar :D bi kontrol edermisiniz
Abilerim şimdi yine çıkmaza girdim lcd ekranda hangi bit 1 ise onun rakamını göstermek istiyorum benim bildigim yöntem bayağı bir uzun 80 satırm yazmam gerekiyor nasıl becerebilirim acaba..
Affınıza sıgınarak yazıyorum bunları umarım canınızı sıkmıyorumdur.