Haberler:

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

Ana Menü

16f886 lcd sorun

Başlatan ChiliPepper, 25 Ekim 2023, 10:08:51

ChiliPepper

Merhaba, 16f886 ile pcf8574at kullanarak lcd sürüyorum(sda=pin_c4,scl=pin_c3). Timer0 içerisinde c7(buz) pinini high yaptığımda lcd bozuluyor rastgele şekiller basıyor. Timer0 kullanmadan yaptığımda ya da c7 pini yerine b5 pinini high low yaptığımda bir sıkıntı olmuyor hatam nerede acaba ?

#include <16f886.h>

#device ADC=10
#FUSES NOMCLR
#FUSES PROTECT
#FUSES WDT 
#FUSES NOBROWNOUT               
#FUSES NOLVP      
#FUSES INTRC_IO

#use delay(internal=4MHz)
#use I2C(master, FAST/* = 100000*/,sda=pin_c4,scl=pin_c3, STREAM = I2C_LCD)
#include <internal_eeprom.c>
#include <I2C_LCD.c>


#define a1 pin_b2
#define b1 pin_b3
#define c1 pin_b4
#define d1 pin_b7

#define a2 pin_c1
#define b2 pin_c0
#define c2 pin_a6
#define d2 pin_a7

#define a3 pin_a4
#define b3 pin_a3
#define c3 pin_a2
#define d3 pin_a1

#define ventil pin_b5
#define buz    pin_c7
//#define buton  pin_b6
#define fan   pin_c5


#define su_k1  pin_c2
#define su_k2  pin_a5
#define su_k3  pin_a0
#define depo_5v pin_c6


unsigned int kontrol1=0,kontrol2=0,kontrol3=0,k1=0,k2=0,k3=0,x=0,y=0,z=0,t=0,m1=0,m2=0,m3=0,yaz=0,yaz1=0,yaz2=0,yaz3=0,yaz4=0,yaz5=0,yaz6=0,buz_kontrol=0,fan_durum=0;
unsigned int32 toplam=0,gtoplam=0,depo_sayac=0,sure=0,fan_sayac=0,depo_olcum=0;
float depo_deger=0;
unsigned int hata_depo=0,dur=0,depo_izin=0,start1_kontrol=0,start2_kontrol=0,start3_kontrol=0,start=0;

#int_timer0
void timer0_kesme()
{
   set_timer0(60);
   if(start==1)
   {
   buz_kontrol=1;
   sure=sure+1;
   if(sure>4000)
   {
      sure=0;   
   }
   if(sure<2000)
   {
      output_high(buz);
   }
   if(sure>1999)
   {
      output_low(buz);
   }
   }
   if(start==0 && buz_kontrol==1)
   {
      output_low(buz);
      sure=0;
      buz_kontrol=0;
   }
   
   
   
}


void birinci_goz()
{
     restart_wdt();
     
     if(!input(a1) && !input(b1) && !input(c1) && !input(d1))
     {
         LCD_Goto(1, 1);
         printf(lcd_out, "1. HAZNE HAZIR      "); 
         LCD_Goto(1, 4);
         printf(lcd_out, "TOPLAM=%Lu",toplam); 
     }
     else if(!input(a1) && !input(b1) && !input(c1) && input(d1))
     {
         if(start1_kontrol==1)
         {
            start=0;
            start1_kontrol=0;
         }
         LCD_Goto(1, 1);
         printf(lcd_out, "1. CEZVE YOK        "); 
         LCD_Goto(1, 4);
         printf(lcd_out, "TOPLAM=%Lu",toplam); 
         yaz1=0;
         yaz2=0;
         
     }
     else if(!input(a1) && !input(b1) && input(c1) && !input(d1))
     {
         LCD_Goto(1, 1);
         printf(lcd_out, "1 KISI HAZIRLANIYOR "); 
         LCD_Goto(1, 4);
         printf(lcd_out, "TOPLAM=%Lu",toplam); 
         if(yaz1==0)
         {
            toplam=toplam+1;
            write_int32_eeprom(16,toplam);
            LCD_Goto(1, 4);
            printf(lcd_out, "TOPLAM=%Lu",toplam); 
            yaz1=1;
         }
         fan_durum=0;
         output_low(fan);
         start1_kontrol=1;
     }
     else if(!input(a1) && input(b1) && !input(c1) && !input(d1))
     {
         LCD_Goto(1, 1);
         printf(lcd_out, "2 KISI HAZIRLANIYOR "); 
         LCD_Goto(1, 4);
         printf(lcd_out, "TOPLAM=%Lu",toplam); 
         if(yaz2==0)
         {
            toplam=toplam+2;
            write_int32_eeprom(16,toplam);
            LCD_Goto(1, 4);
            printf(lcd_out, "TOPLAM=%Lu",toplam); 
            yaz2=1;
         }
         fan_durum=0;
         output_low(fan);
         start1_kontrol=1;
     }
     else if(input(a1) && !input(b1) && !input(c1) && !input(d1))
     {
         LCD_Goto(1, 1);
         printf(lcd_out, "1 KISI HAZIRLANDI   "); 
         start=1;        
         fan_durum=1;
         fan_sayac=0;
     }
     else if(!input(a1) && !input(b1) && input(c1) && input(d1))
     {
         LCD_Goto(1, 1);
         printf(lcd_out, "2 KISI HAZIRLANDI   "); 
         start=1;      
         fan_durum=1;
         fan_sayac=0;
     }
     else if(!input(a1) && input(b1) && input(c1) && !input(d1))
     {
         LCD_Goto(1, 1);
         printf(lcd_out, "TEMIZLIK YAPILIYOR  "); 
         LCD_Goto(1, 4);
         printf(lcd_out, "TOPLAM=%Lu",toplam); 
         fan_durum=0;
         output_low(fan);
         start1_kontrol=1;
     }
     else if(input(a1) && input(b1) && !input(c1) && !input(d1))
     {
         LCD_Goto(1, 1);
         printf(lcd_out, "TEMIZLIK YAPILDI    "); 
         LCD_Goto(1, 4);
         printf(lcd_out, "TOPLAM=%Lu",toplam); 
         start=1;
         fan_durum=1;
         fan_sayac=0;
     }
     else if(input(a1) && input(b1) && input(c1) && !input(d1))
     {
         LCD_Goto(1, 1);
         printf(lcd_out, "KAHVE IPTAL         "); 
         LCD_Goto(1, 4);
         printf(lcd_out, "TOPLAM=%Lu",toplam); 
         start=1;
         fan_durum=1;
         fan_sayac=0;
     }
     else if(input(a1) && !input(b1) && input(c1) && !input(d1))
     {
         LCD_Goto(1, 1);
         printf(lcd_out, "TEMIZLIK IPTAL      "); 
         LCD_Goto(1, 4);
         printf(lcd_out, "TOPLAM=%Lu",toplam); 
         start=1;
         fan_durum=1;
         fan_sayac=0;
     }
     else if(input(a1) && input(b1) && !input(c1) && input(d1))
     {
         LCD_Goto(1, 1);
         printf(lcd_out, "DEPO BOS            "); 
         LCD_Goto(1, 4);
         printf(lcd_out, "TOPLAM=%Lu",toplam); 
     }

}



void motor()
{
     restart_wdt();
     if(!input(a1) && input(b1) && input(c1) && input(d1))
     {
         LCD_Goto(1, 1);
         printf(lcd_out, "                    ");
         LCD_Goto(1, 1);
         printf(lcd_out, "1.MOTOR ARIZA"); 
         output_high(buz);
     }
     if(!input(a2) && input(b2) && input(c2) && input(d2))
     {
         LCD_Goto(1, 2);
         printf(lcd_out, "                    ");
         LCD_Goto(1, 2);
         printf(lcd_out, "2.MOTOR ARIZA"); 
         output_high(buz);
     }
     if(!input(a3) && input(b3) && input(c3) && input(d3))
     {
         LCD_Goto(1, 3);
         printf(lcd_out, "                    ");
         LCD_Goto(1, 3);
         printf(lcd_out, "3.MOTOR ARIZA"); 
         output_high(buz);
     }
}





void main()
{
   
     setup_timer_1(T1_DISABLED);     
     setup_timer_2(T2_DISABLED,0,1);
     setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);
     set_timer0(60);     
     setup_CCP1(CCP_OFF);            
     setup_CCP2(CCP_OFF);        
     setup_comparator(NC_NC_NC_NC);   
     setup_adc(ADC_CLOCK_DIV_2);
     setup_adc_ports(sAN10);
     setup_WDT(WDT_2304MS);
     output_low(ventil);
     output_low(buz);
     output_low(depo_5v);
     LCD_Begin(0x7E);
     LCD_Goto(1, 1);
     printf(lcd_out, "                    ");
     LCD_Goto(1, 1);
     printf(lcd_out, "ACILIYOR...");    
     restart_wdt();
     delay_ms(100);
     restart_wdt();
     toplam=read_int32_eeprom(16);
     if (toplam>990000)
     {
        toplam=0;
     }
     gtoplam=read_int32_eeprom(32);
     if (gtoplam>990000)
     {
        gtoplam=0;
     }
     LCD_Goto(1, 4);
     printf(lcd_out, "                    ");
     LCD_Goto(1, 4);
     printf(lcd_out, "TOPLAM=%Lu",toplam); 
     LCD_Goto(14, 4);
     printf(lcd_out, "SU DOLU");
     kontrol1=0;
     kontrol2=0;
     kontrol3=0;
     x=0;
     y=0;
     z=0;
     t=0;
     m1=0;
     m2=0;
     m3=0;
     k1=1;
     k2=1;
     k3=1;
     yaz=0;
     start=0;
     sure=0;
     hata_depo=0;
     dur=0;
     depo_sayac=0;
     buz_kontrol=0;
     start1_kontrol=0;
     start2_kontrol=0;
     start3_kontrol=0;
     fan_durum=0;
     depo_izin=0;
     enable_interrupts(INT_timer0);
     enable_interrupts(GLOBAL);
     restart_wdt();
     while(1)
     {         
   
      birinci_goz();
      motor();
      restart_wdt();
      
     if(input(su_k1)==1 && input(su_k2)==1 && input(su_k3)==1)
     {
         set_adc_channel(10);
         delay_us(20);
         depo_olcum = read_adc();
         depo_deger = 0.0048828125*depo_olcum;
         
         if(depo_deger<3 && depo_sayac<80)
         {
            output_high(ventil);
            depo_sayac=depo_sayac+1; 
            dur=1;
            depo_izin=1;           
            LCD_Goto(14, 4);
            printf(lcd_out, "       "); 
            LCD_Goto(14, 4);
            printf(lcd_out, "SU AZ"); 
         }
         else if(depo_deger>3 && depo_izin==1)
         {
            delay_ms(500);
            depo_sayac=0;
            output_low(ventil);
            hata_depo=0;
            depo_izin=0;
            if(dur==1)
            {
               output_low(buz);
               dur=0;
               LCD_Goto(14, 4);
               printf(lcd_out, "SU DOLU"); 
            }
         }
         else if(depo_deger<3 && depo_sayac>79)
         {
            output_low(ventil);
            output_high(buz);
            LCD_Goto(14, 4);
            printf(lcd_out, "SU HATA");
            hata_depo=1;
         }      
      }
      if(fan_durum==1)
      {
         output_high(fan);
         fan_sayac=fan_sayac+1;
         if(fan_sayac>50)
         {
            output_low(fan);
            fan_durum=0;
            fan_sayac=0;
         }
      }   
      restart_wdt();
      
   }
 }





ChiliPepper

timer0 fonksiyonu içindeki mantıksal operatörleri <,> yerine == yapınca düzeldi. Her kesmede output_high(buz); tekrarlamayınca düzeldi sanırım ama sorunu hala anlamadım başka bir pinde sıkıntı yokken c7 pininde neden bunu yaptığını.