Picproje Elektronik Sitesi

DERLEYİCİLER => CCS C => Konuyu başlatan: bulut_01 - 28 Kasım 2017, 00:42:12

Başlık: dot matrix ve melodi bir arada calıstırmak
Gönderen: bulut_01 - 28 Kasım 2017, 00:42:12
iyi geceler arkadaslar bir problemim var onunla ilgili yardım alacakdım sızden bır adet dot matrıx ve buzzerım var bunun ikisinin aynı anda calıstırmak ıstesemde yapamadım  ekrandan sonra buzzer devreye giriyor yada buzzer dan sonra ekran devreye giriyor algoritmada ne gibi değişiklik yapmalıyımkı hem buzzer da melodi calarken ekranda sekılllerı gormek ıcın ?

#include <18F2525.h>
#include <TONES.c>

#fuses INTRC_IO,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD,NOMCLR
#use delay(clock=4000000)

#use fast_io(a)
#use fast_io(b)
#use fast_io(c)

int16 ww=0;
int f=0;

//#int_timer0 
//void TIMER0_isr()
//{}

const char muzik[103]={D_NOTE[3],R_NOTE[3],M_NOTE[3],R_NOTE[3],R_NOTE[3],M_NOTE[3],R_NOTE[3],
                     R_NOTE[3],R_NOTE[3],R_NOTE[3],R_NOTE[3],M_NOTE[3],R_NOTE[3],D_NOTE[3],
                     
                     D_NOTE[3],R_NOTE[3],M_NOTE[3],R_NOTE[3],R_NOTE[3],R_NOTE[3],M_NOTE[3],
                     R_NOTE[3],R_NOTE[3],R_NOTE[3],R_NOTE[3],R_NOTE[3],D_NOTE[3],R_NOTE[3],
                     
                     M_NOTE[3],R_NOTE[3],R_NOTE[3],R_NOTE[3],R_NOTE[3],M_NOTE[3],R_NOTE[3],
                     R_NOTE[3],R_NOTE[3],R_NOTE[3],R_NOTE[3],D_NOTE[3],R_NOTE[3],R_NOTE[3],
                     
                     D_NOTE[3],D_NOTE[3],D_NOTE[3],SI_NOTE[3],D_NOTE[3],D_NOTE[3],SI_NOTE[3],
                     SI_NOTE[3],SI_NOTE[3],L_NOTE[3],SI_NOTE[3],SI_NOTE[3],L_NOTE[3],L_NOTE[3],S_NOTE[3],L_NOTE[3],
                     
                     L_NOTE[3],SI_NOTE[3],D_NOTE[3],SI_NOTE[3],D_NOTE[3],SI_NOTE[3],SI_NOTE[3],
                     SI_NOTE[3],L_NOTE[3],L_NOTE[3],SI_NOTE[3],L_NOTE[3],L_NOTE[3],L_NOTE[3],SI_NOTE[3],
                     
                     L_NOTE[3],L_NOTE[3],L_NOTE[3],SI_NOTE[3],S_NOTE[3],L_NOTE[3],L_NOTE[3],
                     L_NOTE[3],L_NOTE[3],D_NOTE[3],R_NOTE[3],M_NOTE[3],R_NOTE[3],M_NOTE[3],R_NOTE[3],
                     
                     R_NOTE[3],M_NOTE[3],R_NOTE[3],D_NOTE[3],D_NOTE[3],R_NOTE[3],M_NOTE[3],
                     R_NOTE[3],R_NOTE[3],R_NOTE[3],M_NOTE[3],R_NOTE[3],R_NOTE[3],R_NOTE[3],
                     };
   int i;
   
    //******** Matrise Gönderilecek Karakter Bilgileri *******
int a1[]={0xF9,0xF1,0xE1,0xC3,0xC3,0xE1,0xF1,0xF9}; //kalp
int a2[]={0xFF,0x1,0xEE,0xEE,0xEE,0x1,0xFF,0xFF};   //a
int a3[]={0xFF,0xB9,0xB6,0x36,0x36,0xB6,0x8E,0xFF};  //ş
int a4[]={0xFF,0x0,0xC3,0xBD,0x7E,0xFF,0xFF,0xFF};   //k
int a5[]={0xFF,0x81,0x7E,0x7E,0x7E,0x81,0xFF,0xFF};  //o
int a6[]={0xFF,0xC1,0xBE,0x7F,0x7F,0xBE,0xC1,0xFF};  //u
int a7[]={0x3,0xFD,0xFD,0xE3,0xE3,0xFD,0xFD,0x3};    //m
int a8[]={0xF9,0xF1,0xE1,0xC3,0xC3,0xE1,0xF1,0xF9};
int a9[]={0xF9,0xF1,0xE1,0xC3,0xC3,0xE1,0xF1,0xF9};
int a10[]={0x0,0x6A,0x0,0x44,0x22,0x0,0xD9,0x6};   
int a11[]={};
int a12[]={};
int a13[]={};
int a14[]={};
int a15[]={};
int a16[]={};
int a17[]={};
int a18[]={};
int a19[]={};
   
   //******* Sütun Seçme Fonksiyonu ************
int sutunsec (int s)
{
   switch (s)
   {
      case 0: return(0x80);break;       // 1. Sütun aktif, diğer sütunlar pasif
      case 1: return(0x40);break; 
      case 2: return(0x20);break;   
      case 3: return(0x10);break; 
      case 4: return(0x08);break;   
      case 5: return(0x04);break;   
      case 6: return(0x02);break;
      case 7: return(0x01);break;
   
}
}
   //******* Matrise Veri Gönderme Fonksiyonu *******
void matris_karakter_gonder(char harf[], int tekrar)
{
   int ii,j;                                         // Değişkenler tanımlanıyor

   for (ii=1;ii<tekrar;ii++)                        // Karakterin Matris LED'de görünmesi için tekrar döngüsü
       {
         for(j=0;j<8;j++)                           // Bu döngüde tarama işlemi yapılıyor
         {
            output_b(sutunsec(j));                  // Sütun seç ve C portuna sütun değerini gönder
            output_c(harf[j]);                      // Gösterilecek harfin satır bilgisini B portuna gönder
            delay_ms(2);                           // Gecikme veriliyor
}
}
}

void main ()
{
   setup_timer_1(T1_DISABLED);     // T1 zamanlayıcısı devre dışı
   setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
   setup_adc_ports(NO_ANALOGS);    // ANALOG giriş yok
   setup_adc(ADC_OFF);             // ADC birimi devre dışı
   setup_CCP1(CCP_OFF);            // CCP1 birimi devre dışı
   setup_CCP2(CCP_OFF);            // CCP2 birimi devre dışı
   
set_rtcc(0);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
enable_interrupts(INT_RTCC);
enable_interrupts(GLOBAL);

   set_tris_a(0x00);
   set_tris_b(0x00); 
   set_tris_c(0x00); 

   while(true)
   {
   
    for(ww=0;ww<5000;ww++){
  matris_karakter_gonder(a1,100);          // A karakterini matriste göster
  matris_karakter_gonder(a2,100);
   
   for(i=0;i<103;i++)
{
generate_tone(muzik[i],330);}            // melodi çalma
   
}}}
Başlık: Ynt: dot matrix ve melodi bir arada calıstırmak
Gönderen: burç tankal - 28 Kasım 2017, 10:04:40
Kesme kullanarak yapmalısınız. Örneğin matrise bilgi gönderme işini kesme oluştuğunda gerçekleştirerek geri kalan zamanda müziği halledebilirsiniz.
Başlık: Ynt: dot matrix ve melodi bir arada calıstırmak
Gönderen: bulut_01 - 28 Kasım 2017, 11:15:36
Onu denedim ccs hata veriyor derlemiyor kesme oldugu zmn bu konuda yardımınızı bekliyorum.
Başlık: Ynt: dot matrix ve melodi bir arada calıstırmak
Gönderen: bulut_01 - 28 Kasım 2017, 17:10:35
bu konuda fikri olan kimse yok mu?
Başlık: Ynt: dot matrix ve melodi bir arada calıstırmak
Gönderen: JOKERAS - 28 Kasım 2017, 18:24:06
Multiplex çalışan bir kod yazarsanız olur.


Mesela Matris ve Melodi elemanlarını Döngüler şeklinde basıyorsunuz.
Bir o dönüyor bir bu.Tenis oynar gibi.Tak tuk, tak tuk.

Peki Döngü yerine bir Melodi,bir Matris,bir Melodi bir Matris  basarsanız
Zamanı her iki dizi elemnalrına pay etmiş olursunuz.


Dikkat edilmesi gereken önemli nokta!
Optimize edilerek yazılmış kodların arasında girecek en küçük kod parçası tüm ahenki bozacaktır.
Ses ve görüntü işin içine girince bu tür anormallikler çok normal.Çünkü her hatayı ya duyar yada anında görürüz:)





Başlık: Ynt: dot matrix ve melodi bir arada calıstırmak
Gönderen: bulut_01 - 28 Kasım 2017, 18:28:45
Peki üstad dediklerinizi kod üzerinden nasıl  değişiklik yaparak yapabilirim?
Başlık: Ynt: dot matrix ve melodi bir arada calıstırmak
Gönderen: JOKERAS - 28 Kasım 2017, 18:46:49

Kod üzerinde küçük bir kaç değişiklikle olacak iş değil bu.


Kodları yeniden bu mantığa göre yazmak gerekir.