Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

kayan yazı sorunu

Başlatan deserteagle, 16 Kasım 2007, 19:57:06

deserteagle

merhaba
bir kayan yazı devresi tasarladım ama sorunlu.
bu kayan yazı 32 veya 48 sutunda çalışıyor fakat sutun sayısını artırınca 64veya 80 vs yazı artık baştan sona kadar kaymak yerine mesela 30 sutun kayıp tekrar başa dönüyor.ben sorunu bulamadım.
veya daha iyi bir algoritma ne olabilir işin içinden çıkamadım.
saygılarımla

//          
//
//
#include <htc.h>
#include<pic18.h>
#include<delay.c>
void main (void)
{
   unsigned char gecici_dizi[32];//
   unsigned const char metin[]=
      {
          0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,      
          0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,      //
          0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,      // karakter tabloları   
          0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
          0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
          0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
          0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
          0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
          0x00,0x00,0x00,0x00,9999                     
         };
   unsigned int satir,y,x,a,toplam_sutun;
   signed int i,j,k,l,deger;
   ADCON1=0X07;
   TRISB=0;   
   TRISA=0;
   TRISC=0;
   PORTA=0;
   PORTB=0;
   PORTC=0;
   for(i=0;;i++) // toplam sutun sayısını hesaplıyor.
   {
      if(metin=="9999")
      {toplam_sutun=i;
                               break;}
   }
   j=-112;
   for(;;)  
   {  
   if(j==81)  
      j=-112;  
      j++;
      satir=1;
      y=0;
      
      for(k=0;k<=31;k++)  
           gecici_dizi[k]=0;   
      
      for(i=0;i<=31;i++)            // metin dizimizin elemanları gecici dizisine atanıyor      
         {
            deger=i+j;
            if(deger<0)
            gecici_dizi=0;
            if((deger>=0)&&(deger<=toplam_sutun-1))
            gecici_dizi=metin[deger];
             if(deger>toplam_sutun)
             gecici_dizi=0;
         }
      
      for(x=1;x<=2;x++)   // tarama burada başlıyor  
      {
                                
         for(l=0;l<=15;l++)
            {
               PORTC=gecici_dizi[y];//metin gecici diziden taranıyor.
               PORTA=l;   
               PORTB=satir;    
               DelayUs(70);
               PORTB=0;
               y=y+1;
            }
            satir=satir+1;
      }
   }
}


devre şeması ise

[/URL][/img]

ilker_32

Devreyi gerçekte kurduysan birde bunu dene olursa kodları buraya koyarım. Ben kodları değiştirdim 160 sütunak kadar çok iyi ve ileriside gelir.  ;)

:020000040000FA
:1000000036EF00F0036A026EFF0E0226D8A0032628
:10001000D8A033EF00F0030E016EE60E02D8F4D73D
:10002000016AFC0F006E011ED8A006D0FF0E000072
:100030000026D8B0FCD700260400013EF7D71200F6
:10004000026E010E00D0086E0350015C02E1025006
:10005000005C040ED8B0010ED8B4020E0814D8A467
:10006000FF0E33EF00F0000104001200070EC16E16
:10007000926A806A936A816A946A826A2C6A306A98
:10008000010E2B6E1E6A1F6A206A216A4AEC01F07B
:1000900027C028F0302A010E296E04002950285C60
:1000A000D8A073EF00F04AEC01F0A4EC01F02F6A45
:1000B00004002F50315CD8A06FEF00F09CEC03F0EF
:1000C000242A2050320FE96E000E2120EA6E2DC046
:1000D000EFFF202AD8B4212A2F2AD8A4E9D7302A22
:1000E000292AD8A4DAD7306A25EC01F0010E226E55
:1000F000236A22C000F023C001F0036AA00EA0DF33
:10010000D8A4BBEF00F0010E2F6E04000B0E2F5C85
:10011000D8B0ADEF00F0296A0400100E295CD8B009
:10012000A9EF00F02050320FE96E000E2120EA6E98
:10013000EFCF82FF29C080FF2BC081FF010E016E2F
:10014000130E6FDF816A202AD8B4212A292AD8A465
:10015000E3D72B2A2F2AD8A4D8D71E2AD8B41F2AEF
:100160001EC020F01FC021F0010E2B6E222AD8B431
:10017000232AD8A4BED7010E2B6E1E6A1F6A206ADE
:10018000216A25EC01F0B0D7010E2F6E04000B0E92
:100190002F5CD8B0EFEF00F0296A0400100E295C44
:1001A000D8B0EBEF00F02050320FE96E000E2120A6
:1001B000EA6EEFCF12F012502614826E29C080FF33
:1001C0002BC081FF320E2CDF816A202AD8B4212A6D
:1001D000292AD8A4E2D72B2A2F2AD8A4D7D7206A35
:1001E000216A010E2B6E1E6A1F6A1200010E2F6E0D
:1001F00004000B0E2F5CD8B01EEF01F0296A04003A
:10020000100E295CD8B01AEF01F02050320FE96EC1
:10021000000E2120EA6EEFCF82FF29C080FF2BC0A5
:1002200081FF320EFDDE816A202AD8B4212A292AD4
:10023000D8A4E5D72B2A2F2AD8A4DAD7206A216A96
:10024000010E2B6E1E6A1F6A1200010E2E6E040034
:10025000030E2E5CD8B049EF01F0226A236A22C057
:1002600000F023C001F0010E036E2C0EE9DED8A4CD
:1002700042EF01F0BBDF640ED3DE222AD8B4232A7A
:10028000D8A4EDD7030E036EE80EBDDE2E2AD8A447
:10029000DED712003050F66E4208D8A0A3EF01F06E
:1002A000F76AF86AD890F636F736C00EF626020ED0
:1002B000F722000EF8220800F5CF27F0A3EF01F097
:1002C000460C200C590C410C4C0C560C410C430CA8
:1002D000200C4D0C450C530C4C0C450C4B0C200CBD
:1002E000590C550C4B0C530C450C4B0C4F0C4B0C38
:1002F000550C4C0C550C200C200C200C200C200C08
:10030000200C200C200C200C200C200C200C200C8D
:10031000200C200C200C200C200C200C200C200C7D
:10032000200C200C200C200C200C200C200C200C6D
:10033000200C200C200C200C200C200C200C200C5D
:10034000200C200C200C1200040027504108D8A4D7
:10035000B0EF01F0246A050E316E12009CEF03F03D
:10036000040027504208D8A4BDEF01F0060E246E09
:10037000050E316E12009CEF03F004002750430875
:10038000D8A4CAEF01F00C0E246E050E316E1200D7
:100390009CEF03F0040027504408D8A4D7EF01F0E5
:1003A000120E246E050E316E12009CEF03F0040055
:1003B00027504508D8A4E4EF01F0180E246E050E6E
:1003C000316E12009CEF03F0040027504608D8A4B9
:1003D000F1EF01F01E0E246E050E316E12009CEF3F
:1003E00003F0040027504708D8A4FEEF01F0240EC4
:1003F000246E050E316E12009CEF03F004002750AE
:100400004808D8A40BEF02F02A0E246E050E316EB8
:1004100012009CEF03F0040027504908D8A418EFFD
:1004200002F0300E246E030E316E12009CEF03F0CA
:10043000040027506908D8A425EF02F0340E246E7A
:10044000030E316E12009CEF03F0040027504A089F
:10045000D8A432EF02F0380E246E050E316E120071
:100460009CEF03F0040027504B08D8A43FEF02F0A4
:100470003E0E246E050E316E12009CEF03F0040058
:1004800027504C08D8A44CEF02F0440E246E050E01
:10049000316E12009CEF03F0040027504D08D8A4E1
:1004A00059EF02F04A0E246E050E316E12009CEFD9
:1004B00003F0040027504E08D8A466EF02F0500E57
:1004C000246E050E316E12009CEF03F004002750DD
:1004D0004F08D8A473EF02F0560E246E050E316E4D
:1004E00012009CEF03F0040027505008D8A480EFBE
:1004F00002F05C0E246E050E316E12009CEF03F0CC
:10050000040027507108D8A48DEF02F0620E246E0B
:10051000050E316E12009CEF03F0040027505208C4
:10052000D8A49AEF02F0680E246E050E316E120008
:100530009CEF03F0040027505308D8A4A7EF02F063
:100540006E0E246E050E316E12009CEF03F0040057
:1005500027505408D8A4B4EF02F0740E246E050E90
:10056000316E12009CEF03F0040027505508D8A408
:10057000C1EF02F07A0E246E050E316E12009CEF70
:1005800003F0040027507508D8A4CEEF02F0800EC7
:10059000246E050E316E12009CEF03F0040027500C
:1005A0005608D8A4DBEF02F0860E246E050E316EDD
:1005B00012009CEF03F0040027505708D8A4E8EF7E
:1005C00002F08C0E246E050E316E12009CEF03F0CB
:1005D000040027505808D8A4F5EF02F0920E246EBC
:1005E000050E316E12009CEF03F0040027505908ED
:1005F000D8A402EF03F0980E246E050E316E12009F
:100600009CEF03F0040027505A08D8A40FEF03F022
:100610009E0E246E050E316E12009CEF03F0040056
:1006200027502008D8A41CEF03F0A40E246E050E5A
:10063000316E12009CEF03F0040027503008D8A45C
:1006400029EF03F0AA0E246E050E316E12009CEF06
:1006500003F0040027503108D8A436EF03F0B00EA1
:10066000246E030E316E12009CEF03F0040027503D
:100670003208D8A443EF03F0B40E246E050E316E99
:1006800012009CEF03F0040027503308D8A450EF69
:1006900003F0BA0E246E050E316E12009CEF03F0CB
:1006A000040027503408D8A45DEF03F0C00E246E78
:1006B000050E316E12009CEF03F004002750350840
:1006C000D8A46AEF03F0C60E246E050E316E120038
:1006D0009CEF03F0040027503608D8A477EF03F00E
:1006E000CC0E246E050E316E12009CEF03F0040058
:1006F00027503708D8A484EF03F0D20E246E050EDD
:10070000316E12009CEF03F0040027503808D8A483
:1007100091EF03F0D80E246E050E316E12009CEF9F
:1007200003F0040027503908D8A49CEF03F0DE0E34
:10073000246E050E316E12002450F66EE308D8A028
:1007400096EF04F0F76AF86AD890F636F736640E3A
:10075000F626070EF722000EF8220800F5CF2DF03E
:1007600096EF04F03F0C480C480C480C3F0C000C72
:100770007F0C490C490C490C360C000C3E0C410C0A
:10078000410C410C220C000C7F0C410C410C410C23
:100790003E0C000C7F0C490C490C490C410C000C20
:1007A0007F0C480C480C480C400C000C3E0C410CD3
:1007B000490C490C2E0C000C7F0C080C080C080C82
:1007C0007F0C000C410C7F0C410C000C110C5F0CD9
:1007D000110C000C020C010C410C7E0C400C000CA6
:1007E0007F0C080C140C220C410C000C7F0C010C2B
:1007F000010C010C010C000C7F0C200C180C200CBF
:100800007F0C000C7F0C100C080C040C7F0C000CEF
:100810003E0C410C410C410C3E0C000C7F0C480C72
:10082000480C480C300C000C3E0C410C450C420CA2
:100830003D0C000C7F0C480C4C0C4A0C310C000C8D
:10084000320C490C490C490C260C000C400C400C95
:100850007F0C400C400C000C7E0C010C010C010CB8
:100860007E0C000C1E0C410C010C410C1E0C000CEB
:100870007C0C020C010C020C7C0C000C7E0C010C9C
:100880000E0C010C7E0C000C630C140C080C140CE8
:10089000630C000C700C080C070C080C700C000C9E
:1008A000430C450C490C510C610C000C000C000C65
:1008B000000C000C000C000C3E0C450C490C510CBB
:1008C0003E0C000C210C7F0C010C000C210C430C85
:1008D000450C490C310C000C420C410C510C690CBC
:1008E000460C000C0C0C140C240C7F0C040C000C9B
:1008F000720C510C510C510C4E0C000C1E0C290C9E
:10090000490C490C060C000C400C470C480C500CD0
:10091000600C000C360C490C490C490C360C000CD0
:0E092000300C490C490C4A0C3C0C000C120027
:020000040030CA
:04000000FFF9FFFF06
:02000600FBFFFE
:00000001FF

deserteagle

ilker hocam saygılar.
önce tasarladığınız uygulamalar gerçekten mükemmel.
acaba gözünüze takılan bir yer varmı veya nasıl bir mantıkla tekrar tasarlayım.
verdiğiniz kodu isis te çalıştıramadım fakat sabah tekrar deneyeceğim.
birde assembly de bit bazında değişiklikler yapabiliyorduk.en basitinden
bsf status,rp0 gibi c de bunu nasıl yapıyoruz.yani sormak istediğim bu değilde 18f452 için adcon1 in bitsel olarak bazı bitlerinin testi değişimi vs olabilir.
tekrar saygılar

ilker_32

Alıntı yapılan: "deserteagle"ilker hocam saygılar.
önce tasarladığınız uygulamalar gerçekten mükemmel.
acaba gözünüze takılan bir yer varmı veya nasıl bir mantıkla tekrar tasarlayım.
verdiğiniz kodu isis te çalıştıramadım fakat sabah tekrar deneyeceğim.
birde assembly de bit bazında değişiklikler yapabiliyorduk.en basitinden
bsf status,rp0 gibi c de bunu nasıl yapıyoruz.yani sormak istediğim bu değilde 18f452 için adcon1 in bitsel olarak bazı bitlerinin testi değişimi vs olabilir.
tekrar saygılar
C konusunda yardım edemeyeceğim. Çünkü bilmiyorum. Yukarıdaki .HEX Basic'den çeviri.

ferdem

Tek sorun buysa ne mutlu size! Yazılımda ufak tefek değişiklikler yaparak bu mesele hallolunur ancak sütun sayısı artınca parlaklık ve yenileme sıklığı ile alakalı problemler zuhur edebilir:) benden söylemesi.

En kolay ve anlaşılır kayan yazı devresi bu devre(74154 decoderlarla kurulan). Aynı şekilde yazılımı da çok kolay ve anlaşılır. Ben zamanında bu devre için yazdığım kodu sadeleştire sadeleştire tek for döngüsüne kadar indirgemiştim, burda biraz karışık yazılmış. Bu konuyu önceden konuşmuştuk, şu başlığı incelemenizi tavsiye ederim(bahsetiğim kod bu başlıkta var):
https://www.picproje.org/index.php/topic,6913&highlight=

Şu anda yapabilecekleriniz: Kodunuzu inceleyip anlamak ve gerekli değişikliği bilinçli bir şekilde yapmak veya işim görülsün yeter diyorsanız kodda gördüğünüz tüm 31 leri 63 yaparak şansınızı deneyebilirsiniz, tutma ihitmali yüksek.

Yukarıda da söylediğim gibi verdiğim bağlantıdaki başlık altında bu kayan yazı devresinin 16 sütunlusu için yazılmış çok basit bir kod var, o kodu alıp 15 yerine 63 yazarsan 64 sütunlu bir devrede çalışacağını düşünüyorum. İyi çalışmalar dilerim.

arslan74

Alıntı yapılan: "deserteagle"ilker hocam saygılar.
önce tasarladığınız uygulamalar gerçekten mükemmel.
acaba gözünüze takılan bir yer varmı veya nasıl bir mantıkla tekrar tasarlayım.
verdiğiniz kodu isis te çalıştıramadım fakat sabah tekrar deneyeceğim.
birde assembly de bit bazında değişiklikler yapabiliyorduk.en basitinden
bsf status,rp0 gibi c de bunu nasıl yapıyoruz.yani sormak istediğim bu değilde 18f452 için adcon1 in bitsel olarak bazı bitlerinin testi değişimi vs olabilir.
tekrar saygılar

Merhaba,

Hi-Tech'te her bit tanımlanmıştır. Microchip'in datasheetlerinde belirtilen bit isimlerini kullanabilirsin. %99 uyumlu diyebilirim.

Örneğin ADC ayarlarını yapmak istiyorsun.

/***********************************************************************
	ADC ayarları
***********************************************************************/


	CHS2 = 0;
	CHS1 = 0;
	CHS0 = 0;

	ADCS1 = 1;
	ADCS0 = 1;
	ADFM = 1; 		//0 = Left justified. 6 Least Significant bits of ADRESL are read as ‘0'.
	ADON = 1;


Şeklindeki örnek kod gibi yapabilirsin. Burada görduğun gibi normal atama operatöleriyle bu işlemi yapabilirsin.

Mantık olarak ASM yapmak istediğini, Hi-Tech'te de ifade edebiliyorsun.

Önce bir PIC kullanmadan önce onun datasheetini öncele gerekli olan özellikleri incele ve bunla ilgli bitlerin durumuna bak. Gerisi zaten cok kolay.

Her PIC için bir tane header dosyası vardır. Onun içinde bütün registerlerin tanımlaması var, onu incele.

Selamlar

deserteagle

sayın aslan hocam dediğinizi yapıp kafamdan bir kod yazıyım.sağolun.
ferdem hocam yanıt için teşekkürler.dediğiniz başlığı incelemeye başlıyorum.
saygılarımla

arslan74

Sayın deserteagle,

Kayan yazıda sütünları taratmak hiç verimli değil. Ledler cok sönük yanar. birde yazı boyutunu genişletiğinizde büyük sorunlarla karşılaşırsınız. Onun yerine 8 tane satırı taratib, bilgileri shift registerle (örneğin 74hc595le) sütünları sürmeniz cok daha mantıklı olur. Devrenizi bu şekilde değiştirmenizi tavsiye ediyorum. bu forum sitesinde buna benzer bir sürü kayan yazı çalışması var. Onları incelemenizi tavsi edeceğim.

Selamlar

deserteagle

sayın arslan hocam yanıt için teşekkürler
yine bilginizle bizlere birşeyler kazandırdınız.
kayan yazıda bir kaç değişiklik yaptım ve yine tüm karakterlerin hepsi göremedim isiste.fakat 452 nin çalışma frekansını artırınca tam istediğim gibi kaydı.acaba bendeki proteusun belli bir zaman sabitimi var yani mesela 2 sn den sonra tüm komutları çalıştırmayıp baştan başlıyor aynı pic lerin watch dog timer i gibi.picin frekansını artırınca çalışması sadece yazı çok hızlı geçtiğinden zor okubuyor simulasyonda.
birde yukarıdaki dizide unsigned char dizi[32]; olarak tanımladığım dizide dizinin boyutunu 124 u geçince hata veriyor fakat alttaki metin dizisini artırınca vermiyor.bu stack bölgeleri ayrı mı oluyorda birisini artırıp diğerini artırınca hata veriyor.
saygılarımla

deserteagle

sayın arslan hocam yanıt için teşekkürler
yine bilginizle bizlere birşeyler kazandırdınız.
kayan yazıda bir kaç değişiklik yaptım ve yine tüm karakterlerin hepsi göremedim isiste.fakat 452 nin çalışma frekansını artırınca tam istediğim gibi kaydı.acaba bendeki proteusun belli bir zaman sabitimi var yani mesela 2 sn den sonra tüm komutları çalıştırmayıp baştan başlıyor aynı pic lerin watch dog timer i gibi.picin frekansını artırınca çalışması sadece yazı çok hızlı geçtiğinden zor okubuyor simulasyonda.
birde yukarıdaki dizide unsigned char dizi[32]; olarak tanımladığım dizide dizinin boyutunu 124 u geçince hata veriyor fakat alttaki metin dizisini artırınca vermiyor.bu stack bölgeleri ayrı mı oluyorda birisini artırıp diğerini artırınca hata veriyor.
saygılarımla

buiba

ben de proteustan bu konuda sikayetteyim,versiyonundan mi nedendir bilinmez tarama mantigi bulunan bir devre kurup calistirdigimda altta bulunan cpu load %100 oluyor makina dogru simule edemiyor programi. uzerinde ugrastigim kayan yazida ayni sorunu yasadim.

deserteagle

hocam doğru söylüyorsun.bende c2duo e6750 var bazen load %96 seviyesine kadar çıkıyor.ben buradan şunu anladım halen proteus firması çift çekirdek sevieysinde program yazamamış.bu isis halen tek çekirdek kullanıyor.eski 3.0 ht ile aynı performansta çaılşıyor.napalım 3 sene ilerisinde  kullanacağımız donanıma para ödüyoruz.
saygılarımla

Erol YILMAZ

Proteus a bu kadar güvenmeyin ve yüklenmeyin.
Tam olarak gerçek gibi O L A M A Z !

ilker_32

Ben proteus'tan şikayetçi değilim. Proteus üzerinde emeği geçen tüm insanların eline sağlık. Helal olsun! çok güzel yapmışlar %75 doğru gidiyor. Şu ana kadar yaptığım çalışmalarda sadece frekansta yanıldı. Bu da büyük bir başarıdır. Proteus hiç olmasaydı o zaman şikayetçi olabilirdim.

lojikmemo1

Alıntı YapBen proteus'tan şikayetçi değilim. Proteus üzerinde emeği geçen tüm insanların eline sağlık. Helal olsun! çok güzel yapmışlar %75 doğru gidiyor. Şu ana kadar yaptığım çalışmalarda sadece frekansta yanıldı. Bu da büyük bir başarıdır. Proteus hiç olmasaydı o zaman şikayetçi olabilirdim
Sayın hocam bir cosfi metre tasarlamaya kalk yada AC voltmetre, o zaman proteus ne kadar da aciz kalıyor anlarsın. Dijital uygulamalar için vaz geçilmez ama AC için en iyisi orcad
İnsanlara Akılları Ölçüsünde Söz Söyleyiniz.