Dot matrix

Başlatan ziyaretci, 28 Aralık 2012, 19:19:57

LukeSkywalker

Tek bir parça (4 sütun) panel kullanıyorsanız 128 byte veriyi her defasında basmanız gerekir.

OG

1 HC595 4 sıra (satır) 8 li grubu besliyor.

Hangi sıradaki ledin yanmasını istiyorsanız o sıranın anodlarını aktif etmeniz gerekir. HC138 ile.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

Nedenler

#17
HC138 girişleri devamlı 00 ile 11 arası taratıyorum dediğiniz gibi. Bu durumda hepsi aktif oluyor görünüyor. Sadece belli satırların anodları aktif olursa (bu durumda tarama olmuyor) ledler yanmayacak mı?

Bir diğer konu bir HC595'in beslediği 4 satırda da farklı değerler göstermek istediğimde işlem nasıl olacak ?

Ben örneğin 'A' karakterini gösterecek şekilde ledleri işaretleyip ortaya bir array çıkartıp bunu gönderdiğimde ledlerde bunu göremiyorum.

Edit:


HC138 tarama sorununu çözdüm. Şuan devamlı taratma yapmıyorum dolayısıyla sadece ilgili satır aktif oluyor.
Ancak ikinci problemi hala nasıl çözeceğimi bilemiyorum. Ben bir HC595'e bağlı 4 satırın 4ünde de aynı değer mi görmek zorundayım, bunu nasıl çözeceğiz? Dediğim gibi 'A' karakterine karşılık gelen arrayı Din girişinden gönderip görmem gerek bu kadar basit olması gerekmiyor mu?

msakgun

Şu an bende dağıttım bi tane paneli aslında kolay herşey ama yüksek bi hız gerekli bu panelleri sürmek için. Fakat en büyük sorun 595 lerin peş peşe dizilme mantığı yani bir solundakine değilde altındaki ne geçmesi sorun. yana geçse bizim işimizi kolaylaştırırmış aslında :)

serdararikan

bi alta geçmesi daha iyi.bu bağlantı yan yana ve altlı üstlü bağlantı yapabilme imaknını artırıyor

Nedenler

Arkadaşlar ben bu paneli hala tamamen sürebilmiş değilim. Bu kadar zor gözükmüyor aslında.


Aşağıdaki şekilde bir HC595'e bağlı 32 ledli gruptan sadece yakmak istediklerimi işaretledim. Benim bunu gösterebilmem için değişkenimin değerini değiştirip 4 defa data basıp mosfetleri ona göre açıp kapatmam lazım. Bu hiç pratik değil. Bir karakter göstereceğim diye kırk takla atmış oluyorum. Üstelik bu durumda mosfetler hızlı sürülmediği için ledlerde dalgalanma oluyor. Yok mu bunun daha pratik bir yolu?




Nedenler

Kolay gelsin arkadaşlar. Paneli tamamen sürdüm, istediğim şekilde kontrol edebiliyorum artık. Yardımcı olan herkese teşekkür ederim.
Ben de konuya biraz katkı sağlayayım.

Paneli tek parça halinde (16x32) ve sabit sayısal değer gösterecek şekilde kaydırmasız sürdüm.
Panel üzerindeki her HC595'e bağlı 8li 4 satır olmak üzere 32 adet led bağlı. Dolayısıyla gönderdiğiniz bir byte değer aynı anda 4 satırda birden gözüküyor. Bunu taramayla çözüyorsunuz.

unsigned int8 data[4][16] şeklinde bir tanımlama yaptım. Önce her HC595e bağlı 4 satırın en üstten 1. satırında göstermek istediğim 16 byte değeri gönderiyorum. Her 1 bit gönderimde 595'in clock bacağına 1 clock pals gönderilerek kaydırma işlemi yapılıyor. Datalar kaydırılarak gittiği için son byte'ı ilk gönderiyorum. Bu şekilde data[0][0....16] şeklinde 1. satır verileri gönderilmiş oluyor. Ardından 138'e bağlı mosfetler çıkışlarını değiştirmek için A ve B çıkışlarını 00 ile 11 arasında 1 defa değiştiriyorum. (00 ise 01, 01 ise 10) Ardından 595'e giden CK2 bacağından da bir clock göndererek datayı ekranda gösteriyorum. Bu işlemi 4 defa tekrarladığımda toplam 16x4 byte data gönderilmiş oluyor.

Açıklamaya çalıştığım şey tam olarak şu;
while(1)
   {      
      k=bit_test(data[m][l],n);     //En düşük byte'ın en yüksek bitinden itibaren data gönderiliyor.
      output_bit(P10_Din,k);
      if(n==0) {n=7; ++l;}          //Her 1 byte gönderildiğinde l içeriği 1 arttırılıyor.
      else     --n;
      
      output_low(P10_CLK);          //Her 1 bit gönderildiğinde 1 clock pals gönderiliyor.
      output_high(P10_CLK);
      
      if(l==16)                     //l==16 ise tüm hc595'lere ilgili 8 bit gönderilmiş demektir. 
      { 


         switch(j)                  //Panel dataları tamamen gönderildiğinde (l==16) 
         {
            case 0: output_low(P10_B);  output_low(P10_A);  //00   //HC138 çıkışlarını değiştirerek mosfetler açıp kapatılıyor. 
                    break;                                         //böylece tarama sağlanıyor.
            case 1: output_low(P10_B);  output_high(P10_A); //01   //her çıkış iki mosfeti, her mosfette iki satırı sürdüğü için.
                    break;                                         //her 16 byte veri gönderiminde ayrı 4 satır sürülmüş oluyor.      
            case 2: output_high(P10_B); output_low(P10_A);  //10
                    break;
            case 3: output_high(P10_B); output_high(P10_A); //11
                    break;
            default: break;
         }
         if(j==3) j=0; 
         else    ++j;      
                  
         output_high(P10_SCLK);                                   //Gönderilen 16 byte veri panelde gösteriliyor.
         output_low(P10_SCLK);
         delay_ms(3);                                             
                  
         l=0;
         
         if(m<3) {++m; if(flag_datageldi) deger(); flag_datageldi=0;}
         else m=0;           
         
      }         
   }


Bu kontrol kısmı. Öncesinde de göstermek istediğim sayı değerini basamaklarına ayırıp her basamağa karşılık gelen byte değerlerini data değişkenine aktarıyorum. 11x7 olarak kullandığım rakam değerlerini de aşağıda veriyorum.


const unsigned char char_0[16]={0XFF,0XFF,0X83,0X7D,0X7D,0X7D,0X7D,0X7D,0X7D,0X7D,0X7D,0X7D,0X83,0XFF,0XFF,0XFF};
const unsigned char char_1[16]={0XFF,0XFF,0XEF,0XCF,0XAF,0X6F,0XEF,0XEF,0XEF,0XEF,0XEF,0XEF,0X83,0XFF,0XFF,0XFF};
const unsigned char char_2[16]={0XFF,0XFF,0X03,0XFD,0XFD,0XFD,0XFD,0X83,0X7F,0X7F,0X7F,0X7F,0X81,0XFF,0XFF,0XFF};
const unsigned char char_3[16]={0XFF,0XFF,0X03,0XFD,0XFD,0XFD,0XFD,0X83,0XFD,0XFD,0XFD,0XFD,0X03,0XFF,0XFF,0XFF};
const unsigned char char_4[16]={0XFF,0XFF,0XFB,0XF3,0XEB,0XDB,0XBB,0X01,0XFB,0XFB,0XFB,0XFB,0XFB,0XFF,0XFF,0XFF};
const unsigned char char_5[16]={0XFF,0XFF,0X81,0X7F,0X7F,0X7F,0X7F,0X03,0XFD,0XFD,0XFD,0X7D,0X03,0XFF,0XFF,0XFF};
const unsigned char char_6[16]={0XFF,0XFF,0X81,0X7F,0X7F,0X7F,0X7F,0X03,0X7D,0X7D,0X7D,0X7D,0X83,0XFF,0XFF,0XFF};
const unsigned char char_7[16]={0XFF,0XFF,0X01,0XFB,0XF7,0XEF,0XDF,0XBF,0XBF,0XBF,0XBF,0XBF,0XBF,0XFF,0XFF,0XFF};
const unsigned char char_8[16]={0XFF,0XFF,0X83,0X7D,0X7D,0X7D,0X7D,0X83,0X7D,0X7D,0X7D,0X7D,0X83,0XFF,0XFF,0XFF};
const unsigned char char_9[16]={0XFF,0XFF,0X83,0X7D,0X7D,0X7D,0X7D,0X83,0XFD,0XFD,0XFD,0XFD,0X03,0XFF,0XFF,0XFF};
const unsigned char char_dot[16]={0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X3F,0X3F,0XFF,0XFF,0XFF};      //Nokta işareti
const unsigned char char_percent[16]={0XFF,0XFF,0XFF,0XFF,0XFF,0X77,0XEF,0XDF,0XBF,0X77,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF};  //Yüzde işareti


18F452 ile PLL aktifken (10x4 Mhz) sürdüm. Saniyede 1 defa ekranı yeniden sürüyorum. Bu yeniden sürmede hafif bir kıpırdanma oluyor. Ama sonuç olarak şöyle bir şey;


Mucit23

Arkadaşlar merhaba.

P10 led panellerle 2 gündür bende ugrasiyorum.  Paneli çalıştırdım fakat gonderdigim datalar degillenmiş olarak gidiyor. Yani ekrana ne gonderirsem tersi ekranda görünüyor.  Normalde dataların degillenmemesi gerekir.

Bunun sebebi ne olabilir?

LukeSkywalker

Her defasında 4er satır atlayarak veri basıyoruz. Yani toplamda 128 bit veri basıyoruz her seferinde. Veri basışlarımızda da satır uzunluğu ne kadar olur ise olsun o satırın verisini tamamen göndereceğiz.



ete

Benmi yanlış hesap ediyorum acaba?
İlk satırı yazdırdıktan sonra 3 satır atlayıp yeni satırı yazdırıyoruz. Dolayısıyla 4 değil 3 satır atlıyoruz. Zira 4. satır yeni yazdırılacak satır oluyor. Satır dizilimi şöyle değilmi 1-2-3-4  ,1,2,3,4 , 1,2,3,4 .........

Ayrıca toplamda 16 adet 74HC595 olduğuna göre her seferinde (16x8=144 bit) veri basılmış olmuyormu. ?

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

LukeSkywalker

#25
1. satır ardından 5. satır
16*8=128;
Oruç ilk belirtilerini vermeye başlamış hocam :) Yanlış anlamayın....
Saygılar.

ete

Haklısın , ihtiyarlık işte ne yaparsın. Ben yanlış hesaplıyormuşum.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

LukeSkywalker

Olur hocam böyle şeyler...

crimson

Bu konuyu açan ve yorum yapanlara teşekkür ederim. Çok faydalandım.

sail200

arkadaşlar ekranı verilen bilgiler doğrultusunda sürdüm. çokteşekkrüler.

ancak arada bir ekranda kıpırdanma oluyor bunun sebebi nedir acaba. beaglebone ile sürdüm. bunun bir etkisi olurmu. olursa nasıl çözebilirim.
şimdiden teşekkürler.