KAYAN YAZI SATIR TARAMA

Başlatan kalman, 22 Kasım 2005, 23:26:14

kalman

Board da okuduğum bir çok yazıdan sonra bende Kayan yazıyla ilgili bir şeyler yapmaya karar verdim.
Arkadaşların verdikleri bilgilerden yola çıkarak Satır taramada
karar kıldım ve derleyici olarak CCs C kullanmayı uygun gördüm. Sutunlari 74hc595 ile sürmeye karar verdim tarayıcı olarak 74ls138 kullandım. İşlemci olarakda pic16f877.

Bir çok ufak tefek denemeden sonra tek karakter yazdırıp sağa sola kaydırmak pek zor olmadı fakat ekranda gözüken karakter sayısı arttıkça durum değişti ve bu yüzden ccs C olan hazır fonksiyonla denedim ufak bir kaç değişiklikle 10 - 15 karakteri soldan sağa kaydırdım fakat yazılar her karakter arttığında yavaşladı çünkü ekranda olmayan
karakterler aslında 74hc595 lere gidiyor buda yavaşlamaya sebep oldu.

Bu konuda İnternetde oldukça açıklama mevcut ama hepsi İnglizce. Board da bulunan tüm Linkleri inceledim programlar yabancı anlaması zor.

Bunu tek tek pixel usulu hesaplamak mümkünmü !!   X ve Y olarak her nokta(led) hesaplansa
ve hesaplanan değer daha küçük bloklara bölünüp 74hc595 lere yollansa istediğimiz şekilde sağ sol yukarı aşağı yazılar kaymayı sağlanabilir sanıyorum

sonuçta illede matematik,  arkadaşlar bu konuda birisi çıkıp  herkesin anlayacağı dilde anlatsa
gerçekten faydalı olur düşüncesindeyim  yabancı  Linkleri vermek bence faydalı değil.


Cevaplarınız önerileriniz nelerdir ?????



herkese başarılar


saygılarımla

Erol YILMAZ

Alıntı yapılan: "kalman"fakat yazılar her karakter arttığında yavaşladı çünkü ekranda olmayan karakterler aslında 74hc595 lere gidiyor buda yavaşlamaya sebep oldu.

595 üzerinden seri aktarım yaparken en sonuncuya ulaşmak için verinin bütün 595 ler üzerinden geçmesinden mi bahsediyorsun ???

kalman

@Erol,
Evet aynen öyle, her yeni karakter oluştuğunda clock sayısı artıyor
buda yavaşlama sebebi.
Bence clock sayısı sabit kalmalı mesala 80 bitlik bilgiyi önce parçalara
ayırıp işleyip sonra tekrar parçalar halinde 74hc595 lere yollamak.

Bunalmışın bir yazısında iki tane dört bitlik  veriyi yanyana getirildiğini
okumuştum ama byte ları nasıl yanyana getirilebilir bu konuda  :roll:  arkadaşlardan yardım bekliyorum hazır programlar yerine kendimiz
bunu yapmalıyız görüşündeyim

Erol cevabın için teşekkürler

herkese başarılar diliyorum

Saygılarımla

Erol YILMAZ

Kalman,
Yaptığın kayan yazının boyutu nedir?
595 lerin birkaç cinsi olmakla beraber en hızlı PIC le gönderdiğiniz bilgiyi bile alabilecek hızda olacağını tahmin ediyorum. Yani 595 e seri bilgi gönderen fonksiyonu iyice bir inceleyip 8 bit için kac us sürüyor? sorusuna cevap bulsanız... problemin kaynağını bulabiliriz. Saat periyotlarını küçültebildiğiniz kadar küçültün mesela. Hızda illa ki fark olacaktır.

XX_CİHAN_XX

Alıntı yapılan: "kalman"
her yeni karakter oluştuğunda clock sayısı artıyor
buda yavaşlama sebebi.
Bence clock sayısı sabit kalmalı mesala 80 bitlik bilgiyi önce parçalara
ayırıp işleyip sonra tekrar parçalar halinde 74hc595 lere yollamak.

Bunalmışın bir yazısında iki tane dört bitlik  veriyi yanyana getirildiğini
okumuştum ama byte ları nasıl yanyana getirilebilir bu konuda  :roll:  arkadaşlardan yardım bekliyorum hazır programlar yerine kendimiz
bunu yapmalıyız görüşündeyim
herkese başarılar diliyorum

Saygılarımla
Benim ilk yaptığım kayan yazıdaki hatayı yapmışsın arkadaşım.Onun çözümü basit.Yanlız şunu belirteyim.ben programı asm de yazmıştım ve olayı şöyle çözmüştüm.Bikere clock sayın daima sabit olmalıdır.Taramayı yataydan satırtaraması olarak yapman gayet mantıklı.Datalarıda dikeydeki 595 lere seri olarak göndericeğine göre şöyle birşey yapmalısın.Öncelikle ekranın tamamını registerlerde saklıyacan mesela 80 stunluk bir kayan yazı yapmak istiyorsan 80 tane register açıyorsun ve ekrana gitmesi gerekecek karakterleri bu önce registerlere gönderiyorsun tabi bit bit gönderiyorsun ver göndermeden sonra registeri rlf yapıyorsun ve bir sonaki ekran datasını (bitini) gönderiyorsun.Daha sonra panoya bir gönderme yapıcaksan bu registerleri panoya gönderiyorsun.
Bu register olayının çeşitli avantajlarıda var.O an ki ekran datasını resmen yedeklemiş oluyorsun buda o data üzerinde oynayarak ekranda çeşitli efektler oluşturmanda büyük kolaylık sağlıyor.Biraz karışık oldu ama umarım anlatabilmişimdir.
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

kalman

@Erol
@ XX_CİHAN_XX,
Verdiğiniz cevaplar mantıklı Erol senin yazdığını bende düşünmüştüm sonra vazgeçtim.
XXcihanxx asm ile aram iyi değil fakat senin yazdıkların ccs c ile sence nasıl yapılabilir ???
Anladığım kadarıyla diyelim 100 sutunluk bir devrede 100 tane registerden bilgiyi 74hc595 lere
yolluyorsun o halde tüm ekran için 100 x7satır  700 registere ihtiyaç var ve bunlar sırasıyla teker teker
dizi halindemi her satır için  74595 lere yollanıyor.

kısaca bu registerlerin sayesinde tüm ekranın tamamını yenisi gelene kadar hafızada tutabiliyoruz.


Bununla ilgili ufak bir örnek code verebilirmisin asm olsa farketmez en azından mantık açısından yararı olur.

XX_CİHAN_XX,verdiğin cevaplar için teşekkürler  sanada Erol.


herkese başarılar diliyorum

Saygılarımla

XX_CİHAN_XX

@kalman
Benimde ccs c ile aram kötü asm ile iyi ama elimden geleni yapayım.Asm için konuşursak 100x7 lik bir kayan yazı panosunda 700 tane led olduguna gore ve her ledın konumunu bir registerde saklamak gerektiğine göre 700/8 kadar register acılması gerekır.buda 88 adet register demektir.yani 100x7 lik bir kayan yazı için 88 tane register açman yeterlidir.Bu gibi durumlarda benim tavsiyem kayan yazının uzunluğunu 8 in katlarında belirlemektir.örneğin104x7 lik kayan yazıdada 88 register yeterli olmaktadır.
Neyse gelelim bu registerlerin kullanılışına, bununla ilgili kod su an elimde yok ama sana genel mantığını anlatayım.Olay şu, ccs c kullanıyorsan bir dizi oluşturmanı tavsiye ederim. int data[7][13]; diyerek 104x7 lik bir kayan yazı panosu için gerekli registerleri açmış oluruz.(her register bir byte olduguna gore 13*8=104 olur.satır içinde 7 tane register blogu tanımladıgımıza gore 7x104 register dizimizi boyle oluşturabiliriz.
Akabinde yapıcagımız şey tus takımı yada bilgisayardan panoya gonderdıgımız dataları eproma kaydetmektir.Ana program dongusundede eepromu okuyup bu registerlere gondericegımız dataları bit bit kaydedıcegız.daha sonrada bu regısterlerı sırayla panoya gonderıcegız.Panoya gonderme ıslemı gayet basıt.104x7 lik panoda, her satır ıcın 13 regıster gerektıgıne gore yapıcagımız sey su 1. satır 13. regıster ın 7. bıtınden baslıyacaz panoya datayı gondermeye(not: data akısı sagdan sola oldugu zaman gecerlıdır) basılıcaz.ve 1. satır 1. registerin 0. bitini en sona gonderdıgımızde 595 lere 1. satırın serı data send olayı bıtıroy.Sonra 1. satırı yataydan aktif yapıcagız ve bir muddet beklıyecegız.ondan sonra 2 ve 3. satırlara gecıp 7. satıra kadar taramayı surdurecegız.7. satırında gosterme ısı bıtınce ekranda 1 frame lık goruntuyu elde etmıs oluyoruz.Bunu bırkac kez refresh yapıp yeterlı zaman gecıkmesı ve pano guncellemesını olusturduktan sonra bır sonrakı oteleme ıslemı ıcın hazırlık yapıcagız.Yanı ekran regısterlerını bır defa daha rotate yapıp aynı ıslemlerı tekrarlıyacagız.Sistemi bu şekilde dongu ıcıne sokman lazım.Ve bu donguye her yenı karakter ekleyecegın zaman eepromdan okuma yapıp yenı datayı regısterlere shıft edeceksın.Keske elımde hazır kod olsaydı ama yok ıste onceden ben asm de bu anlattıgım sekılde bır kayan yazı programı yapmıştım ve calıstırmıştım bu konu uzerınde bıraz kafa yorarsan sende halledersın gıbı gelıyor.
Başarılar...
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

kalman

@XX_CİHAN_XX
Ellerine sağlık olayı detaylı anlatmışşın örnek bir kod fena olmazdı
neyse ben her led için bir register düşünmüştüm önemli değil asıl beni
hayrete düşeren board da bu kadar bu konu işlenmişken bu kadar az
cevap gelmesi.

herkese başarılar diliyorum

Saygılarımla

mcan

merhabalar ben bu adreste yapılan olayı anlamadım
kayan yazı
595 in storage regiteri nedir burada ne amaçla kullanılmış picden sadece 3 pin kullanmış yatayda dikeyde 595 ler ile tarama yapmış sanırım bu devreyi anlatabilecek olan varsa çok iyi olur

aYe

Selam,

@mcan

595'in registerları latch özelliktedir yani attiğin data yenisini atana kadar yada entegreye reset verene kadar orda kalır. Sanıyorum bu açıklama olayı anlaman için yeterli gelecektir. Olmadı dersen daha detaylı anlatirim.

Gelelim konuyla ilgili genel bir tavsiyeye;

Kayan yazi tipi uygulamalarda karakter boyları sabit en'leri değişkendir. Bütün karakterleri 5*7 düşünmek hem görselliği bozacak hemde ekrana daha az karakter sığmasına neden olacaktır. Örneğin "i" için 3*7 de olabilir. Yani bu durumda 7 sabit sayımız olduğuna göre, karakterleri rom'da yatık olarak depolamalı, çıkışa vericeğimiz zaman ise bitsel rotate işlemine tabi tutmak durumundayız. Yazılım olarak iş biraz karışır ancak sonuç harikadır. Hem görsel açıdan hemde ekrana sığdırabildiğiniz harf sayısı artıcaktır.

İyi çalışmalar...
Dünyada iki şey sonsuzdur. İnsanın aptallığı ve evren. Ancak ikincisinden o kadar emin değilim... (Einstein)

emrahmrcn

bendeki smd tip 74HC595 leri 10mhz e kadar çalıştırabildim.Bunun üstünde olursa sorun olabilir belki
Benim yaradılışımda bir ayrıcalık varsa o da TÜRK olmamdır. M.K ATATÜRK

mcan

Alıntı yapılan: "tatlisukurnazi bana"Selam,

@mcan

595'in registerları latch özelliktedir yani attiğin data yenisini atana kadar yada entegreye reset verene kadar orda kalır. Sanıyorum bu açıklama olayı anlaman için yeterli gelecektir. Olmadı dersen daha detaylı anlatirim.

hocam ben biraz üzerinde düşündüm isisde imulasyon yapmayıda denedim ama yapamadım anlamadım ;)  ,sen bi zahmet anlatırmısın,o hepsine ortak bağlanan 595 yukarıdan/aşşağı tarama yapmak içinmi konulmuş?isisde yaptığım simuladyonda 595 birinci veriyi direk çıkışa yansıtmıyor butona 2 kere basınca çıkışa 1 veriyor butona dahada basarsam 6. pinde ve seri çıkış pininde aynı anda görüyorum ondan sonra 7. pinde görüyorum ikinci 595 i bağlayınca başlangıçdaki gecikmeyi anlamış gibi oluyorum çünki düzenli oluyor ama başlangıçtaki gecikmeyi koymayıp 7. pinden sonra seri çıkış pinine neden vermediğini düşünüyorum...birde 595 in datasheetinde 3. sayfadaki fonksiyon tablasonu pek anlamadım
datasheet
devreye dönersek burada seri giriş önce ayrık duran 595 e giriyor ozaman en son veride bu ayrık duran 595 e yükleniyor ?tatlisukurnazi hocam sen anlatı ver lütfen benim kafam karıştı :roll:

emrahmrcn

74HC595 için çalışma şöyle oluyor;

SH_CP (clock) darbesi her pozitife çekişte DS(data) kolundaki dataları içeri alır.(Yani datayı DS bacağında tut içeri grimesi için clock darbesi uygula).
ST_CP (aktifleme) ise pozitife çekildiği zaman içeri alınmış dataların uçlarda görünmesi sağlanır.

Bu çalışma şeklinde data latchlenir(tutulur).Yani uçlarda görünen bilgi yeni bilgi gelinceye kadar tutulur.

MR ucu pozitife , OE ucu negatife bağlı olmalıdır.
Benim yaradılışımda bir ayrıcalık varsa o da TÜRK olmamdır. M.K ATATÜRK

mcan

buttonlarla denediğimde oluyor dediğiniz gibi ama pic için şunu yazdım olmadı,kodda bi hata var ama nerede :?: zannetmiyorum pek ama çok hızlımı geliyor acaba?
8 ledli deneme

aYe

Selam
Alıntı yapılan: "mcan"devreye dönersek burada seri giriş önce ayrık duran 595 e giriyor ozaman en son veride bu ayrık duran 595 e yükleniyor ?tatlisukurnazi hocam sen anlatı ver lütfen benim kafam karıştı :roll:

Hocam bahsi konu olan 595 ttl entegresi seri giriş paralel çıkış latch'dir.
Latch nedir; Girilen data degişmediği sürece veya reset atılmadığı sürece çıkışını koruyan lojik yapıdır. Her bir pin için data kitlemek ve data kaydırmak için ikişet adet flip-flop itiva eder.
595'in özellikleri; 9 bit seri girişli paralel çıkışlı latch

Pinler;

MR= Master Reset = Ana Sıfırlama = Bütün flip-flop'larin sifirlanmasi
Bu pin lojic 0 iken sifirlama aktif hale gelir. 595'için tek sifirlama yöntemi bu olmadığı için kullanılmadığı takdirde yüksek seviye tutulmalıdır (logic 5v) Seri olarak 9 tane 0 bilgisi ve takip eden latch clock'da reset ile aynı sonucu verecektir.

OE= Output Enable = Çıkış izni = Latch'deki bilginin çıkış pinlerine geçişine izin verir. Bu pin logic 0 iken latch değerleri çıkıştadır. Bazı durumlarda çıkışların kapatılması gerekmiyorsa bu pin logic 0 değerde tutulmalıdır.

DS=Data Shift= Data girişidir.

SH_CP=Shift Register Clock= Bu pinin her 1-0 geçişinde DS'pinindeki bilgi shift register Q0...Q7 yönünde bir bit kaydırılarak Q0'in arkasında kalan shift register flip-flop'unda konumlanır. Q7' çıkışı eğer kaskat (kaskat durumunda Q7' çıkışı bir başka 595'in yada benzer entegrenin giriş bilgisi olarak kullanılabilir) bir bağlama söz konusu değilse Q8 olarak düşünüle bilir. Ancak Q8 olarak kullanıldığında diğer Q0-Q7 çıkışlarından farklı olarak latch clock kontrolsüz daimi çıkış vericektir. ST_CP ve SH_CP pinleri datanın kayarken(veya oluşturulurken) aynı anda çıkışta görünmesi sorun olmayan tasarımlarda birleştirilir. Bu durumda Q0-Q7 ve Q7'( Q8 ) birbirinden farksiz 9 çıkıştır. Tasarım esnasında dikkat edilmesi gerekir.

ST_CP=Stroge Register Clock= Bu pinin her 1-0 geçişinde Shift register üzerindeki 8 bit data çıkış register'ina aktarılır. Shift register üzerindeki datalar bu durumdan sonra değer degiştirmiş olsa dahi çıkış artık değişmez.

Kaskat bağlama;
Bir çok 595 ardı sıra bağlanabilir. Bu durumda bir önceki 595'in Q7'( Q8 ) çıkışı ardı sıra gelen 595'in data girişi olarak kabul edilir. Bu durumda çıkış sayısı (( 5985 sayısı x 8 )+1)'dir. +1 en sonda kalan 595'in Q7'( Q8 ) çıkışıdır. Eğer kullanılmaz ise önemsiz data bu pinden düşer. Kaskat kullanımda tüm SH_CP pinleri birleştirilmek zorundadır. Diğer pinler tasarımdan tasarıma değişik şekillerde kullanılabilir.

Sizin devrenizdeki kullanımı;
Mcu'dan data çıkış sıralamasına göre bit olarak 30'cu sütünün bilgisi...1'ci sütün bilgisi+ boş 1bit + 7bit satır bilgisi şeklinde tasarlanmış.

Isıs konusunda birşey diyemem o tür programları mümkün olduğunca kullanmıyorum.

Bu arada baya yorgunum yazım hatası yaptıysam yada açıklayıcı olamadıysam kusura bakmayın.

İyi çalışmalar...
Dünyada iki şey sonsuzdur. İnsanın aptallığı ve evren. Ancak ikincisinden o kadar emin değilim... (Einstein)