avatar_ete

PIC Basic Ders-13 (Multiplex Çalışma)

Başlatan ete, 28 Ağustos 2011, 16:25:50

ete

Sütun tarama ila satır tarama dataları farklıdır. Bahsi geçen H dataları sütun taramaya göre hazırlanmış sen de F harfi datalarını aynı mantıkla hazırlaman gerekir.
Konu hakkında yeni bilgileri ve  seninbeklediğin Sütun tarama yöntemine ait dataları aşağıdaki linkte geçenlerde yaptığımız çalışmada görebilirsin.

http://etepic.com/index.php/topic,836.msg8821.html#msg8821

Ete

sinancnc

#16
Ete hocam elinizde veya sitede basic dili ile yapılmış tuş takımı tarama örneği varmıdır..Teşekkür ederim..!
Paylaşmayı seven insan toprak olup gitmez. Bir şeyler bırakır...!

ete

Sitede olması gerek diye hatırlıyorum. Bir projenin parçasıdır muhtemelen. Yoksa koyayım.
Ete

sinancnc

Ete hocam bu dersi ben bulamadım eklerseniz üzerinde çalışmak istiyorum..
Paylaşmayı seven insan toprak olup gitmez. Bir şeyler bırakır...!

ete

Bir örneği ilişikte veriyorum. Üzerinde çalış bakalım.
Aslında Ders-8 de bu konuyada değinmiştim. O derside okumanda yarar var.
http://etepic.com/index.php/topic,19.0.html

Biraz da bilgi vereyim.  Tuş takımı kullanmanın prensibi matrix şeklinde bağlı olan tuşların hangisine basıldığını tespit ederek ona ait tuş değerini değişkene vermeye dayanır.
4 dikey ve 4 yatay hattan oluşan bir tuş takımında yataylar yada dikeyler giriş pini olarak ayarlanır.
Giriş olarak ayarlanmış pinler genelde pullup olarak HIGH da beklerler. Bu nedenle tuş takımı PORTB ye bağlanır ise dahili pullup dirençlerinden yararlanmak mümkün olur.
Çıkış pinlerinden birisini LOW yaparak giriş pinlerinden hangisi LOW olmuş ona bakmak gerekir. Zira tuşa basılınca dikeylerden birisi ile yataylardan birisi tuş üzerinde kısa devre olacak ve High da bekleyen giriş pini low alacaktır.
Böylece hangi hat LOW olmuş ise oradan hangi tuşa basıldığını anlayabilirsin.
Benzer şekilde bütün çıkış pinlerini sırası ile low yapıp girişlerden birisi low olmuşmu diye bakman ve olan var ise ona göre işlem yapman gerekiyor.
SOn olarak basılan tuşların birleştirilmesi mantığınada biraz değineyim. Pek çok kişi bu konuda sıkıntı çekmektedir.
Halbuki 10 tabanına göre sayı sistemi bize bu konuda yardımcı olmaktadır. Başlangıçta SAYI=0 dır.
1 tuşuna basılınca TUS=1 olacaktır. Bunu Sayıya aktarmak için;
SAYI=SAYI*10+TUS  şeklinde formül kullanıyoruz.
SAYI=SAYI* 0 +1 =1 olur.
Şimdi, 2 tuuna basalım   SAYI=1*10+2=12 olacaktır.
Şimdi 3 tuşuna basalım, SAYI=12*10+3=123 olacaktır.
Bu şekilde sayı değişkeninin müsaade ettiği değere kadar sayı değerini büyütmek mümkündür.

Ete



sinancnc

Ete hocam Çok İyi bir örnek olmuş olayı gayet iyi anlatmışsınız teşekkür ederim. Lcd 5. Nolu bacağı diğer uygulamalardan farklı olarak gnd ye bağlı bunun özel bir sebebi varmıdır eskiden pice giriyorduk...
Paylaşmayı seven insan toprak olup gitmez. Bir şeyler bırakır...!

umiter

#21
Alıntı yapılan: ete - 26 Aralık 2012, 12:47:35
Anladığım kadarı ile 32 x 32 lik matriks yapacaksın.  Bu durumda sütunları sürmek için 4 adet 74HC595 yeterli olacaktır.
Sorun satırların sürülmesinde orayada 4 adet 74HC595 kullanırsan olabilir diye düşünüyorum.
Harfi oluşturacak pixelleri 32x32 lik matrikse göre düzenlemen gerekecek . Bu durumda elinde, her satır için 4 byte lık bir sütun bilgisi olacak. Bu bilgi her satır için ayrı düzenleneceği için aynı bilgiden toplam 32 adet olması gerekecek.Kısaca bir harf için 32 x 4=128 byte kullanman gerekecek.
Tarama işine gelince. Birinci satıra ait satır bilgisini sütundan vereceksin. 4 adet sütuns üren 595 lere satır bilgisini verip satırları süren 595lerden ilkini aktif edip ilk satır bilgisi için 1 yollayacaksın. Böylece ilk satır komple aktif olacak. Ancak bütün sütunların ledlerini bu satır bilgisi süreceği için 595lerin peşine ayrıca ULN serisinden bir entegre bağlamanda yarar var zira 595 yeterli akımı sağlamaz.
Sırası ile 32 adet satırı bu şekilde aktif edip her satırın bilgisini yukarıdan sütun registerlerinden vermen gerekiyor.
Tabiiki mümkün olan en büyük hafızalı ve en hızlı çalışma frekansına sahip bir işlemci kullanmanda yarar var.

Ete

Çalışmayı 16F877A ve 74LS595 ile SPI yapmayı düşünüyorum, bu noktada SPI ile kaydırma işlemi hakkında fırsatınız olursa biraz bilgi verebilirmisiniz ?
Aşağıda bu çalışmaya ilişkin temel bir kodum var 16X16 ( (8x8 - 4 adet) matrixLED için kodu toplayabilmem için ne önerirsiniz ?



' Name        : 16x16.pbp
' Compiler    : PICBASIC PRO Compiler 3.0.6.1
' Assembler   : PBP3
' Target PIC  : PIC16F877A
' Hardware    : Experimenter Board
' Oscillator  : 20MHz XTAL
' Keywords    : SPI
' Description : LED Matrix 1color



KOD YENİDEN OLUŞTURULUYOR...




Saygılarımla.
Bilgi elde edilmesi zor,  tüketilmesi kolay bir bulamaçtır.

ete

Ümiter,
Bu güne kadar SPI portunu hiç kullanmadım. Gerek olmadığı için kullanmadım.
Zİra kullanabilmek için bir sürü formalite gerekiyor. Biraz da tembellik edip kullanmadım diyebilirim.
Shift komutlarını kullanarak yapmak bana daha kolay geliyor.
Bir ara incelemiştim ama unutmuşum . Yeniden baktım da bana uğraşmayacak kadar komplike geldi.
Data sheet her şeyi açıklıyor aslında.
• Serial Data Out (SDO) - RC5/SDO
• Serial Data In (SDI) - RC4/SDI/SDA
• Serial Clock (SCK) - RC3/SCK/SCL/LVDIN
Bu pinleri kullanmak zorundasın.
İŞlemciyi Master modunda kullanman gerekiyor. Bunun için  SSPCON registerini kullanacak ve portu enable yaptıktan sonra mode seçiminide buradan yapacaksın. Ayrıca SSPSTAT registerinin 6-7 bitlerini master mode için ayarlayacaksın.
SSPBUF registeri gönderilecek bilginin verildiği register oluyor. Bu registere bilgi yazılır yazılmaz transfer işlemi otomatik başlıyor. Transferin bitip bitmediğini SSPCON.7 biti ile anlaşılıyor. Aslında bu çakışma ver mı yokmu test biti. Başkada bir şey göremedim maalesef.

En iyisi programı biraz geliştir sonra takıldığın yerde beraber bakalım. Bende öğrenmiş olayım böylece.

Ete



umiter

#23
Amacım 74LS595 ile n kadar 8x8 dotmatrixLED i sürmek, bir piclede mesajı göndermek, daha az malzeme kullanarak verimli bir sonuç elde etmek. 4 satırda 4 sütünde bulunan toplam 16 adet dotmatrixLEDe bilgiyi göndermek.
Gerektiğinde 4 satırı yada sütunu ayrı ayrı gerektiğinde tüm satır ve sütünların birleşimde daha büyük punto ve resmi oluşturabilmek.

Bu noktada 74HC595 ile 16 dotmatrixlede bilgi akışını sağlayabilen bir döngüyü paylaşabilmeniz mümkünmü ?

Saygılarımla.
Bilgi elde edilmesi zor,  tüketilmesi kolay bir bulamaçtır.

ete

Ümiter,
Bu şekilde bir döngü oluşturmak mümkün değil. Devre şemasını görüp ona göre mantık oluşturmak gerekmezmi sence?
Anladığım kadarı ile 32x32 lik bir led  matrix oluşturmuşsun.  Biraz sesli düşünelim istersen.
Bu ledler nasıl sürülebilir?
Metod-1:
32 adet sütun için toplamda 4 adet 74HC595 kullanırsın. bu durumda 32 adet satırı da yine 4 adet 74HC595 ile sürebilirsin. Tabiiki 32 adet satırın teker teker taranması epeyce zaman alır. her birine 1 ms zamanversen 32 ms ederki bu taramayı göz algılayabilir.

Metod-2:
Sütunları 2 guruba ayırırsın. yukarıdan aşağıya 16 tanesini bir gurup 74HC595 ile diğer 16 taneyide ikinci bir gurup 74HC595 ile tararsın. Böylece tarama işi biraz daha hızlanır. Bana kalırsa bu metodu kullanmalısın.
Satırda bir değişiklik gerekmez.

Metod 2'yi kullandığımızı düşünürsek, sistem şöyle çalışacaktır.
İki ayrı sütun şeklinde sürme yapılacağı için üst guruba Sütun-A , alt guruba da Sütun-B diyelim.
- Matrix de görüntülecek bilginin üst sıra bitleri Sutun-A ya , 17 sıraya ait bitler ise Sütun-B ye verilir. Satır-1 ve Satır-17 aktif edilir. 1 ms beklenir ve satırlar yeniden kapatılır.
- Bu sefer 2. bitleri Sütun-A ya , ve 18. sıra bilgiside Sütun-B ye verilir ve 2 ile 18. satırlar aktive edilir. 1 ms beklenir. ve satırlar kapatılır.

- bu şekilde üst gurubun en sonuna (16. satıra) ve alt gurubun en sonuna (32. satıra) kadar işleme devam edilerek  yeniden başa dönülür.

Prosedür böyle olmalıdır.
Başka da bir şey aklıma gelmiyor.

Ete



umiter

ozaman sesli düşünmeye devam edelim..

4 tane 8x8 dotmatrix 2x2 şeklinde duruyor, 11,12,21,22 kodları ile tanımladım. Bu grupta A harfini basmak istediğim zaman

11 e : 0x7F,0x7F,0x7F,0x78,0x78,0x78,0x78,0xfc
12 ye : xFe,0xFe,0xFe,0x1e,0x1e,0x1e,0x1e,0x3f
13 e : 0x1F,0x3F,0x7F,0x7c,0x78,0x78,0x78,0x78
14 e : 0xF8,0xFC,0xFE,0x3e,0x1e,0x1e,0x1e,0x1e gönderince tümü A harfini gösteriyor.


B C D E harflerini sırası ile tüm alanda sil ve göster şeklinde gönderdim, burada kurgulamaya çalıştığım 16/32/64..../248 sütündaki ledi kaydırmak.
yani ekranda A varken B nin kayarak gelmesi, bu işlemi yapmak için kaydırma için gerekli kodu üretmenin yolunu bulmaya çalışıyorum.

Dolayısıyla yöntem olarak SPI ile her bir dotmatrixe ayrı ayrı 8 biti göndermeyi düşünüyorum.




Bilgi elde edilmesi zor,  tüketilmesi kolay bir bulamaçtır.

ete

Yazı kaydırma işi çok fazla beyin jimnastiği gerektiren bir iş. Çok iyi bir canlandırma hafızan olması gerekiyor.
En sola A harfini koyduktan sonra en sağdaki sütuna gelecek harfin satır datalarının ilk bitini yerleştirmen gerekir.
Gözün algılayabilmesi için aynı yerde 30-50 defa gösterim yapar ve sonra bir bit sola kaydırırsın. Peşinden en sağdaki sütuna bu seferde satır datalarının 2. bitleri gelir. Bu mantıkla yürürsen ekrana giren harf yavaş yavaş kayarak yerine gelir. Yada hızlı kaydırırsın o seninbileceğin iş. Ama dikkat A harfine ait dataları kaydırmıyoruz. O zaman ne yapmak lazım.?
Döngü A harfinin datalarının bittiği sütundan başlayıp en sağdaki sütuna kadar gelecektir. Bu aralık kendi içinde kaydırılacaktır yalnızca.  Kaydırma işlemini sağlıklı yapabilmek için bütün dataların dizi değişkenlerine yerleştirilmesi gerekir. Aksi halde çok fazla vakit alır ve çok kod yazarsın.

Ete

umiter

Evet çok haklısınız, bunun için eprom kullanmayı planlıyorum, artık oturup şemayı çıkartıp parçalı kodları bir çatı altında birleştirmeye çalışayım, sizede çok teşekkür ederim.

Saygılarımla.
Bilgi elde edilmesi zor,  tüketilmesi kolay bir bulamaçtır.

umiter

#28
ETE Hocam,

16x16, 24x24 ve 32x32 lil dotmatrixler üzerinde çalışmam devam ediyor, dotmatrixleri sürmek için kullanabileceğim entegreler TPIC6B595 ve 74154, 74HC595 ve ULN2803 ile kullanmayı şimdilik kenara bırakmış bulunmaktayım.

Sizce TPIC6B595 ve 74154 entegrelerinden hangisi daha fazla parlak yakmayı ve kayan metni titretmeden ilerletmeyi sağlar ?

Saygılarımla.
Bilgi elde edilmesi zor,  tüketilmesi kolay bir bulamaçtır.

ete

TPIC6B595 teorik olarak 74HC595 in çıkışına ULN2803 bağlanmış halidir.
Yani girişten HIGH verdiğin zaman çıkış pini girişi ters çevirerek verir verdiği akım pin başına 500 ma kadardır.
TPIC kullanınca mecburen display olarak ortak Anot kullanman gerekir. Programda değişiklik gerekmez. Kodlar gerekirse 74HC595'e göre hazırlanır ama devrede TPIC + Ortak anot kullanılırsa aynı kodlarla sistem çalışır.

Parlaklık farklı bir olay. Ledlere yeterli akımın verilmesini ve ledlerin yeterince yanık kalmasını sağlayarak parlaklık sağlayabilirsin.
Bunun için elbette TPIC daha uygun gözüküyor. Birazda programı hızlandırırsan istediğini elde edersin.

Ete

Powered by EzPortal