avatar_ete

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

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

ete

Multiplex in kelime anlamı kısa bir zaman dilimi içinde birden fazla (çoklu) işlemlerin yerine getirilmesidir. Elektronikle alakasıda daha ziyade gözün görüntü algılama özelliğinin yanıltılarak kullanılan sistemler üzerinedir.

Mutlaka başka alakalı konularda mevcut ama bizim konumuzun dışına çıkmaktadr. Örneğin tek kablodan karşılıklı haberleşme de bir multiplex çalışmadır . Multiplex çalışmada gözün görüntü algılama kabiliyetinden yararlandığımızı söylemiş idik. Insan gözü 16-20 ms den daha kısa sürede görünen nesneleri algılayamaz. Görüntünün algılanıp beyne yollanabilmesi ve o nesneyi görüyor olabilmeniz için nesne 20 ms den daha fazla gözünüzün önünde kalması gerekir. İşte bu özellik kullanılarak çoklu display tarama sistemleri en çok kullanılan yöntemlerden birisidir.


7 segment display sürmenin iki yolu bulunmaktadır. Ya, gösterilecek bilgiyi kendi tampon hafızasında saklayacak olan bir display sürücüsü kullanmak (7447 – 4511 ) gibi. Bunlara ayrıca 74595 gibi shift registerleri de dahil edebiliriz. Yada bir mikro kontrolcü yardımı ile multiplex tarama yaptırıp gerekli bilgiyi zaman paylaşımlı olarak ilgli displaylerde göstermektir.


Display sürücüsü kullanarak bilgi gösterme işine kısaca değindikten sonra esas konumuz olan multiplex tarama sitemlerine geçeceğiz.

huseyin

hocam matrix led lerle ilgi bir proje yapmaya çalişiyorum ama algoritmasini kafamda oluşturamadım
programin senaryosu: 4 girişi olacak ve bu girişteki 1 mi 0 mi bilgilerine göre matriste farkli karekterler görünecek
karekterlerini oluşturdum fakat sütünü nasil taratıp girişteki bilgiye göre satıra data gönderecem çözemedim

ete

Oluşturduğun matrix de, satırlar ve sütunlar var. Satırlarda ortak uçlar bağlı olması gerekir. Ortak katod çalışıyorsan satırdan LOW vermen, Ortak anot çalışıyorsan satırdan HIGH vermen gerekir. HIGH low dediğime bakma LOW olan GND ve HIGH olan ise ledleri kaç volt ile sürüyorsan o voltaj verilmelidir. Aslında Ders-13 de bu konu epeyce detaylı ve anlaşılır anlatılmış durumda ama anlamadın herhalde.

Oluşturduğun karekteri matrix üzerinde görüntülemek için,
- Önce 1. satırda yer alacak bitleri sütundan vereceksin. Sonra o satıra ait ortak ucu aktif edeceksin. Böylece birinci satırda verdiğin bilgiye göre satır bilgisi oluşmuş olacak. Bu bilgi orada en azından 1-2 ms kalmalıki göz onu algılayabilsin.
- Sonra satır ortak ucu iptal edeceksin ve sütundan bir sonraki (2.satır) satır bilgisini vereceksin. Ardından 2. satır ortak ucunu aktif edeceksin. Bu sefer ikinci satırdaki bilgi oluşacak. Bu bilgide orada 1-2 ms süre ile kalacak ve ardından stır ortak ucunu kapatacaksın.
- Sonra 3. satır bilgisini, sütundan verecek ve ardından 3. satır ortak ucunu aktif edeceksin. Böylece 3. satır bilgisi ledlerde görülecektir. Bu bilgide orada 1-2 ms kalacak
Bu şekilde bütün satırları sürersen göz sanki bütün satırlar aynı anda aktif edilmiş gibi bütün şekli görecektir.
Olayın temel mantığı budur.

Ete

huseyin

HOCAM sizin derslerinizi inceleyecek birşeyler yapmaya çalişiyorum matris displaye a portunda ki bilgiye göre sayi gönderecem select case ile yaptim ama
BASLA:
      X=128
      FOR I=0 TO 7
        PORTB=x
        tara=0
       PORTC=SUTUN[I]   ******
        X=X/2
        PAUSE 4
      NEXT
      GOTO BASLA
programin tarama bölümünü anlayamadim neden x =128 oldu , ve sonra x/x2 ye böldünüz,
benim ekledigim programda tara degişkeninin aldigi değere göre sayi bilgisi matrisde görünsün istedim ama yapamadim ** işareti yere örnegin tara yerine dokuz yazidigimda matrix de karakteri görebiliyorum
fakat tara degişkenini yazdigimda olmuyor nerde hata yapiyorum hocam

ete

X=128  eşitliğini binary biçimde yazarsan daha kolay anlarsın sanırım. X=%10000000  .  Gördüğün gibi en sondaki bit HIGH olmuş durumda bunu PORTB=X şeklinde PortB ye verirsen Bit 7 high yapılmış olacaktır.
Döngü içinde X=X/2 şeklinde bir işlem yaptığın zaman ilk bölme sonunda X=128/2=64 olacak yani PortB=%01000000
dah asonraki bölmede X=64/2=32 olacak yani PortB=%00100000  ve bu şekilde devam ederek sırası ile bütün bitler HIGH olarak devam edecektir buna tarama deniyor işte bütün bitleri sırası ile high yapmış oluyorum. Her high yaptığım bir bir sonraki satırı aktif etmiş oluyor böylece. Aynı zamanda sütundan  PORTC=SUTUN  şeklinde sütun bilgisinide verdiğim için şekil matrix üzerinde oluşmuş oluyor. İşin temeli budur.
Sizden ricam işin temelini anlamadan bir program yazmaya kalkışmayın lütfen. Önce işin teorisini çok iyi anlamaya çalışın.
Özellikle kayan yazı yada dotmatrix sisteminde karekter oluşturma mantığını iyice kavramadan bu işe girişmeyin. Sürekli soru sormak zorunda kalırsınız. Aynı şeyleri tekrar tekrar anlatmakta cevap verene eziyet oluyor.
Benim kadar açık yazan da yoktur. Buna rağmen derlerden bir şeyler kapamıyorsanız temel eksikliğiniz var demektir. Kendinizi zorlayın eksiklerinizi tespit edin ve onları bir an önce öğrenmeye çalışın.

Ete


huseyin

hocam temel eksikliğinin farkindayim ve arayiş içerisindeyim nasil doldurabilirim diye
komut satirlarini defalarca gözden geçiriyorum programda ne yapmak istenmiş diye ama göremedigim birçok nokta oluyor siz anlattiktan sonra hmm evet öyle oluyormuş diyorum,  sizin sayenizde küçükte olsa ilerlediğimi farkindayim
ams bundan sonra bu kadar soru ile sizi rahatsiz etmem inş hocam
saygılar

umiter

Merhaba,

8X8 dot matrikleri 4 sağa ve 4 üste olmak üzere 16 adetini sürmek için satır ve sütün tarama için nasıl bir yol izlemem gerekir ? Bu 16 lı gruba bir A harfi göndermek istiyorum. Nasıl yapabilirim ?

Saygılarımla.
##umiter##

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

ete

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

umiter

İliginiz için teşekkür ederim, yazdıklarınızı dikkkate alarak bir çalışma yapmaya çalışağım umarım başarabilirim.

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

umiter

16x16 matriks Ekran Harf Kodu üreticisini hazırlamıştım, işine yarayan olursa indirsin diye linki koydum.

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

cemalkamaci

Ete Hocam selamlar..
Öncelikle bizlere çok faydalı olduğunu düşündüğüm,  PBP ile yazdığınız bu çalışmalar için çok teşekkür ederim.

Ders 13'e ait bir alt konu olan  MULTI01.BAS programında  I değişkenin   BYTE  tipinde tanıtılması sebebiyle
DELAY: isimli gecikme programı, tam olarak istenilen gecikmeyi yapmamaktadır.

DELAY:
      for I=0 to 35000
         PAUSEUS 5
      Next
      RETURN

Buradaki gecikme süresi I  değişkeninin tanımı gereği maksimum 255*5=1275 us=1,275 ms olabilmekte,
bu süre ise buton gecikmeleri için oldukça düşük kalmaktadır diye düşünüyorum.
Selamlar, Kolay gelsin


ete

Haklısın.
Gözden kaçmış bir hata.  Orada bir başka Word değişkeni kullanıp düzeltmek lazım.
Ete

cemalkamaci

Ete Hocam Selamlar

Ders 13'e ait ilk konu olan  MULTI01.BAS programında

         IF SAYAC>999 then SAYAC=0   komutu sonucu olarak, sayma işlemi maksimum 0999 'da biterek

tekrardan 0000'dan saymaya başlamakta ve binler hanesi hep sıfır kalmaktadır.
Gözden kaçan basit bir hata, program üzerinde çalışanların bu durumu göz önünde bulundurmaları
gerekir diye düşünüyor, saygılar sunuyorum.


ete

Aslında PDF dosyasındaki açıklamada doğru değer olan 9999 verilmiş ama her ne hikmetse programda 999 olarak kalmış.
Her halde yazarken düzeltimişim birisini. Her neyse ders kısmında doğru ve insanı düşünmeye sevk eden bir hata bu.
Uğraşan senin gibi doğruyu bulacaktır.

Ete

cemalkamaci

ETE HOCAM SELAMLAR

Ders 13 'e ait Matrix02.bas konusunu  incelerken şöyle bir durumla karşılaştım. H harfi yerine (bu harf düşey eksende simetrik olduğundan, bazı hatalar görülemeyeceğinden) F harfini displayda elde etmek istedim.
F farfine ait bilgiler aşağıdaki gibi.

'sütün bilgisi , satır taramalı sistem
SUTUN[0]=$7C   
SUTUN[1]=$40
SUTUN[2]=$40
SUTUN[3]=$40
SUTUN[4]=$78
SUTUN[5]=$40
SUTUN[6]=$40
SUTUN[7]=$40   

Bu harf için aynı program ve devre çalıştırıldığında,  harf displayda  TERS  çıkmaktadır.
Bunun sebebi ise PORTB ile Matrix display arasındaki sutun bağlantıların ters olabileceğini düşünüyorum.
Saygılar sunarım.

Powered by EzPortal