LCD dalgalanma sorunu

_MeRKeZ_

Üye
Katılım
30 May 2011
Mesajlar
44
Puanları
1
Yaş
31
Merhaba arkadaşlar,


Devre üzerinde basılan butonların sonucunu LCD üzerinde gösteriyorum. Ancak Lcd üzerinde dalgalanma oluyor. İlk önce A ve B portundaki girişler okunuyor daha sonra bunlar LCD'ye yansıyor. İlk satırda herhangi bir sorun yok. İkinci satır dalgalanıyor sadece


Kod:
#include <16f877.h> 


#device ADC=10


#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD


#use delay (clock=4000000)


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


#use rs232(baud=2400, xmit=PIN_C6, rcv=PIN_C7, parity=N, stop=1)


#include <benim_LCD.c>


#define Vites_Ileri PIN_B6
#define Vites_Geri  PIN_B7


int1 Sol,Sag,Ileri,Geri;
int Vites=1;
int Hareket_Durumu=0;
long Deger_1,Deger_2;
float V1,V2;


#int_RB
void Vites_Belirle()
{
   disable_interrupts(int_rb);
   
   if(input(Vites_Ileri))
   {
      delay_ms(20);
      while(input(Vites_Ileri));
      
      Vites++;
      
      if(Vites>5)
         Vites=5;
   }
   
   else if(input(Vites_Geri))
   {
      delay_ms(20);
      while(input(Vites_Geri));
      
      Vites--;
      
      if(Vites<1)
         Vites=1;
   }
}




void Deger_Oku()
{
   set_adc_channel(0);
   delay_us(20);
   Deger_1=read_adc();
   V1=0.0048828125*Deger_1;
   
   delay_ms(60);
   
   set_adc_channel(1);
   delay_us(20);
   Deger_2=read_adc();
   V2=0.0048828125*Deger_2;
   
   delay_ms(60);
   
   Sol=0;
   Sag=0;
   Ileri=0;
   Geri=0;
   
}


void Degerlendir()
{
   if((V1<1.5) && (V1>=0))
   {
       Sol=1;
       Sag=0;
   }
              
   else if((V1<=5) && (V1>3.5))
   {
       Sol=0;
       Sag=1;
   }
               
   else
   {
       Sol=0;
       Sag=0;
   }
               


   if((V2<1.5) && (V2>=0))
   {
       Ileri=1;
       Geri=0;
   }
               
   else if((V2<=5) && (V2>4))
   {
       Ileri=0;
       Geri=1;
   }
               
   else
   {
       Ileri=0;
       Geri=0;
   }
   
   if((Ileri==1)&&(Sol==1))
   {
      lcd_komut(0x01);
      printf(lcd_veri," Yon: Kuzeybati ");
      imlec(2,1);
      printf(lcd_veri,"Hiz seviyesi: %d",Vites);
      Hareket_Durumu=180;
   }
   
   else if((Ileri==1)&&(Sag==1))
   {
      lcd_komut(0x01);
      printf(lcd_veri," Yon: Kuzeydogu ");
      imlec(2,1);
      printf(lcd_veri,"Hiz seviyesi: %d",Vites);
      Hareket_Durumu=120;
   }
   
   else if((Geri==1)&&(Sag==1))
   {
      lcd_komut(0x01);
      printf(lcd_veri," Yon: Guneydogu ");
      imlec(2,1);
      printf(lcd_veri,"Hiz seviyesi: %d",Vites);
      Hareket_Durumu=140;
   }
   
   else if((Geri==1)&&(Sol==1))
   {
      lcd_komut(0x01);
      printf(lcd_veri," Yon: Guneybati ");
      imlec(2,1);
      printf(lcd_veri,"Hiz seviyesi: %d",Vites);
      Hareket_Durumu=160;
   }
   
   else if(Ileri==1)
   {
      lcd_komut(0x01);
      printf(lcd_veri,"   Yon: Kuzey   ");
      imlec(2,1);
      printf(lcd_veri,"Hiz seviyesi: %d",Vites);
      Hareket_Durumu=110;
   }
   
   else if(Sag==1)
   {
      lcd_komut(0x01);
      printf(lcd_veri,"   Yon: Dogu    ");
      imlec(2,1);
      printf(lcd_veri,"Hiz seviyesi: %d",Vites);
      Hareket_Durumu=130;
   }
   
   else if(Geri==1)
   {
      lcd_komut(0x01);
      printf(lcd_veri,"   Yon: Guney   ");
      imlec(2,1);
      printf(lcd_veri,"Hiz seviyesi: %d",Vites);
      Hareket_Durumu=150;
   }
   
   else if(Sol==1)
   {
      lcd_komut(0x01);
      printf(lcd_veri,"   Yon: Bati    ");
      imlec(2,1);
      printf(lcd_veri,"Hiz seviyesi: %d",Vites);
      Hareket_Durumu=170;
   }
   
   else if((Sol==0)&&(Sag==0)&&(Ileri==0)&&(Geri==0))
   {
      lcd_komut(0x01);
      printf(lcd_veri,"Arac durduruldu ");
      imlec(2,1);
      printf(lcd_veri,"Hiz seviyesi: %d",Vites);
      Hareket_Durumu=100;
   }
}




void Hareket_Yonu_Gonder(int veri)
{
   putc(0x55);
   putc(0x55);
   putc(0x55);
   putc(0x55);
   putc(0x55);
   putc(0x00);
   putc(0x00);
   putc(0x00);
   putc(0x00);
   putc(0x00);
   putc(0xFF);
   putc(0xFF);
   putc(0xFF);
   putc(0xFF);
   putc(0xFF);
   putc('A');
   putc('A');
   putc('A');
   putc(veri);
   putc(veri);
   putc(veri);
}


void Vites_Bilgisi_Gonder(int veri)
{
   putc(0x55);
   putc(0x55);
   putc(0x55);
   putc(0x55);
   putc(0x55);
   putc(0x00);
   putc(0x00);
   putc(0x00);
   putc(0x00);
   putc(0x00);
   putc(0xFF);
   putc(0xFF);
   putc(0xFF);
   putc(0xFF);
   putc(0xFF);
   putc('B');
   putc('B');
   putc('B');
   putc(veri);
   putc(veri);
   putc(veri);
}


void main()
{
   setup_psp(PSP_DISABLED); 
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_CCP1(CCP_OFF);
   setup_CCP2(CCP_OFF);
   
   setup_adc_ports(AN0_AN1_AN3);
   setup_adc(ADC_CLOCK_INTERNAL);   
   
   
   set_tris_a(0x03);
   set_tris_b(0xC0);
   set_tris_c(0x00);
   
   output_a(0x00);
   output_b(0x00);
   output_c(0x00);
   
   lcd_hazirla();
   
   enable_interrupts(GLOBAL);
   
   while(1)
   {
      enable_interrupts(int_rb);
      Deger_Oku();
      Degerlendir();
      Hareket_Yonu_Gonder(Hareket_Durumu);
      Vites_Bilgisi_Gonder(Vites);
   }
   
}
 
Dalgalanmanın videosu falan var mı? Dalgalanma dediğin kristal darbesi gibi bir şey mi? Eskiden windows'ta da pencereyi çekerken takılırdı öyle bir ekran yenilenme hatası mıdır?
 
sanırım ekranı beklemesiz yenileme yaptığınızda oluşan olay olmalı.mesala ilk veri görünür daha sonraki veri(mesala ikinci satıra) yazılınca hemen ardından ekran silinip tekrardan veri gönderirsen ilk satıra girdiğin değerler ikinci satıra değer girerken görünür ikinci satır görünmeden silinir.ekran yenilemesinden önce bekleme koy arkadaşım birde öyle dene.
 

Forum istatistikleri

Konular
128,371
Mesajlar
917,084
Kullanıcılar
450,245
Son üye
übeyt doksar

Yeni konular

Çevrimiçi üyeler

Geri
Üst