_MeRKeZ_
Üye
- Katılım
- 30 May 2011
- Mesajlar
- 44
- Puanları
- 1
- Yaş
- 32
Merhaba arkadaşlar
Tuş takımı ve matristen oluşan devremde, bastığım tuşa göre matriste harf çıkmasını istiyorum. Fakat yapmak istediğim projeden dolayı bu harfleri bir diziye kaydetip daha sonra sırayla gösterilmelerini istiyorum. Bir miktar ilerleme katettim ama şu anda gerçek zamanlı çalışamama hatası alıyorum.
Aşağıda, hangi tuşa basıldığını belirliyor ve o tuşa denk gelen harfi oluşturduğum diziye atıyorum
Bu kısımda deneme amaçlı sadece 0. Elemandan 5. Elemana kadar olan harflerin gösterilmesini istedim.
Tanımlamalar
Main kısmı
Benzetim (simülasyon) dosyasında da görüldüğü gibi devre düzgün bir şekilde çalışmıyor. Olağan şartlarda, herhangi bir harfe basıp akabinde kareye bastığımızda o harfin kaybolmaksızın gözükmesi gerekirdi. Sanırım bunun sebebi ISISin de belirttiği gibi Aşırı cpu kullanımı dolayısıyla gerçek zamanlı çalışamama sorunu %78 oranında RAM, %12 oranında ROM kullanıyorum. Sıkıntı bundan mı kaynaklanıyor? Eğer bundansa, nasıl düzeltebilirim? Ne önerirsiniz?
Teşekkürler
Tuş takımı ve matristen oluşan devremde, bastığım tuşa göre matriste harf çıkmasını istiyorum. Fakat yapmak istediğim projeden dolayı bu harfleri bir diziye kaydetip daha sonra sırayla gösterilmelerini istiyorum. Bir miktar ilerleme katettim ama şu anda gerçek zamanlı çalışamama hatası alıyorum.
Aşağıda, hangi tuşa basıldığını belirliyor ve o tuşa denk gelen harfi oluşturduğum diziye atıyorum
Kod:
void tustakimi_oku() // Fonksiyon ismi
{
kontrol_3=0;
y=1;
output_d(0x00); // D portu çıkışı sıfırlanıyor
output_high(pin_d4); // 1. satır lojik-1 yapılıyor
if (input(pin_d0)) // 1. sütun okunuyor
{
delay_ms(20);
kontrol_2++;
tus=kontrol;
yak_sondur();
}
else if (input(pin_d1)) // 2. sütun okunuyor
{
delay_ms(20);
kontrol_2++;
tus=3+kontrol;
yak_sondur();
}
else if (input(pin_d2)) // 3. sütun okunuyor
{
delay_ms(20);
kontrol_2++;
tus=6+kontrol;
yak_sondur();
}
output_low(pin_d4); // 1. satır lojik-0 yapılıyor
output_high(pin_d5); // 2. satır lojik-1 yapılıyor
if (input(pin_d0)) // 1. sütun okunuyor
{
delay_ms(20);
kontrol_2++;
tus=9+kontrol;
yak_sondur();
}
else if (input(pin_d1)) // 2. sütun okunuyor
{
delay_ms(20);
kontrol_2++;
tus=12+kontrol;
yak_sondur();
}
else if (input(pin_d2)) // 3. sütun okunuyor
{
delay_ms(20);
kontrol_2++;
tus=15+kontrol;
yak_sondur();
}
output_low(pin_d5); // 2. satır lojik-0 yapılıyor
output_high(pin_d6); // 3. satır lojik-1 yapılıyor
if (input(pin_d0)) // 1. sütun okunuyor
{
delay_ms(20);
kontrol_2++;
tus=18+kontrol;
yak_sondur();
}
else if (input(pin_d1)) // 2. sütun okunuyor
{
delay_ms(20);
kontrol_2++;
tus=21+kontrol;
yak_sondur();
}
else if (input(pin_d2)) // 3. sütun okunuyor
{
delay_ms(20);
kontrol_2++;
tus=24+kontrol;
yak_sondur();
}
output_low(pin_d6); // 3. satır lojik-0 yapılıyor
output_high(pin_d7); // 3. satır lojik-1 yapılıyor
if (input(pin_d0)) // 1. sütun okunuyor
{
y=0;
delay_ms(20);
if(kontrol==0)
{
kontrol=1;
output_e(0x01);
}
else if(kontrol==1)
{
kontrol=2;
output_e(0x03);
}
else if(kontrol==2)
{
kontrol=0;
output_e(0x00);
}
}
else if (input(pin_d1)) // 2. sütun okunuyor
{
delay_ms(20);
kontrol_2++;
tus=27+kontrol;
yak_sondur();
}
else if (input(pin_d2)) // 3. sütun okunuyor
{
delay_ms(20);
y=0;
output_high(pin_a5);
delay_ms(500);
output_low(pin_a5);
kontrol_3=1;
}
output_low(pin_d7); // 3. satır lojik-0 yapılıyor
if(y==1)
{
if(kontrol_2<18)
{
if(tus>14)
{
for(i=0;i<5;i++)
{
dizi[((kontrol_2-1)*5)+i]=metin_2[(tus*5)-75+i];
}
}
else
{
for(i=0;i<5;i++)
{
dizi[((kontrol_2-1)*5)+i]=metin[(tus*5)+i];
}
}
}
else if(kontrol_2>=18)
{
if(tus>14)
{
for(i=0;i<5;i++)
{
dizi_2[((kontrol_2-1)*5)-85+i]=metin_2[(tus*5)-75+i];
}
}
else
{
for(i=0;i<5;i++)
{
dizi_2[((kontrol_2-1)*5)-85+i]=metin[(tus*5)+i];
}
}
}
}
if(kontrol_3==1)
{
delay_ms(20);
yazdir_2();
}
}
Bu kısımda deneme amaçlı sadece 0. Elemandan 5. Elemana kadar olan harflerin gösterilmesini istedim.
Kod:
void yazdir_2()
{
for(tekrar=0;tekrar<100;tekrar++)
{
for(x=0;x<5;x++)
{
deger= x%5;
output_c(sutunsec(deger));
output_b(dizi[x]);
}
}
output_c(0x00);
}
Tanımlamalar
Kod:
char metin[]=
{
0x03,0x75,0x76,0x75,0X03 //A
0x00,0X36,0X36,0x36,0X49 //B
0x41,0x3E,0x3E,0x3E,0x5D //C
0xE1,0xDE,0x9E,0xDE,0xED //Ç
0x00,0x3E,0x3E,0xDD,0xE3 //D
0x00,0xB6,0xB6,0xB6,0xBE //E
0x00,0xF6,0xF6,0xF6,0xF6 //F
0x00,0xBE,0xB6,0xB6,0x86 //G
0x83,0xBA,0xAA,0xAA,0x8B //Ğ
0x00,0xF7,0xF7,0xF7,0x00 //H
0xFF,0xFF,0x00,0xFF,0xFF //I
0xFF,0xFF,0x82,0xFF,0xFF //İ
0xCF,0xBF,0xBF,0xBF,0xC0 //J
0x00,0xEB,0xDD,0xBE,0xFF //K
0x00,0xBF,0xBF,0xBF,0xBF //L
};
char metin_2[]=
{
0x00,0xFD,0xFB,0xFD,0x00 //M
0x81,0xFB,0xF7,0xEF,0xC0 //N
0xE3,0xDD,0xBE,0xDD,0xE3 //O
0xC7,0xBA,0xBB,0xBA,0xC7 //Ö
0x00,0xF6,0xF6,0xF6,0xF0 //P
0x00,0xE6,0xD6,0xB0,0xFF //R
0xD9,0xB6,0xB6,0xB6,0xCD //S
0xD9,0xB6,0x96,0xB6,0xCD //Ş
0xFE,0xFE,0x00,0xFE,0xFE //T
0X00,0xBF,0xBF,0xBF,0x00 //U
0x83,0xBE,0xBF,0xBE,0x83 //Ü
0xE0,0xDF,0xBF,0xDF,0xE0 //V
0xFE,0xFD,0x03,0xFD,0xFE //Y
0x9E,0xAE,0xB6,0xBA,0xBC //Z
0xFF,0xFF,0xFF,0xFF,0xFF //boşluk
};
char dizi[90];
char dizi_2[30];
Main kısmı
Kod:
void main ( )
{
setup_psp(PSP_DISABLED); // PSP birimi devre dışı
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ışı
set_tris_a(0x01);
set_tris_b(0x00); // B portu komple çıkış
set_tris_c(0x00); // B portu komple çıkış
set_tris_d(0x0F); // Yüksek değerlikli 4 bit çıkış, düşük değerlikli 4 bit giriş
output_b(0x00); // İlk anda B portu çıkışı sıfırlanıyor
while(1) // Sonsuz döngü
{
tustakimi_oku();
}
}
Benzetim (simülasyon) dosyasında da görüldüğü gibi devre düzgün bir şekilde çalışmıyor. Olağan şartlarda, herhangi bir harfe basıp akabinde kareye bastığımızda o harfin kaybolmaksızın gözükmesi gerekirdi. Sanırım bunun sebebi ISISin de belirttiği gibi Aşırı cpu kullanımı dolayısıyla gerçek zamanlı çalışamama sorunu %78 oranında RAM, %12 oranında ROM kullanıyorum. Sıkıntı bundan mı kaynaklanıyor? Eğer bundansa, nasıl düzeltebilirim? Ne önerirsiniz?
Teşekkürler