16F877 port sayısını yetiremedim.

Başlatan akkoyunlu74, 14 Şubat 2011, 20:16:50

akkoyunlu74

Selamlar.

2x32x32 'lik dotmatris display yapıyorum.  (Baştaki 2 rakamı dot matris displaylarin 2 renkli olduğunu ifade etmektedir)

Port sayısını yetmedi; verdiğim resimde ne yapmaya çalıştığımı anlattım.
Sizden gelecek daha  akılcı çözümleri bekliyorum.
Ekranda sırf yeşil, yada sırf kırmızı renk hakim olacak; aynı anda hem yeşil, hemde kırmızının yanacağı durum olmayacak.

Burada bir sorunda Yeşil yanarken kırmızıyı, kırmızı yanarken yeşili nasıl keseceğim meselesi.


74373 latch işimi görür sanırım ama gitti picten bir port daha.
74244 de var aradaki fark nedir? Ayrıca pasif durumda çıkış lojik1 demiş, bana lojik 0 olanı lazım, kısaca burada hangi entegreyi seçeceğimi bilemiyorum, hiç kullanmadım. Birde tasarımda gözünüze çarpan mantık hataları varmı?
74573 entegresi tek uçtan tüm çıkışları kontrol ediyormuş ben bu devrede 74595 i kullanacağım,

Fikirlerinizi bekliyorum, sonuçları buradan paylaşırım.
Teşekkürler, çalışmalarınızda başarılar.



[IMG]http://img3.imageshack.us/img3/2964/dotmatrisjpeg.jpg[/img]

Uploaded with ImageShack.us

akkoyunlu74

http://www.maxim-ic.com/datasheet/index.mvp/id/3376


maxim firmasının MAX7300 diye malzemesi var. Tam olarak ne işe yaradığını bilen varmı? Tarama mantığının neresinde kullanılabilir?

Andromeda

8 bit satır ve sütün için .
yeterde artar bile..
" Tanrı, iradesini hakim kılmak için yeryüzündeki iyi insanları kullanır, yeryüzündeki kötü insanlar ise kendi iradelerini hakim kılmak için Tanrı'yı kullanırlar." ..." Tanrı'dan mesaj gelmiyor, biz Tanrı'ya mesaj gönderiyoruz"

tyilgin

Ben port çoğaltmak için 74hc595 kullanıyorum, bir inceleyin isterseniz.

Nedenler

MAX7300 8255 gibi birşey galiba programlanabilir bir çoğullama entegresi olması lazım.


frkcn

maksimum 3 pin kullanarak , kaskat bağlı 74164 veya 74595 kullanarak yapılabilir.
Bugün ömrümün geride kalan son günü...

akkoyunlu74

#6
Cevaplarınız için teşekkür ederim.

Elek hocam  8 bit yeter demişsiniz,
74595 entegresi ile seri giriş paralel çıkış olarak kullanıp toplam 8 adet( 4 tanesi satır/4 tanesi sütun) kullanımını mı kastettiniz?
Ayrıca her sütundaki 32 adet led için TPIC 595 kullanmam daha mantıklımı olur?

Yine bu shift registeri kullanırsam(595), tarama hızında problem yaşama ihtimali varmıdır?


akkoyunlu74

#7
[IMG]http://img687.imageshack.us/img687/8057/dotmatris2.jpg[/img]

Uploaded with ImageShack.us

Tekrar selamlar,
Süre azaldığı için maliyeti ve diğer unsurları bir kenara bırakıyor pratik çözüm için  port çoğullama işinde shift register kullanımından vageçip resimdeki gibi bir çözüm yoluna gidiyorum.
Sormak istediğim şu; her sütunda 32 led olduğuna göre;
1- entegre(16f877)  32x20 mA=620 mA akımı verebilirmi?
2- 620 mAlik akımı 74154 ile şaseye veremeyeceğime ve tek tek transistör kullanmak işi karmaşıklaştıracağından ne önerirsiniz? ULN olmuyor çünkü aktiv high yani seçilen sütuna 1 gelecek.
* pic satır çıkışlarını terslersem ULN 2003 ile sürebilirim sanırım. Sizin fikirleriniz?
3- En önemli meselede yeşil ve kırmızı ledleri sürme işleminde ayırıcı olarak ne kullanabilirim (yeşiller yanarken kırmızı, kırmızı yanarken yeşilleri nasıl pasif edebilirim?

Mucit23

1-) Sonucta picin her bir pinine 20 ma lik bir akım akabiliyor fazlası riskli ama bence bu kadarı bile riskli. Bence display parlaklığı düşecektir. Her ihtimale karşı satır akımlarını mosfetlerle yükseltmeniz en iyisi olacaktır.
2-) Sanırım Tpic595 işinizi görüyor. Çıkış akımı gayet iyi.
3-) Aklıma pek bir yöntem gelmedi ama neden satırları pic ile direk sürüyorsunuzki. Bence 74HC595 gibi şhift registerle her rengi ayrı ayrı kontrol edebilirsiniz. 2*32 satır için toplanda 8 adet 74595 işinizi görecektir. hem picin portundan tasarruf etmiş olursuz. Hemde istediğinizde 74595 lerin 10 nolu pinini kullanarak kırmızı veya yeşil lederi kapatabilirsiniz yada ikisini birden açıp sarı rengini elde etmiş olursunuz. Benim aklıma bu yol geldi. 3 adet 74595lerle haberleşme pinleri ve 2 adette renk seçme piniyle toplamda 5 adet pin ile bu iş halledilmiş olur. Bence 3 adet 8 bitlik port kullanmaya gerek yok.

akkoyunlu74

hocam cevap için sağol, şuanda tpic595 i inceliyorum
Evet ledleri ayırma işleminde bahsettiğiniz yöntem doğru seçim bunu kullanacağım.
Burada 10 nolu uç demişsiniz, 8 nolu uç kullanmam gerekmezmi ayırma işi için,
birde kafa kazan olduğundan saçmalıyor olabilirim ama neden 74595 kullanmak yerine portları çoğullamak ve akım meselesini çözmek için 8 adet tpic695 kullanmıyorum? tek derdim  devreyi en sade hale getirmek ve parlaklık sorunu yaşamamak.

akkoyunlu74

[IMG]http://img412.imageshack.us/img412/7979/dotmatris3.jpg[/img]

Uploaded with ImageShack.us
tpic595 için kastettiğiniz kullanım şekli budur değilmi?
o zaman 74 595 leri de satırlara ver diyorsunuz. Doğrumu anladım?

Mucit23

  Bende yanlış yazmışım. Doğrusu 13 nolu bacak olacaktı. 10 nolu pin reset pinidir. Normal çalışmada bu pin daima hıgh konumunda olması gerekmektedir. low konumuna inerse 74595 in registerleri içerisindeki bilgiler silinir ama çıkışında herhangi bir değişme olmaz. Reset pininden sonra çıkışındada aynı şekilde bilgilerin silinmesini istersek reset işleminden sonra 74595 in 12 nolu bacağına 1 pals uygulamanız gerekecektir. 13 nolu pin ise birazdaha farklıdır. Bu pin normal çalışmada daima low konumuda olmalıdır. hıgh konumuna yükseltirsek çıkıştaki bilgi kaybolur ama registerlerden silinmez. Görünmez olur sadece. Tekrar eski konumuna yanı low konumuna indirirsek çıkıştaki durum eski haline döner. Renk seçmek için 13 nolu pin bence birebir.

  2. soruna gelince displayleri ortak katot, daha doğrusu katot display kullandığını varsayarak söylüyorum. Zaten resimdende katot olduğu anlaşılıyor.
Katot display sürmek için Bilgi satırlardan verilir sütünlar taranıyordu. Yani 1. satır 1. sütündaki ledi yakmak için, 1 satır hıgh konumunda 1. sütün ise low konumunda olmalı idi. Burada sorun yok. Şimdi neden Satırlarda Tpic 595 kullanamıyacağımıza bakalım.

74595'e Herhangi bir 8 bitlik bir veri yolladığımız zaman çıkışta o veriyi olduğu gibi görürüz.  Yani diyelim 10101010 verisini yollarsak çıkışta yine 10101010 verisi alırız. Veya 10000010 verisin yollarsak çıkışta yine 10000010 verisini alırız. Tpic 595 ile 74595 in çalışma mantığı ayınıdır. İkiside SPI protokolüyle haberleşir. Aralarındaki fark ise şudur. Şimdi biz 74595'e herhangi bir veri gönderdiğimiz zaman bunu çıkışta olduğu gibi alıyorduk.  Tpic595 ise birazdaha farklı Tpic595'e  10101010 verisini gönderdiğimiz zaman çıkışında tam tersini alırız Yaani çıkıştaki verimiz 01010101 olacaktır. Aynı şekilde 10000010 verisini gönderirsek çıkışında 01111101 verisini alırız. 74595 hiçbir veri göndermedeiğimiz zaman çıkışlar low konumunda beklerken Tpic 595'e veri gönderilmediği zaman çıkışlar Hıgh konumunda bekler. 74595 İn çıkışına Uln2803 bağlanıp ve bu ikisini tek bir kılıfa yerleştirildiğini düşün. Bu yüzden Tpic595 in Sink akımı yüksektir.
Bu yüzde satırları sürerken 74595 kullanılması gerekmekteri. Fakat 74595 in çıkış akımı düşük olduğu için çıkışını transistörlerle güçlendirilmesi gerekmektedir.

Umarım ikisi arasındaki farklı anlatabilmişimdir.

Kolay gelsin
Mucit23

akkoyunlu74

[IMG]http://img809.imageshack.us/img809/6486/dotmatris4.jpg[/img]

Uploaded with ImageShack.us

Gayet iyi anladım zahmetiniz için sağolun.
Bende 8 nolu uç derken tpic e göre söylemiştim.
Şimdi gönderdiğim resim tutarlı görünüyor değilmi. Ayrıca 74595 akımı yetmez demişsiniz, 35 mA yetmezmi ? neticede her çıkış tek led yakacak sorun nereden çıkabilirki? tüm ledler yandığında entegre ısınır diyorsunuz sanırım.
Bir sorumda şu; seri /paralel register kullandığımda tarama frekansı yeterli olurmu bilemiyorum ama profesyonel üreticiler bu malzemelerle işi kotardıklarından demekki tarama hızında problem yok diyebiliriz sanırım. ve programlama safhasında çok problem çıkmayacağını düşünüyorum ancak kritik zamanlama hesapları haricinle ileri programlama bilgisine gerek varmıdır acaba?

akkoyunlu74

74595 kavrayamadığım bir nokta var.

ETE hocam demişki "16 Pin li bir yonga olan 74HC595 in en önemli özelligi, data bacagı (14 no lu pin) ile Clock bacagı (11 no lu pin)
kullanılarak seri yoldan bilgi registerine yazılabiliyor. Ancak yazılan bu bilgi hemen çıkısta görülemiyor. Görülebilmesi
için bilgi aktarma bacagı olan (12 no lu pin) pine bir Clock palsının uygulanması gerekiyor."
Ve yine aynı dersinde;
SHIFTOUT DTA,CLK,1,[BILGI]
HIGH AKTAR
PAUSEUS 5
LOW AKTAR
diye eklemiş.
Bu satırda DTA;entegrenin data giriş ucu  (14 nolu uç)
                 CLK; SH_CP ucu (shift register) yani bilgiyi entegre içindeki shift registere aktarma pals ucu  (11 nolu uç) ve;
                 AKTAR; ST_CP ucu (yani stroge register) yani shift registere daha önce aktarılmış bilgi varsa bu bilgiyi çıkışta görebilmemize imkan veren uç.

soru şu; shiftout diye bir komut olmasaydı; manuel yöntemlerle programı nasıl yazardık. Doğru anladıysam bu komut DTA ve CLK girişlerini bizden bağımsız olarak kendi içindemi senkronize yürütüyor?

Mucit23

#14
Alıntı yapılan: akkoyunlu74 - 16 Şubat 2011, 00:28:48
[IMG]http://img809.imageshack.us/img809/6486/dotmatris4.jpg[/img]

Uploaded with ImageShack.us

Gayet iyi anladım zahmetiniz için sağolun.
Bende 8 nolu uç derken tpic e göre söylemiştim.
Şimdi gönderdiğim resim tutarlı görünüyor değilmi. Ayrıca 74595 akımı yetmez demişsiniz, 35 mA yetmezmi ? neticede her çıkış tek led yakacak sorun nereden çıkabilirki? tüm ledler yandığında entegre ısınır diyorsunuz sanırım.
Bir sorumda şu; seri /paralel register kullandığımda tarama frekansı yeterli olurmu bilemiyorum ama profesyonel üreticiler bu malzemelerle işi kotardıklarından demekki tarama hızında problem yok diyebiliriz sanırım. ve programlama safhasında çok problem çıkmayacağını düşünüyorum ancak kritik zamanlama hesapları haricinle ileri programlama bilgisine gerek varmıdır acaba?

Evet 32 sütünda bişey olmaz herhalde ama sütün sütün sayısı arttıkça 74595lerin  akımı yetmeyecektir. Bana kalırsa yine transistörlerle çıkış akımını yükselt derim. En yüksek parlaklık için. Siz bilirsiniz.

Alıntı yapılan: akkoyunlu74 - 16 Şubat 2011, 03:55:06
74595 kavrayamadığım bir nokta var.

ETE hocam demişki "16 Pin li bir yonga olan 74HC595 in en önemli özelligi, data bacagı (14 no lu pin) ile Clock bacagı (11 no lu pin)
kullanılarak seri yoldan bilgi registerine yazılabiliyor. Ancak yazılan bu bilgi hemen çıkısta görülemiyor. Görülebilmesi
için bilgi aktarma bacagı olan (12 no lu pin) pine bir Clock palsının uygulanması gerekiyor."
Ve yine aynı dersinde;
SHIFTOUT DTA,CLK,1,[BILGI]
HIGH AKTAR
PAUSEUS 5
LOW AKTAR
diye eklemiş.
Bu satırda DTA;entegrenin data giriş ucu  (14 nolu uç)
                 CLK; SH_CP ucu (shift register) yani bilgiyi entegre içindeki shift registere aktarma pals ucu  (11 nolu uç) ve;
                 AKTAR; ST_CP ucu (yani stroge register) yani shift registere daha önce aktarılmış bilgi varsa bu bilgiyi çıkışta görebilmemize imkan veren uç.

soru şu; shiftout diye bir komut olmasaydı; manuel yöntemlerle programı nasıl yazardık. Doğru anladıysam bu komut DTA ve CLK girişlerini bizden bağımsız olarak kendi içindemi senkronize yürütüyor?

Şhiftout komutu işi çok kolaylaştırıyor. Ama öyle bir kod yoksa manuel olarakda veri gönderebilirsiniz. Bi örnek vermek gerekirse
mesela 74595'e 10100101 verisini göndereceğiz. İlk başta en düşük bitten başlayarak verimizi göndereceğiz. ilk başta data bacağını 1 yaparız. Sonra clock bacağına 1 pals uygularız data içeri alınır. Daha sonra ikinci bit olan 0 verisini göndermek için data bacağını 0 yaparız sonrasında bir clock palsi ile data içeri alınır. Aynı şekilde tüm bitler için bu işlem tekrarlanır. (1,2,...,6,7) Tüm bitler içeri alındıktan sonra 12 nolu uca 1 pals uygulanarak gönderdiğimiz data çıkışa aktarılır. Temel mantık budur.