Termometre şart koşma ayar yapma hakkında yardım

Adiltgrl

Üye
Katılım
27 Haz 2024
Mesajlar
1
Puanları
1
Yaş
23
Merhabalar bana lütfen yardım edermisiniz bir devre yapmaya çalışıyorum internetten birşey buldum ama buna nasıl şart koşabilirim mesela saat tarih ayarı vs yapılabiliyor derece de var ama şöyle yapmam lazım mesela

anlık 35 derece diyelim 40 derece olunca A portun 4. bacağına tetik versin mesela veya bunu ayarlayabileyim
mesela 12 saatte 1 a portunun 5. bacağını tetik verip kapatsın bu şekilde nasıl düzenleyebilirim lütfen yardım edin

kısaca ayarlı tetikli derece ayarı ve saat ayarı nasıl yapabilirim lütfen yardım edin

#include <16f628a.h> // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.
#fuses INTRC_IO,NOWDT,NOBROWNOUT,NOLVP,NOPUT,NOCPD // Fuses ayarları
#use delay (clock=4000000) //4mhz delay süresi

#include "flexy_lcd.c" //lcd c dosyası
#include "ds18b20.c" //termometre entegresi c dosyası
#include "ds1302.C" //saat entegresi c dosyasi

int8 sicak,saniye,dakika,saat,gun,ay,hafta,yil,ayar=0;

void lcd()
{
lcd_gotoxy(1,1);
printf(lcd_putc,"%02d/%02d/%02d",gun,ay,yil);
lcd_gotoxy(1,2);
printf(lcd_putc,"%02d:%02d:%02d",saat,dakika,saniye);
lcd_gotoxy(11,1);
switch(hafta)
{
case 1: printf(lcd_putc,"Pzts"); break;
case 2: printf(lcd_putc,"SALI"); break;
case 3: printf(lcd_putc,"CARS"); break;
case 4: printf(lcd_putc,"PERS"); break;
case 5: printf(lcd_putc,"CUMA"); break;
case 6: printf(lcd_putc,"Cmts"); break;
case 7: printf(lcd_putc,"Pzar"); break;
}
}
void sicaklik()
{
sicak=ds1820_read(); //termometre entegresindeki değeri sicak değişkenine aktar
lcd_gotoxy(11,2);printf(lcd_putc,"%02d",sicak);
lcd_gotoxy(13,2);lcd_send_byte(0x4a,0xdf);lcd_gotoxy(14,2);printf(lcd_putc,"C");
}
void ayaryap(){
//(0x0d) lcd belirtilen konumun yanıp sönmesi

if(input(pin_b0)==0){ayar++;delay_ms(20);printf(lcd_putc,"\f AYAR MODU");delay_ms(450);printf(lcd_putc,"\f");}

while(ayar==1){
lcd();lcd_gotoxy(1,1);lcd_send_byte(0x01,0x0d);lcd_gotoxy(2,1);lcd_send_byte(0x02,0x0d);
if(input(pin_a3)==0){gun++;delay_ms(20);if(gun==32){gun=1;}while(input(pin_a3)==0);}
if(input(pin_a4)==0){gun--;delay_ms(20);if(gun==0){gun=31;}while(input(pin_a4)==0);}
if(input(pin_b0)==0){ayar++;delay_ms(200);while(input(pin_b0)==0);}}

while(ayar==2){
lcd();lcd_gotoxy(4,1);lcd_send_byte(0x04,0x0d);lcd_gotoxy(5,1);lcd_send_byte(0x05,0x0d);
if(input(pin_a3)==0){ay++;delay_ms(20);if(ay==13){ay=1;}while(input(pin_a3)==0);}
if(input(pin_a4)==0){ay--;delay_ms(20);if(ay==0){ay=12;}while(input(pin_a4)==0);}
if(input(pin_b0)==0){ayar++;delay_ms(200);while(input(pin_b0)==0);}}


while(ayar==3){
lcd();lcd_gotoxy(7,1);lcd_send_byte(0x07,0x0d);lcd_gotoxy(8,1);lcd_send_byte(0x08,0x0d);
if(input(pin_a3)==0){yil++;delay_ms(20);while(input(pin_a3)==0);}
if(input(pin_a4)==0){yil--;delay_ms(20);if(yil==-1)yil=99;while(input(pin_a4)==0);}
if(input(pin_b0)==0){ayar++;delay_ms(200);while(input(pin_b0)==0);}}

while(ayar==4){
lcd_gotoxy(11,1);lcd_send_byte(0x11,0x0d);lcd();delay_us(5);
if(input(pin_a3)==0){hafta++;delay_ms(20);if(hafta==8){hafta=1;}while(input(pin_a3)==0);}
if(input(pin_a4)==0){hafta--;delay_ms(20);if(hafta==0){hafta=7;}while(input(pin_a4)==0);}
if(input(pin_b0)==0){ayar++;delay_ms(200);while(input(pin_b0)==0);}}

while(ayar==5){
lcd_gotoxy(1,2);lcd_send_byte(0x40,0x0d);lcd_gotoxy(2,2);lcd_send_byte(0x41,0x0d);lcd();
if(input(pin_a3)==0){saat++;delay_ms(20);if(saat==24){saat=0;}while(input(pin_a3)==0);}
if(input(pin_a4)==0){saat--;delay_ms(20);if(saat==-1){saat=23;}while(input(pin_a4)==0);}
if(input(pin_b0)==0){ayar++;delay_ms(200);while(input(pin_b0)==0);}}

while(ayar==6){
lcd_gotoxy(4,2);lcd_send_byte(0x43,0x0d);lcd_gotoxy(5,2);lcd_send_byte(0x44,0x0d);lcd();
if(input(pin_a3)==0){dakika++;delay_ms(20);if(dakika==60){dakika=0;}while(input(pin_a3)==0);}
if(input(pin_a4)==0){dakika--;delay_ms(20);if(dakika==-1){dakika=59;}while(input(pin_a4)==0);}
if(input(pin_b0)==0){ayar++;delay_ms(200);while(input(pin_b0)==0);}}


while(ayar==7){rtc_set_datetime(gun,ay,yil,hafta,saat,dakika); //değişkenleri saat entegresine aktar.
delay_ms(20);
printf(lcd_putc,"\f AYARLAR\n YUKLENIYOR");
delay_ms(1000);printf(lcd_putc,"\f");
ayar=0;}
}
void main()
{
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
lcd_init(); //lcd yi hazırla
rtc_init(); //saat entegresini hazırla
delay_ms(5);
printf(lcd_putc,"\fAIBU");
delay_ms(3000);
printf(lcd_putc,"\f");
delay_ms(5);

while(1)
{
if(ayar==0){rtc_get_time(saat,dakika,saniye);rtc_get_date(gun,ay,yil,hafta);}
sicaklik();
lcd();
ayaryap();
}
}
 
ama şöyle yapmam lazım mesela

anlık 35 derece diyelim 40 derece olunca A portun 4. bacağına tetik versin mesela veya bunu ayarlayabileyim
mesela 12 saatte 1 a portunun 5. bacağını tetik verip kapatsın bu şekilde nasıl düzenleyebilirim
Komparatör ve Timer ile yapmak istediğinizi anlatırsanız daha rahat incelenir.

Programınızda düzeltilmesi gereken kısımlar var

Sıcaklık Okuması ve Gösterimi:(Basit bir detay ancak kolaylıkla eklenebilir)
'sicak' değişkenini 'ds1820_read()' ile doğru şekilde okuyorsunuz ancak sıcaklık birimini ekrana yazdırırken derece işareti ('0xDF') kullanmak için 'cd_send_byte(0x4a, 0xdf);' komutunu eklemişsiniz. Ancak bu komut, ekranın doğru bir şekilde gösterilmesi gereken yerde değil ('lcd_gotoxy(13, 2)').
Doğru sıcaklık birimi işaretini doğru konuma ekleyin:

Mesela
lcd_gotoxy(13, 2);
lcd_send_byte(0x4a, 0xdf); // Derece işareti
lcd_gotoxy(14, 2);
printf(lcd_putc, "C");

Zaman Tabanlı Tetikleme:
'saat_trigger_sayac' değişkenini kullanarak her 12 saatte bir bir çıkışı tetikleme.
Ancak check_time_trigger() fonksiyonu her döngüde çalıştırılıyor ve bu, süre sayacının doğru bir şekilde çalışmasını sağlamaz.
Daha güvenilir bir zaman tabanlı tetikleme için saat_trigger_sayac değerini zamanı daha kesin bir şekilde izleyecek şekilde ayarlamalısınız.
Ayrıca, zamanlayıcıların düzgün çalışması için donanımın timerlerini kullanmak daha iyi olabilir.

Ayarlama Modu:
'ayar' değişkenini kullanarak ayarlama modu,
Ancak ayarları doğrulamak için gerekli giriş kontrollerini yaparken 'delay_ms()' gibi sabit bekleme süreleri kullanmak yerine, girişlerin ne zaman değiştiğini algılayacak bir yöntem,
örneğin, kenar algılama (Edge Triggering) kullanmak daha uygun olabilir.

RTC (Gerçek zaman saati ve Çıkışları Kontrolü ile ilgili düzeltemere de ihtiyaç var.
:
 

Forum istatistikleri

Konular
128,844
Mesajlar
920,947
Kullanıcılar
450,947
Son üye
sitroen91

Yeni konular

Geri
Üst