16F628+74HC154 kayan yazı sorun

Başlatan ziyaretci, 29 Ocak 2012, 23:56:05

ziyaretci

   Arkadaşlar ne kadar uğraştıysam yine yapamadım aşağıdaki resimde görülen kayan yazı 2 dot matrix(8x8)te çalışıyor.
   Fakat ben bunu 4 e çıkarmaya ne kadar uğraştıysamda aşağıdakini paralel alıyor diğer ikisindede aynı görüntüyü gösteriyor.Veya hiç göstermiyor vs.
  **Gerekli kodu veya eklenirse ayrı bir eleman ne varsa ayrıntılı bir şekilde açıklarsanız memnun olurum.



kod bu:

#include <16F628A.h>

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES INTRC_IO                 //Internal RC Osc, no CLKOUT
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOMCLR                   //Master Clear pin used for I/O
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection

#use delay(clock=4000000)


int b,i,a; //döngüler için gerekli değişkenler
signed kayma;
int yazi_sutun;//yazının sütün sayısı
int matris_sutun; //matris sutun

char metin[]={
0x81, 0x42, 0x24, 0x18, 0x81, 0x42, 0x24, 0x18, // sola çift ok
0x00,
0x03, 0x07, 0x0E, 0xFC, 0xFC, 0x0E, 0x07, 0x03, //y
0x00,
0xFC, 0xFE, 0x13, 0x11, 0x11, 0x13, 0xFE, 0xFC, //a
0x00,
0x83, 0xC3, 0xE3, 0xF3, 0xDB, 0xCF, 0xC7, 0xC3, //z
0x00,
0xFF, 0xFF, 0x18, 0x3C, 0x66, 0xC3, 0x83, 0x00, //k
0x00,
0x00, 0x00, 0x88, 0xFB, 0xFB, 0x88, 0x00, 0x00, //i
0x00,
0x18, 0x24, 0x42, 0x81, 0x18, 0x24, 0x42, 0x81, // sağa çift ok
};

char kayan[8]; //kayan adında 16 elemanlı sahte dizi oluşturuldu.


void main()
{

   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);

yazi_sutun=62;//yazinin toplam sutun sayısı belirleniyor
//yazi1_sutun=64; //diğer yazının sutun sayısı belirleniyor
matris_sutun=16;//kullanılan matrisin sutun sayısı

 
 for(;;)// sonsuz döngü oluşturluyor
 {
 
    for(kayma=-8;kayma<yazi_sutun;kayma++) // sütün sayısı kadar kayma işlemi gerçekleştiriliyor.
  {
      for(b=0;b<matris_sutun;b++)  //kayan adlı dizinin elemanlarını döngü  //sayesinde buluyoruz.
    {     
       kayan[b]=metin[kayma+b]; // kaydırma işlemi hesaplanıyor
          if(kayma+b<0)  // şartlar
           kayan[b]=0;
            if(kayma+b>yazi_sutun)
             kayan[b]=0;
    }

      for(a=0;a<30;a++) //tarama sayısı
    {
        for(i=0;i<matris_sutun;i++) //bulunan değerler teker teker portlara gönderiliyor.
     {  
         output_a(i);
         output_b(kayan[i]);
         delay_us(6000); //kayma hızı
         
  }   //kaydırma işlemi sonu
   }  // portlara gönderme sonu
    } //tarama sayısı sonu
 }     //sonsuz döngü sonu
}      // ana program sonu


nasıl yapılacağı hakkında bir çok kişiye az çok sordum fakat yine olmadı :S


Mucit23

Yazılımdan anlamam!
Ama lakin şemada mantık hatası var.
74154 lerin E1 ve E2 girişlerini şaseye çekmemelisiniz.
74154lerin e1 ve e2 bacaklarını birleştirip ayrı ayrı iki boş iki pine bağlayın. Sonra datayı hangisine göndermek istiyorsanız onun e1ve e2 bacağını negatife çekin.
Bu şekilde yapmazsanız iki gurup displaydede aynı şeyleri görürsünüz.

Klein

Kodunu incelemedim. Oraya gelmeden önce yapısal hatanın düzeltilmesi gerek.
Kullandığın 74HC154 çipi 4x16 multiplexer.  Sen iki çipi de paralel bağlamışsın. Bu durumda birinin çıkışı ne ise diğerinin çıkışı da aynı olur.

Enable uçlarını kullanman gerek.  ilk 16 sütun bittikten sonra 1. çip pasif yapılıp 2. çip aktif yapılacak, kalan 16 sütun da öyle taranacak.

Şimdiki haliyle ilk iki gösterge ile 2. iki gösterge aynı şeyleri gösterir.

ziyaretci

Mucit23 kardeş benim bildiğim e1 ler şase e2 ler ayrı ayrı pin Sizin değiniz doğrudur bişiy söyleyemem.


" Klein "

evt onu sadece 4 lü istediğimi belirtmek için yükledim.

  asıl sorunum dediğiniz  gibi ilk önce 1. çip aktif sonra pasif ve 2. çip aktif ve pasif sorun burada bunu düşünürken kafayı yedim yukarıda verdiğim kod 2  tanesini çalıştırıyor. 1.yi pasif 2.yi aktif yapacağım gerekli kodun nereye yazıldığını anlayamdım yazdıysamda mantığıma yatmadı sildim.
Ayriyetten 16f628 in pin_a4 ünü hiç bir şekilde çalıştıramıyorum basit basit led devrelerinde bile bu Ra4 ayrı bir kullanımı mı var acaba?



Şuanki halim karşımda 10 tane yol ayrımı bende ki de kararsızlık . Birisi tabiri caiz elimden tutsa bütün sorularımı sileceğim.Bu işin peşini bırakmak istemiyorum Kafaya koydum başta .   

emosamca

RA4 bacağı open collector tipindedir. 0 V veya sonsuz empedans gösterir. 10K lık bir dirençle +5V a bağlarsan 1 ve 0 alabilirsin.

ziyaretci

çok çok teşekkür ederim kafamdan bir  sorunumu sildin teşekkürler.ra6 ve 7 yide bu şekilde kullanabilirmiyiz

Mucit23


ziyaretci


Mucit23

#8
Özelden yazmana gerek yok.
Ra6 ve RA7 yi pull-up yapmana gerek yoktur. Bu pinler normal I/O olarak kullanabilirsin yanlız İşlemciyi iç osc ile çalıştırmalısın.
--------------
Edit;
Sigortalara bunu eklemeyi dene
#FUSES INTRC_IO

ziyaretci

özelden yazmanın bir sakıncası olduğunu bilmiyordum k.b.

Peki teşekkür ederim.

ilker_32

Karşında ki şahıs müsade ettiği sürece özelden yazmanın bir sakıncası yok. Siz buradan yazdığınızda hem konu çözülecek hemde sizin gibi bu tür hatalara düşenler için bu başlık kendilerine derman olacak ve ayrıca bir kişiye de bağlı kalmamış olacaksınız.

ziyaretci

#11
Bende şöyle bir şey söyleyeyim arkadaşa yanıt olarak
Alıntı yapılan: erkantr67 - 30 Ocak 2012, 14:23:15
çok çok teşekkür ederim kafamdan bir  sorunumu sildin teşekkürler.ra6 ve 7 yide bu şekilde kullanabilirmiyiz

dedim oda evet dedi denedim olmadı ve  tekrar yanıt atmak yerine(diğer forumlarda gördüğüm üzere üst üste ynt atmak yasak spam olarak değerlendiriliyor.Bu yüzden;) mesaj attım.Yoksa çok meraklı değilim mesaj atmaya, diyeceksiniz bir öncekini değiştir onuda düşündüm fakat bir öncekindeki o yazıyı dikkat çekmeyeceği için özelden attım.Evet sizin dediğinizede katılıyorum ama böyle gerekti.Ayriyetten bunu sizin yerine bilgi alışverişinde bulunduğum şahıs yazsa daha iyi olur.Kusura bakmazsınız artık.