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();
}
}
(https://i.ibb.co/B2TPH8f/Ekran-g-r-nt-s-2023-10-25-091024.png) (https://ibb.co/B2TPH8f)
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ı.