avatar_xoom

Max7219 Hakkında.

Başlatan xoom, 18 Şubat 2015, 23:00:55

xoom

Arkadaşlar Max7219 ile 64 ledi bireysel olarak kontrol etmeye çalışıyorum fakat bu max7219 nasıl bir entegredir.. bir türlü çözemedim..
8x8 Matrix led sisteminde 1.Sutun 1.Satırdaki ledi yakmayı öğretecek biri arıyorum..
CCS C kullanıyorum fakat işin mantığını anlatabilecek birisi olursa CCS C de kendim birşey yapabilirim sanırım.
internette bulduğum kaynaklar genelde Display  için benim işime pek yaramadı daha doğrusu ben onlardan kendime birşeyler çıkaramadım.

Kurduğum yapı Aşağıdaki linkte.
https://yadi.sk/i/sQdDWTMMemNne

Mucit23

Max7219 güzel bir enteğredir. İlk başlarda fiyatı çok pahalıydı yaklaşamıyorduk. Şimdilerde bayağı ucuzladı sanırım

Ben basic için biraz açıklamalı kütüphane tarzı birşeyler yazmıştım. Açıklamalar senin için yeterli olur. C ye çevirebilirsin sanırım.

http://etepic.com/index.php/topic,1046.msg11052.html#msg11052
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

xoom

Mucit Yanıt için teşekkür ederim fakat ben kütüphaneyi kullanmak zorundamıyım. Yani 1.mesajda dediğim gibi 1.sütün 1.satırdaki (8x8 matrix ) Ledi yakıp söndürmek için nasıl bir kod yazmalıyım bu konuda bana yardım edermisin.

sonmoikan

#3
Max7219 Entegresini 2 adet 74HC595 entegresin seri olarak bağlanmış hali gibi düşünebilirsin. Farklı olarak sigorta ayarlarının yapılması gerekiyor.
İlk Olarak entegreye ait Register Ayarlarını yapmak gerekir.
Ben Mantığını PBP ya göre anlatayım.

ADDRESS ve VERI isminde iki tane BYTE değişkenimiz olsun

ADDRESS = $0C Aç/Kapat Adresi                     VERI=$00 Kapat - $01 aç
ADDRESS = $09 Decode Mode Adresi               VERI=$00
ADDRESS = $0A Parlaklık Seviyesi                   VERI=0-15 arası
ADDRESS = $0B Sürülecek olan Display Sayısı  VERI=0-7 arası
ADDRESS = $0F Display Test Adresi                 VERI=0 test kapalı

Şimdi bu ayarların Max7219 a yazılması için pbp da ki SHIFOUT komutunu kullanıyoruz.
SHIFOUT DIN_PIN,CLK_PIN,1,[ADDRESS,VERI]
PULSOUT  LOAD_PIN,2

Örnek: Max7219 u on-off registery on($01) yaparak açıyoruz.
SHIFOUT DIN_PIN,CLK_PIN,1,[$0C,$01]
PULSOUT  LOAD_PIN,2

Bu sigorta ayarlarını sırayla Max7219 a gönerdikten sonra yine SHIFOUT komutu kullanılarak istenilen veriyi gönderebiliriz.
SHIFOUT DIN_PIN,CLK_PIN,1,[ADDRESS,VERI]
PULSOUT  LOAD_PIN,2
ADDRESS yazan değişkene DIG(DIG0..DIG7) seçimini,  Veri yazan Değişkenede Segment(A..DP) bilgisini gönderiyoruz.
Örnek: 1. Digit aftif olsun ve 3 rakamını göstersin (Segment verilerini hazırlarken ters olarak hazırlayın. Normalde 3 için 79 olması gerekirken 121 yapmak gerekiyor.)
SHIFOUT DIN_PIN,CLK_PIN,1,[1,121]
PULSOUT  LOAD_PIN,2

Şayet 1 den fazla örneğin 2 adet Max7219 kullanacak isek ilk Max7219 un DOUT(24) pinini 2. Max7219 un DIN(1) pinine bağlıyoruz
LOAD_PIN ve CLK_PIN pinlerinide ortak bağlıyoruz.
SHIFOUT DIN_PIN,CLK_PIN,1,[ADDRESS,VERI, ADDRESS,VERI] 
PULSOUT  LOAD_PIN,2

Daha anlaşılabilir olması açısından basit bir saat örneği ekliyorum.

ETE Hocama Saygılarımla....
ABDULLAH

F®T

Hocam elinize sağlık güzel bir paylaşım olmuş.Teşekkürler.
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

asof544

mucit23 merhaba bana assmbly ve pbp derleyileri gerekli ve son sürümleri nereden bulabilirim ücretsiz varmı?yada daha düşük ücretli_?

xoom

Mantık olarak anladım fakat CCS ye o kadar kolay adapte edemiyorum..Ben Display sürmek istemediğim için displaydeki harf ve rakam karşılıklarının yerine bireysel tek tek yanacak ledlerin konumlarını girmem gerekiyor sanırım..
CCS C de şöyle dediğim işi yapacak bir örneğe ulaşmaya çalışıyorum..
1.sütün 1.satırdaki ledi yakabilen bir kod öbeği..Pic'in ne olduğu önemli değil.

ete

#7
Bir şey ekleyeyim.
ADDRESS = $09 Decode Mode Adresi               VERI=$00
komut satırını bu şekilde kullanırsanız her bir rakamın 7 segment karşılığını kendiniz lookup tablosundan bulup entegreye veri olarak vermeniz gerekiyor. Ancak aletin kendi sayı dekoderide bulunmakta olup $09 adresine VERI=$FF verirseniz entegre kendi içindeki sayı dekoderini kullanır. Böylece lookup tablosuna gerek olmadan direk sayıları bu şekilde de yazdırabilirsiniz.

XOOM,
Aslında 7 segment sürmek için yapılmış bu entegreyi kullanarak matrix led de sürmek mümkün. Senin şekline bakacak olursak,
birinci sütun (Y0) ve birinci satır(X0) daki ledi yakmak için şu komutları vermen gerekiyor;
Programın baş kısmına yani başla satırından evvel ön yükleme değerlerini vermen gerekiyor;
ADR = $0C : DATAREG = $01   : GoSub MAXYAZ 'On/Off Register.
ADR = $09 : DATAREG = $00   : GoSub MAXYAZ 'Decode register     '00 verirsen sen 7 segment değeri bulacaksın FF verirsen kendi veriyor
ADR = $0A : DATAREG = $07   : GoSub MAXYAZ 'Intensity register.
ADR = $0B : DATAREG = $07   : GoSub MAXYAZ 'Scan-limit register.
ADR = $0F : DATAREG = $00   : GoSub MAXYAZ 'Test mode register (all digits on, 100% bright)


sonra ledleri kontrol ettiğin kısımda;
'
ADR=1 :DAT
AREG =0: GoSub MAXYAZ
ADR=2 :DATAREG =0: GoSub MAXYAZ
ADR=3 :DATAREG =0: GoSub MAXYAZ
ADR=4 :DATAREG =0: GoSub MAXYAZ
ADR=5 :DATAREG =0: GoSub MAXYAZ
ADR=6 :DATAREG =0: GoSub MAXYAZ
ADR=7 :DATAREG =0: GoSub MAXYAZ
ADR=8 :DATAREG =128: GoSub MAXYAZ

yazman yeterli.
Data verme kısmıda şu şekilde olacak;
MAXYAZ: 
SHIFTOUT DIN,CLK,1,[ADR,DATAREG]
PulsOut LD,1
Ben basic de yazdım sen istediğin dile göre değiştirirsin artık.

Aslında sol üstten başlayıp sağ alta kadar (\) şeklinde bir çizgi oluşturmak için şu komutları vermen yeterli.
Bunlara göre kendin ayarlarsın artık,
ADR=1 :DATAREG =64: GoSub MAXYAZ
ADR=2 :DATAREG =32: GoSub MAXYAZ
ADR=3 :DATAREG =16: GoSub MAXYAZ
ADR=4 :DATAREG =8: GoSub MAXYAZ
ADR=5 :DATAREG =4: GoSub MAXYAZ
ADR=6 :DATAREG =2: GoSub MAXYAZ
ADR=7 :DATAREG =1: GoSub MAXYAZ
ADR=8 :DATAREG =128: GoSub MAXYAZ

Genel mantık şöyle;
ADR denilen şey senin sütun numaran oluyor. ADR=1 en sağdaki sütun oluyor. ADR=8 ise en soldaki sütun oluyor.
DATAREG değeri ise senin satırdaki led numaranı veriyor.
DATAREG=64 olursa en  sağdaki led (sütun-8)
DATAREG=128 olursa en soldaki led (Sütun-1) oluyor.
Ledlerin sütunlara göre alacağı değerler şöyle 128-1-2-4-8-16-32-64  bu dizilişi senin satır ledlerinin dizilişine göre verdim.
Umarım anlarsın.
Ete

xoom

Yardımlarınız için gerçekten çok teşekkürler fakat gerçekten basicteki kodların çalışma mantığını anlayamıyorum. neresi döngü nereden nereye dallanıyor nasıl işliyor kodlar anlayamıyorum o yüzden çevirme kısmını yapamıyorum. Ama anlattıklarınızdan bu işin kolay olduğunu anladım..
Biraz çabalarsam olucak sanırım..Ben birşeyler yaptıkça buraya eklerim CCS C den anlayan birileri yanlışımı daha çabuk görebilir sanırım.

ete

Basıc de gosub ile gidilen yer ccs de fonksiyon olarak çağrılır. Görmen gereken tek şey bu.
Ccs de SPI kullanımına ait bir fonksiyon olsa gerek. Bunu iki parametreli olarak ayarlayacaksın. Parametrelerin ADR VE DATAREG olacak. Bütün mesele bunu yapabilmen. Yaptıktan sonra örneğe bakıp gosub maxyaz yazan yerde sen Maxyaz(adr,datareg) diyeceksin hepsi bu.
Kusura bakma Ccs kullansam ona it kodu da verirdim ama mantık vermekten öteye gidemiyorum maalesef.
Ete

fatih88

Kardeşim sana yardımcı olma babında c kütüphanesini oluşturduk bir sorunu Çözemedin 8 dijite 1 yaz diyorum  ama 1i ter olarak yazıyor konuda çözersek yolların sana iyi çalışmalar
bilgi paylaştıkça çoğalır!!

www.fayelektronik.com

Powered by EzPortal