Kayan yazıya daha fazla karakter eklemek için ne yapmalı?

Başlatan Recep METE, 20 Mayıs 2013, 09:34:01

Recep METE

Arkadaşlar 16877 pici ileyapmış olduğum kayan yazı çalışması 20 harf veye karakterden fazla almıyor.Ben daha fazla yazı yazmak  istiyorum. Proramı ccs c programı ile derlerken ram in yüzde 34 dolu olduğunu gösteriyor.Ancak programın içine yeni harf kodu ekleyip derlediğimde , error hatası verip ram dolu anlamında yazı çıkıyor.Ben kayan yazı programına daha fazla harf eklemek için ne yapmalıyım.Değerli yardımlarınızı bekliyorum.
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

Kabil ATICI

ambar7

Gökhan BEKEN

Binbir çeşit algoritma var. Sizinki nasıl?
Kimisi dahili eeproma harf harf kaydeder, çalışma sırasında 0 ve 1 e çevrilerek ledlere yollanır
Kimisi harici eeproma 0 ve 1' çevrilmiş halde kaydeder, tekrar çevirmeye gerek kalmaz,
Ekrana yollarken bütün verileri dizeye aktarıp hepsini tek seferde kaydırmak kapasiteli mcu ister. Parça parça yollamak çözüm olabilir. Velhasıl kelam sizin algoritmanız herşeyi belirler. Ha deseniz ki bu yazılımı ben yazmadım bu söylediklerimi uygulayamazsınız. İşte bu yüzden kayan yazı konusunda hep kendiniz yazın diye söyler dururum.
Özel mesaj okumuyorum, lütfen göndermeyin.

Recep METE

#include <16f877.h>
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD // Denetleyici konfigürasyon ayarları
#use delay(clock=4000000)
#use fast_io(b) // Port yönlendirme komutları B portu için geçerli
#use fast_io(a)
char harf[96]={
0x00,0x00,0x00,   //Boşluk
0x7F,0x48,0x4C,0x4A,0x31 //'R' harfinin kodları.
0x00,                   
0x7F,0x49,0x49,0x49,0x41, //'E' harfinin kodları.
0x00,                     //Boşluk
0x3E,0x41,0x41,0x41,0x22, //'C' harfinin kodları.
0x00,                     //Boşluk
0x7F,0x49,0x49,0x49,0x41, //'E' harfinin kodları.
0x00,                     //Boşluk
0x7F,0x48,0x48,0x48,0x78, //'P' harfinin kodları.
0x00,                     //Boşluk
0x00,0x00,//Boşluk
0x7f,0x20,0x10,0x20,0x7f, //M
0x00,                     //Boşluk
0x7F,0x49,0x49,0x49,0x41, //'E' harfinin kodları.
0x00,                     //Boşluk
0x40,0x40,0x7F,0x40,0x40,    //T
0x00,                     //Boşluk
0x7F,0x49,0x49,0x49,0x41, //'E' harfinin kodları.
0x00, 0x00,                //Boşluk
0x32,0x49,0x49,0x45,0x22// 'S' harfi
0x00, 
0x3F,0x48,0x48,0x48,0x3F //'A' harfi
0x00   
0x7f,0x20,0x10,0x20,0x7f, //M harfi 
0x00,
0x32,0x49,0x49,0x45,0x22// 'S' harfi 
0x00  
0x7E,0x1,0x1,0x1,0x7E// U harfi
0x00
0x7F,0x38,0xC,0x6,0x7F//'N' harfi   
0x00,
 };
 
 //***************************************************//
 //örnek harfler bunları kullanabilirsiniz//
 
 //0x3F,0x48,0x48,0x48,0x3F //'A' harfi
 //0x7F,0x49,0x49,0x49,0x36//'B' harfi
 //0x3E,0x41,0x41,0x41,0x22, //'C' harfi
 //0x7F,0x41,0x41,0x41,0x3E//'D' harfi
 //0x7F,0x49,0x49,0x49,0x41, //'E' harfi
 //0x7F,0x48,0x48,0x48,0x40//'F' harfi
 //0x7E,0x41,0x49,0x49,0x6E//'G' harfi
 //0x7F,0x8,0x8,0x8,0x7F//'H' harfi
 //0x0,0x21,0x3F,0x21,0x0//'I' harfi
 //0x00,0x11,0x5f,0x11,0x00, //'İ' harfi
 //0x40,0x7E,0x41,0x1,0x6//'J' harfi
 //0x7f,0x08,0x14,0x22,0x41, //'K' harfi
 //0x7F,0x1,0x1,0x1,0x1//'L' harfi
 //0x7f,0x20,0x10,0x20,0x7f, //M harfi
 //0x7F,0x38,0xC,0x6,0x7F//'N' harfi
 //0x3e,0x41,0x41,0x41,0x3e, //'O' harfi
 //0x7F,0x48,0x48,0x48,0x78, //'P' harfi
 //0x7f,0x48,0x4c,0x4A,0x31, //'R' harfi
 //0x32,0x49,0x49,0x45,0x22// 'S' harfi
 //0x40,0x40,0x7F,0x40,0x40,    //T harfi
 //0x7E,0x1,0x1,0x1,0x7E// U harfi
 //0x3E,0x41,0x1,0x41,0x3E// Ü harfi
 //0x7C,0x2,0x1,0x2,0x7C// V harfi
 //0x70,0x8,0xF,0x8,0x70// Y harfi
 //0x7C,0x2,0x1,0x2,0x7C// Z harfi
 //************************************//
char dizi[15];
char j=0,a=14,h,k;
signed char i=0;
void goster()
{
for(k=0;k<5;k++)//Hız ayarı (Düşürdükçe hızlanır)
 {
 for(h=0;h<15;h++)
 {
 output_a(15);  // Düzgün gözükmesi için sütunu söndürmek gerekiyor. 7 yüklememin sebebi tüm sütunları söndürmek.
 output_b(dizi[h]);// Sırası ile harf'in sütun sütun kodları PORTB'ye yükleniyor.
 output_a(h);    //PORTA'da hangi sütunun aktif edileceği saydırılıyor.
 delay_us(500);  //Ledlerin  belli bir süre yanması sağlanıyor.
      }
     }
}
void main()
{

set_tris_b(0x00);    // RB0 portu tümüyle çıkış olarak ayarlandı.
output_b(0x00);      // B portu çıkışı sıfırlanıyor
set_tris_a(0x00);   // RA0 portu tümüyle çıkış olarak ayarlandı.
output_a(0x00);      // A portu çıkışı sıfırlanıyor

 while(1)
    {
  for(i=14;i>=0;i--) //harf katarını dizi katarına aktarmak için kullanılan döngü..
       { // Her seferinde dizi katarının değişkenlerini bir sola kaydırarak aktarır.
           dizi[i]=harf[a-j];
             j++;
          }
          goster();
          a++;
          j=0;
          if(a==96)a=14; //eğer a değeri "harf" katarının boyunu aşmışsa a değerini 14 yap.
         }
}





Hocam kod bu şekilde yazılmıştı.boşluk dahil 20 karakterden fazla almıyor.Kapasiteyi artırmanın başka yolu yok mu?
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

Kabil ATICI

Bu iyi güzelde sen en baştan bu kadar veriyi hafızala gömüp oradan çağırmaya çalışıyorsun. işlemcide topu topu 368 baytlık bir alan var. Şimdi işlemci diğer kodları işletirken de ram'a ihtiyacı var...

Programı bu verileri gerektiği zaman çağıracak şekilde düzenlemen lazım. Bu şekilde tüm karakter setini kullanabilirsin. İlede ram'de işlem yapacağım dersen ya daha yüksek ram kapasiteli bir işlemci kullanabilirsin veya harici ram kullanabilirsin.
ambar7

Gökhan BEKEN

Dotmatriste kaç adet sutun var bu önemlidir.
Atıyorum 20 adetçik sutun varsa sadece 20 adet 0 ve 1 'i her satır için yollamanız yeterlidir. 7 satır varsa 7x20 lik bir diziniz olur. Eepromdaki verileri sürekli bu diziye aktararak yüzlerce karakterlik uzunluktaki cümleleri kaydırabilirsiniz. Eeproma kodlanmış veri olması gerekir. Yani 01 şeklinde...

Ancak dotmatriste 100lerce sutun varsa daha büyük kapasiteli mcu gerekir.
Özel mesaj okumuyorum, lütfen göndermeyin.

omer1001

Merhaba baya bir geç oldu ama soruna şöyle bir çözüm vereyim. Geçen aynısı benimde başıma geldi diziyi const tipinde tanımlayınca sorun halloldu. Yani

const char harf[96]

Recep METE

Alıntı yapılan: omer1001 - 13 Haziran 2013, 00:14:54
Merhaba baya bir geç oldu ama soruna şöyle bir çözüm vereyim. Geçen aynısı benimde başıma geldi diziyi const tipinde tanımlayınca sorun halloldu. Yani

const char harf[96]

Hocam harikasın gerçekten."const char harf[2038]={"  'e kadar çıkabiliyor.Yani diğer arkadaşların dediği gibi 18F 'lik pice geçmeden sayende bu iş haledildi.Binlerce harf yazabiliyorum artık.
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

ziyaretci

Alıntı yapılan: semfero - 13 Haziran 2013, 09:15:25
Hocam harikasın gerçekten."const char harf[2038]={"  'e kadar çıkabiliyor.Yani diğer arkadaşların dediği gibi 18F 'lik pice geçmeden sayende bu iş haledildi.Binlerce harf yazabiliyorum artık.

Ama yinede denetleyicinin içinde o kadar fazla bilgi kullanımı tercih edilmez. Denetleyiciyi sadece işlem yapmak için gerekli hafıza alanı olarak kullanmak en idealidir. İşlemler için gerekli hafıza alanından fazla alan kullanmak denetleyiciyi yorar. Harici eepromu kullanman hem daha professiyonel hemde daha düzenli olur.

İyi çalışmalar dilerim.

Recep METE

Alıntı yapılan: erkantr67 - 16 Haziran 2013, 14:06:20
Ama yinede denetleyicinin içinde o kadar fazla bilgi kullanımı tercih edilmez. Denetleyiciyi sadece işlem yapmak için gerekli hafıza alanı olarak kullanmak en idealidir. İşlemler için gerekli hafıza alanından fazla alan kullanmak denetleyiciyi yorar. Harici eepromu kullanman hem daha professiyonel hemde daha düzenli olur.

İyi çalışmalar dilerim.


Doğru söylüyorsun,bu önemli bilgiyi dikkate alacağım.
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d