16f877a +sht11 nem ısı ölçme projesi

Başlatan aygun78, 14 Mayıs 2015, 11:55:36

aygun78

Merhabalar.
Projem ektedir. Kodlar forum sitelerinden devşirmedir.(çoğu sizin zaten)
Sorunum şu denemelerde sorunsuz çalışıyor.
1:Isı bir kaç derece yüksek ve nem de yüksek çıkıyor sorun SHT11.c den olabilir mi ?
2:Ledlerin yerine 12 v röle sürmek için 2N5551 kullanmayı düşünüyorum araya piç ile bağlantı arasına direnç koymam gerekir mi ?
3:port yönlendirme ayarlarını tam olarak yapmadım. nasıl yapmalıyım?
4:%84 rom kullanımı sorun oluşturur mu ?
5:Menu daha kullanışlı olabilir mi ?
6:Parazit için devreye neler eklemeliyim ?

#include <16F877A.h>
#fuses HS,NOWDT,PUT,NOPROTECT,NOLVP
#use delay(clock=4000000)
#define use_portb_lcd TRUE

#include <internal_eeprom.c>
#include<lcd.c>
#include<sht11.c>
// TUSLAR
#define ENTER PIN_A0
#define YUKARI  PIN_A1
#define ASAGI  PIN_a2
#define ESC  PIN_a3
//--------------cikislar-----------------------

int8 sayi,i=0,menu=0,menu_say=0,set_m=0,m_sn=0,sn=0,dkk=0,saat=0,gun,gun2, motor,motor2;
float set_isi,set_nem,set_isi_has,set_nem_has,restemp, truehumid;

/*A Portunun tüm bacakları çıkış olarak ayarlanıyor.*/
#int_timer0  // Timer0 kesmesi
void  timer0_kesme ()   // Kesme fonksiyonu ismi

{
    set_timer0(60);   // TMR0 değeri belirleniyor
    i++;   // i değeri 1 arttırılıyor   
    if (i==20)  // i değeri X'ye eşitse
       {  sn++;
          m_sn++;
          i=0;
       }
       else if (sn>59){dkk++;sn=0;}
       else if (dkk>59){saat++;dkk=0;}
       else if (saat>23){gun++;saat=0;
                 write_eeprom(9,gun);}
       
}
void write_float_to_eeprom(int8 addr, float data)
{
int8 i;

for(i = 0; i < 4; i++)
     write_eeprom(addr + i, *((int8*)&data + i) ) ;
}

//--------------------------------------
float read_float_from_eeprom(int8 addr)
{
int8 i;
float data;

for(i = 0; i < 4; i++)
   *((int8*)&data + i) = read_eeprom(addr + i);

return(data);
}

void ee_oku()
{
sayi=read_eeprom(1);
if (sayi==255)
{
delay_ms(20);
set_isi=37.5;
write_float_to_eeprom(10, set_isi);
delay_ms(20);
set_isi_has=0.2;
write_float_to_eeprom(20,set_isi_has);
delay_ms(20);
set_nem=60.0;
write_float_to_eeprom(30,set_nem);
delay_ms(20);
set_nem_has=10.0;
write_float_to_eeprom(40,set_nem_has);
delay_ms(20);
gun=1;
write_eeprom(15,gun);
delay_ms(20);
motor2=10;
write_eeprom(25,motor2);
delay_ms(20);
motor=1;
write_eeprom(35,motor);
delay_ms(20);
gun2=17;
write_eeprom(45,gun2);
delay_ms(20);
write_eeprom(1,1);
}
else
{
delay_ms(20);
set_isi=read_float_from_eeprom(10);
delay_ms(20);
set_isi_has=read_float_from_eeprom(20);
delay_ms(20);
set_nem=read_float_from_eeprom(30);
delay_ms(20);
set_nem_has=read_float_from_eeprom(40);
delay_ms(20);
gun=read_eeprom(15);
delay_ms(20);
gun2=read_eeprom(45);
delay_ms(20);
motor2=read_eeprom(25);
delay_ms(20);
motor=read_eeprom(35);
delay_ms(20);
}
}

void getir()

if (input(ENTER)&&(menu==0))
   {
   printf(lcd_putc,"\f");
   menu=1;
   menu_say=0;
   m_sn=0;
   }
 
  if ((menu>0)&&(set_m==0))
  {
     
   switch(menu_say)
         {
            case 0:
             printf(lcd_putc,"\f");
               lcd_gotoxy(1,1);
               printf(lcd_putc,">1-ISI SET");
               lcd_gotoxy(1,2);
               printf(lcd_putc," 2-ISI HASSASIYET");
               if (input(ENTER)&&(m_sn>0)) {m_sn=0;set_m=1;printf(lcd_putc,"\f");} //set menüye git
               break;
            case 1:
             printf(lcd_putc,"\f");
               lcd_gotoxy(1,1);
               printf(lcd_putc," 1-ISI SET");
               lcd_gotoxy(1,2);
               printf(lcd_putc,">2-ISI HASSASIYET");
               if (input(ENTER)&&(m_sn>0)) {m_sn=0;set_m=1;printf(lcd_putc,"\f");} //set menüye git
               break;
            case 2:
             printf(lcd_putc,"\f");
               lcd_gotoxy(1,1);
               printf(lcd_putc,">3-NEM SET");
               lcd_gotoxy(1,2);
               printf(lcd_putc," 4-NEM HASSASIYET");
               if (input(ENTER)&&(m_sn>0)) {m_sn=0;set_m=1;printf(lcd_putc,"\f");} //set menüye git
               break;
            case 3:
             printf(lcd_putc,"\f");
               lcd_gotoxy(1,1);
               printf(lcd_putc," 3-NEM SET");
               lcd_gotoxy(1,2);
               printf(lcd_putc,">4-NEM HASSASIYET");
               if (input(ENTER)&&(m_sn>0)) {m_sn=0;set_m=1;printf(lcd_putc,"\f");} //set menüye git
               break;
            case 4:
             printf(lcd_putc,"\f");
               lcd_gotoxy(1,1);
               printf(lcd_putc,">5-SAAT AYARI");
               lcd_gotoxy(1,2);
               printf(lcd_putc," 6-DAK. AYARI");
               if (input(ENTER)&&(m_sn>0)) {m_sn=0;set_m=1;printf(lcd_putc,"\f");} //set menüye git
               break;
            case 5:
             printf(lcd_putc,"\f");
               lcd_gotoxy(1,1);
               printf(lcd_putc," 5-SAAT AYARI");
               lcd_gotoxy(1,2);
               printf(lcd_putc,">6-DAK. AYARI");
               if (input(ENTER)&&(m_sn>0)) {m_sn=0;set_m=1;printf(lcd_putc,"\f");} //set menüye git
               break;   
                case 6:
             printf(lcd_putc,"\f");
               lcd_gotoxy(1,1);
               printf(lcd_putc,">7-MOTOR AYARI");
               lcd_gotoxy(1,2);
               printf(lcd_putc," 8-CEVIRME SUR.");
               if (input(ENTER)&&(m_sn>0)) {m_sn=0;set_m=1;printf(lcd_putc,"\f");} //set menüye git
               break;
               case 7:
             printf(lcd_putc,"\f");
               lcd_gotoxy(1,1);
               printf(lcd_putc," 7-MOTOR AYARI");
               lcd_gotoxy(1,2);
               printf(lcd_putc,">8-CEVIRME SUR.");
               if (input(ENTER)&&(m_sn>0)) {m_sn=0;set_m=1;printf(lcd_putc,"\f");} //set menüye git
               break;
               case 8:
             printf(lcd_putc,"\f");
               lcd_gotoxy(1,1);
               printf(lcd_putc,">9-GUN AYARI");
               lcd_gotoxy(1,2);
               printf(lcd_putc,"10-MOTOR DUR.");
               if (input(ENTER)&&(m_sn>0)) {m_sn=0;set_m=1;printf(lcd_putc,"\f");} //set menüye git
               break;             
               case 9:
             printf(lcd_putc,"\f");
               lcd_gotoxy(1,1);
               printf(lcd_putc," 9-GUN AYARI");
               lcd_gotoxy(1,2);
               printf(lcd_putc,">10-MOTOR DUR.");
               if (input(ENTER)&&(m_sn>0)) {m_sn=0;set_m=1;printf(lcd_putc,"\f");} //set menüye git
               break;
               }
                     
               
        if(input(ASAGI)&&(menu_say<11))
         {
             while(input(ASAGI));
             ++menu_say;
             if(menu_say==10)
              menu_say=0;
               }
          else if(input(YUKARI)&&(menu_say>0))     
               {
             while(input(YUKARI));
             --menu_say;
             if(menu_say==0)
              menu_say=0;
               }
           
           
      if (input(Esc)&&(menu==1)&&(m_sn>1))
      {
      printf(lcd_putc,"\f");
       menu=0;
         }
   
      }
     
     
     
     
     
}
void getir2()

{
if ((menu>0)&&(set_m==1))
  {
     
   switch(menu_say)
         {
            case 0:
               lcd_gotoxy(1,1);
               printf(lcd_putc," ISI SET AYARI  ");
               lcd_gotoxy(1,2);
                              printf(lcd_putc," SET :%3.1f",set_isi);
               if(input(ENTER)) {write_float_to_eeprom(10,set_isi);}
              if(input(ASAGI)&&(set_isi>0))
              {
              while(input(ASAGI));
              set_isi=set_isi-0.1;
               }
             else if(input(YUKARI)&&(set_isi<40))     
               {
             while(input(YUKARI));
             set_isi=set_isi + 0.1;
               }               
               break;
               
            case 1:
               lcd_gotoxy(1,1);
               printf(lcd_putc," ISI HAS. AYARI  ");
               lcd_gotoxy(1,2);
               printf(lcd_putc,"HAS:%3.1f",set_isi_has);
               if(input(ENTER)) {write_float_to_eeprom (20,set_isi_has);}
                if(input(ASAGI)&&(set_isi_has>0))
              {
              while(input(ASAGI));
              set_isi_has= set_isi_has-0.1;
               }
             else if(input(YUKARI)&&(set_isi_has<5))     
               {
             while(input(YUKARI));
            set_isi_has= set_isi_has+0.1;
               }               
               break;
            case 2:
               lcd_gotoxy(1,1);
               printf(lcd_putc," NEM SET AYARI  ");
               lcd_gotoxy(1,2);
                     
               printf(lcd_putc," SET %3.1f",set_nem);
               if(input(ENTER)) {write_float_to_eeprom(30,set_nem);}             
                if(input(ASAGI)&&(set_nem>0))
              {
              while(input(ASAGI));
             set_nem = set_nem-1.0;
               }
             else if(input(YUKARI)&&(set_nem<80))     
               {
             while(input(YUKARI));
             set_nem=set_nem+1.0;
               }               
               break;
            case 3:
               lcd_gotoxy(1,1);
               printf(lcd_putc," NEM HAS AYARI  ");
               lcd_gotoxy(1,2);
               printf(lcd_putc," SET :%3.1f",set_nem_has);
               if(input(ENTER)) {write_float_to_eeprom(40,set_nem_has);}             
                if(input(ASAGI)&&(set_nem_has>0))
              {
              while(input(ASAGI));
              set_nem_has= set_nem_has-1;
               }
             else if(input(YUKARI)&&(set_nem_has<30))     
               {
             while(input(YUKARI));
              set_nem_has=set_nem_has+1;
               }
               if ((input(ESC))&&(m_sn>0)) {
                set_m=0;m_sn=0;write_float_to_eeprom(40,set_nem_has);}
               break;
               case 4:
               lcd_gotoxy(1,1);
               printf(lcd_putc," SAAT AYARI ");
               lcd_gotoxy(1,2);
               printf(lcd_putc," SET :%2D",SAAT);
             
              if(input(ASAGI)&&(saat>0))
              {
              while(input(ASAGI));
              --saat;
               }
             else if(input(YUKARI)&&(saat<23))     
               {
             while(input(YUKARI));
             ++saat;
               }
               break;
                case 5:
               lcd_gotoxy(1,1);
               printf(lcd_putc,"DAKIKA AYARI");
               lcd_gotoxy(1,2);
               printf(lcd_putc," SET :%2D",dkk);

                if(input(ASAGI))
              {
              while(input(ASAGI));
              --dkk;
              if(dkk==-1)
             dkk=59;
               }
             else if(input(YUKARI))     
               {
             while(input(YUKARI));
             ++dkk;
             if(dkk==60)
             dkk=0;
             
               }
               break;
                 case 6:
               lcd_gotoxy(1,1);
               printf(lcd_putc,"MOTOR AYARI");
               lcd_gotoxy(1,2);
               printf(lcd_putc," %D.saate bir",motor);
               if(input(ENTER)) { write_eeprom(35,motor);}
                if(input(ASAGI)&&(motor>0))
              {
              while(input(ASAGI));
              --motor;
               }
             else if(input(YUKARI)&&(motor<3))     
               {
             while(input(YUKARI));
             ++motor;
               }
             
               break;
                   case 7:
               lcd_gotoxy(1,1);
               printf(lcd_putc,"CEVIRME SUR.");
               lcd_gotoxy(1,2);
               printf(lcd_putc," %D.saniye",motor2);
               if(input(ENTER)) {write_eeprom (25,motor2);}
                if(input(ASAGI)&&(motor2>5))
              {
              while(input(ASAGI));
              --motor2;
               }
             else if(input(YUKARI)&&(motor2<60))     
               {
             while(input(YUKARI));
             ++motor2;
               }
               
               break;
               case 8:
               lcd_gotoxy(1,1);
               printf(lcd_putc,"GUN AYARI");
               lcd_gotoxy(1,2);
               printf(lcd_putc," %D.GUN",gun);
               if(input(ENTER)) {write_eeprom (15,gun);
               delay_ms(150);
               }
                if(input(ASAGI)&&(gun>0))
              {
              while(input(ASAGI));
              --gun;
               }
             else if(input(YUKARI))     
               {
             while(input(YUKARI));
             ++gun;
             if(gun==30)
             gun=1;
               }
               
               break;
               case 9:
               lcd_gotoxy(1,1);
               printf(lcd_putc,"MOTOR DURMA ");
               lcd_gotoxy(1,2);
               printf(lcd_putc," %D.GUN",gun2);
               if(input(ENTER)) {write_eeprom (45,gun2);
               delay_ms(150);
               }
                if(input(ASAGI)&&(gun2>10))
              {
              while(input(ASAGI));
              --gun2;
               }
             else if(input(YUKARI)&&(gun2<30))     
               {
             while(input(YUKARI));
             ++gun2;
               }
               
               break;
         
               }
            if ((input(ESC))&&(m_sn>0)) {set_m=0;m_sn=0;
           
             printf(lcd_putc,"\f");
write_float_to_eeprom(10,set_isi);
delay_ms(20);
write_float_to_eeprom(20,set_isi_has);
delay_ms(20);
write_float_to_eeprom(30,set_nem);
delay_ms(20);
write_float_to_eeprom(40,set_nem_has);
delay_ms(20);
write_eeprom(15,gun);
delay_ms(20);
write_eeprom(25,motor2);
delay_ms(20);
write_eeprom(35,motor);
delay_ms(20);
write_eeprom(45,gun2);
delay_ms(20);
}
  }
}
void isi_oku ()
{
sht_init();
sht_rd (restemp, truehumid);
}


void lcd_bilgi (){
   LCD_gotoxy(1,1);
   printf(lcd_putc,"ISI:%3.1f ",restemp);   
   LCD_gotoxy(1,2);
   printf(lcd_putc,"%d.GUN",gun);
   LCD_gotoxy(10,1);
   printf(lcd_putc,"RH:%3.1f%%",truehumid);
   LCD_gotoxy(9,2);
   printf(lcd_putc,"%02d",saat);   
   LCD_gotoxy(11,2);
   printf(lcd_putc,":%02d",dkk);
     LCD_gotoxy(14,2);
   printf(lcd_putc,":%02d",sn);
}
void main()
{

lcd_init();
   printf(lcd_putc," \fISI OKUNUYOR...."); 
   isi_oku(); 
  delay_ms(2000);

ee_oku();
delay_ms(500);
setup_timer_0(RTCC_INTERNAL | RTCC_DIV_256); // Timer0 ayarları yapılıyor
set_timer0(60);   // TMR0 değeri belirleniyor
enable_interrupts(INT_timer0); // int_timer0 kesmesini aktif yapar
enable_interrupts(GLOBAL); 
// set_tris_D(0x00);
// B portu komple çıkış
//output_D(0x00);
printf (lcd_putc,"\f"); 
while(1)
{
  isi_oku(); 
 
  if (menu==0) {lcd_bilgi ();}   
getir();
getir2();

if ((set_isi-set_isi_has)>restemp)
{OUTPUT_HIGH(pin_d0);}
if (restemp>set_isi)
{OUTPUT_low(pin_d0);}
if ((set_nem-set_nem_has)> truehumid)
{OUTPUT_HIGH(pin_d1);}
if (truehumid>set_nem)
{OUTPUT_low(pin_d1);}
if(motor==1)
         {           
                if( (gun<gun2)&&(dkk==00)&&(sn==00))
              {
OUTPUT_HIGH(pin_d2);

              }
               }
               
if(motor==2)
         {     
              if( (gun<gun2)&&(saat==0)&&(dkk==00)&&(sn==00))
              {OUTPUT_HIGH(pin_d2); }
              if( (gun<gun2)&&(saat==2)&&(dkk==00)&&(sn==00))
              {OUTPUT_HIGH(pin_d2); }
              if( (gun<gun2)&&(saat==4)&&(dkk==00)&&(sn==00))
              {OUTPUT_HIGH(pin_d2); }
              if( (gun<gun2)&&(saat==6)&&(dkk==00)&&(sn==00))
              {OUTPUT_HIGH(pin_d2); }
              if( (gun<gun2)&&(saat==8)&&(dkk==00)&&(sn==00))
              {OUTPUT_HIGH(pin_d2); }
              if( (gun<gun2)&&(saat==10)&&(dkk==00)&&(sn==00))
              {OUTPUT_HIGH(pin_d2); }
              if( (gun<gun2)&&(saat==12)&&(dkk==00)&&(sn==00))
              {OUTPUT_HIGH(pin_d2); }
              if( (gun<gun2)&&(saat==14)&&(dkk==00)&&(sn==00))
              {OUTPUT_HIGH(pin_d2); }
              if( (gun<gun2)&&(saat==16)&&(dkk==00)&&(sn==00))
              {OUTPUT_HIGH(pin_d2); }
              if( (gun<gun2)&&(saat==18)&&(dkk==00)&&(sn==00))
              {OUTPUT_HIGH(pin_d2); }
              if( (gun<gun2)&&(saat==20)&&(dkk==00)&&(sn==00))
              {OUTPUT_HIGH(pin_d2); }
              if( (gun<gun2)&&(saat==22)&&(dkk==00)&&(sn==00))
              {OUTPUT_HIGH(pin_d2); }             
             
               }                   
  if(motor==3)
         {       
              if( (gun<gun2)&&(saat==0)&&(dkk==00)&&(sn==00))
              {OUTPUT_HIGH(pin_d2); }
              if( (gun<gun2)&&(saat==3)&&(dkk==00)&&(sn==00))
              {OUTPUT_HIGH(pin_d2); }
              if( (gun<gun2)&&(saat==6)&&(dkk==00)&&(sn==00))
              {OUTPUT_HIGH(pin_d2); }
              if( (gun<gun2)&&(saat==9)&&(dkk==00)&&(sn==00))
              {OUTPUT_HIGH(pin_d2); }
              if( (gun<gun2)&&(saat==12)&&(dkk==00)&&(sn==00))
              {OUTPUT_HIGH(pin_d2); }
              if( (gun<gun2)&&(saat==15)&&(dkk==00)&&(sn==00))
              {OUTPUT_HIGH(pin_d2); }
              if( (gun<gun2)&&(saat==18)&&(dkk==00)&&(sn==00))
              {OUTPUT_HIGH(pin_d2); }
              if( (gun<gun2)&&(saat==21)&&(dkk==00)&&(sn==00))
              {OUTPUT_HIGH(pin_d2); }     
             
             
               }         
             
  if (sn> motor2)
{OUTPUT_LOW(pin_d2);}       
     
       
}
 
}

ete

Bu sensörü Türkiyede belki ilk kullananlardan biri idim. Sensörün Basic de okunması için epeyce uğraştım. Asıl sorun komplike hesaplama formülünde idi. Onuda 32 bit matematik mantığını kullanarak aşmış idim. Daha sonra mode dosyası çıktı ve bazır örnek kodlar da yayınlandı.  Bu arada bir bitirme projesine konu oldu bu sensör ve projeyi yapan kişi ölçüm değerlerini bu işe uğraşan bir firmada test ettirdi ve sonunda bir sertifika aldı. Bu sertifikaya bakarsanız ölçülen değerler gerçek değerlere son derece yakın. Simulasyonda ölçülen değerler bir kaç derece farklı çıkıyor. Ama gerçekte ölçüm değerleri doğru dur. Bundan emin olabilirsiniz. Tabiiki sensörün konumuda bu işte etkin rol oynar.

Röle kullanırken transistör ile pic arasına 1K direnç koyarsanız iyi olur.

Port yönlendirmeden neyi kast ettiğini anlamadım. TRIS registerlerini giriş çıkışlara göre ayarlamak gerekir. Ama sensör için data ve clk pinlerini çıkış ayarlamakta yarar var. Zira data pini arada bir giriş olması gerekiyor ama kütüphane dosyası bu işi otomatik halletmesi gerekir.

%84 rom kullanımı yine simulasyona göre bir değer ise bunu dikkate almamanızı öneririm.  Diğer taraftan denetleyicinin belirli bir hafızası var ve tamamını doldurarak de çalışma yapmanız mümkündür.

Menü daha kullanışlı nasıl olur bilemiyorum Onıu kendin bulmalısın.
Parazit için devreye 100nf eklemekten başka bir şey yapma. Şemayı göremiyorum V.8 le hazırlanmış dosya onu açamıyorum maalesef.
Ete

aygun78

ete hocam;
Sht11'i datasheetinde belirtilen elemanlara göre bağladım. Kablo Mouse kablosu ve yaklaşık 1,5m falan simülasyondaki fark önemli değilde breadboard da kurduğumda , 2 tane daha farklı ısı ölçerlerle arasında 1,5-2 derecelik fark oluyor.
Port yönlendirme derken TRIS registerlerininden bahsetmiştim. Bunları tanımlamazsam sorun olur mu ? Bi yerde okumuştum kullanılmayan piç pinlerini çıkış yaparak GRND bağlayın diyordu.
Güç kaynağı olarak bilgisayar Power Supply'sini kullanmayı düşünüyorum.5 v ile pici çalıştırıp 12 v ile röleleri sürmek sıkıntı olur mu ?
Genel anlamda bu projeye bakışınız nedir ? Stabil çalışır mı ?
Devrenin resmini de koyuyorum

rodyum

CCS derleyicisi portların giriş yada çıkış durumunu otomatik olarak ayarlıyor ancak bu durumda iken portlara her değer atamasında TRIS registerini arka planda sürekli değiştiriyor ve buda zaman harcamasına neden oluyor. hız önemli olduğunda port durumlarını manuel olarak belirleyebilirsin.
önce şu tanımlamaları header bölümüne ekle:
#use fast_io(a)
#use fast_io(b)
#use fast_io(c)
#use fast_io(d)

bu tanımlamalarını eklediğinde "output_x" fonksiyonlarında artık TRIS registerine sürekli değer girmez.

main bölümünde set_tris_x fonksiyonuyla TRIS registerini değiştirebilirsin:
set_tris_a(0b11111111);
set_tris_b(0b00000000);
set_tris_c(0b00000000);
set_tris_d(0b00000000);

Bunları yaptığında hız avantajın olacaktır ama CCS deki bazı kütüphaneler, port durumlarını otomatik ayara göre belirlediği için sıkıntı olabilir.

boşta kalan I-O pinleri ise hiçbir yere bağlamaz.

röle sürmek için ULN2003 kullanabilirsin. gerekli direnç, diyot ve transistörler entegre içinde mevcut

termometrelerde ise birbirinin aynısını gösteren pek görmedim. mutlaka farklılıklar oluyor. SHT11 proteus denemelerimde tüm programlama dilleri ile testler yaptım. hiç biri aynı değeri göstermedi. en doğru hesaplama hangisi inan onu bende bulamadım ama CCS en yakın sonucu verenlerden biri oldu.

aygun78

#4
en sonunda montajı bitirdim. Fakat sıkıntı çıktı. Devre çok güzel çalışıyor ta ki röleye enerji verene kadar.  Isı rölesi açar açmaz işlemci sapıtıyor. Ekranda anlamsız anlamsız yazılar, resetlemeler, kitlenmeler yaşanıyor. Sorunu bir türlü anlamadım. Neden kaynaklana bilir ? Röleden enerjiyi kesersen hiç bir sıkıntı yok 48 saat çalıştırdım hiç  bir anormallik yok .Röleler açıp kapatıyor. Ama enerji verirsen sıkıntı.
Röle sürmek için uln2003 kullanıyorum
güç kaynağı olarak 5 v adaptör ve röle sürmek için 12v adaptör kullanıyorum.
Daha önce karşılaşan var mıdır ?
Sorun rölelerden olabilir mi?
Kristal parazitten etkileniyor olabilir mi?


bilsisco

sht11 dosya bağlantısı kopmuş tekrar yükleyebilir misiniz?

aygun78

Arkadasim ne icin kullanacaksin bilmiyorum.Ben kulucka makinasi icin kullandim.Bu projeyi cok guncelledim.Sorunsuz calisiyor.sht11 den vazgectim.sensor çok pahali.Nem icin dht22 ve isi icin 18b20 kullandim.sht11 kadar hassas degil ama idare ediyor.Pic bilgin ne kadar bilmiyorum ama devrede saat icin  rtc ve istenmeyen kilitlenmeler icin wdt kullandim.tabi bunlar 16f877a icin biraz agir oldu %90 larda sorunsuz calisiyor.Parcalari almadiysan 18f4520 bu is icin ideal% 40larda sorunsuz calisiyor.Devre  2 versiyondada elimde mevcut hangisini istersen kaynak kodlariyla gondere bilirim.16f877a+sht11/dht22.18f4520 mail adresini yazarsan   pazartesi gonderebilirim.

POWER

@aygun78
bu tür devrelerde söylediğiniz hatalar hep oluyor.bu hata role uçlarında yük bağlı iken mi oluyor yoksa role kontak uçları boştamı? klasik olacak ama picin besleme uçlarına 100 nF kesinlikle bağlanmalı.ayrıca beslemenin çok iyi olması lazım.aynı devrelerden bende yapıyorum.7805 li beslemede zaman zaman sıkıntılar oldu bende lm2575-76 türü besleme devrelerini tercih ediyorum artık.

aygun78

Devredeki kitlenme sorunu cozulmustur.Delikli plaket kullanilmisti.Devrede powerplane ile sorun cozuldu.Role beslemesi ile pic peslemesinden ayirdim.uln2003 veya 2n 5551 uzerinden - ile tetikleme yapiyorum.Beslemede telefon sarj cihazi 5 w0.5 amper kullaniyorum.role icin 5w 1a kullaniyorum.Ekstra kilitlenmeler icin wdt ile 2.3 saniyede pici resetleyerek yeniden baslatiyorum.Su ana kadar hicbir klitlenme olmadi.Eprom ve rtc ile elektirik kesintilerinden etkilenmeden kaldigi yerden devam ediyor.

bilsisco

#9
Aygun sana mesaj attım forumdan.
Ben de kuluçka ile uğraşıyorum amatör olarak, 1 kez çıkım da aldım, birdaha çalıştırmadım makineyi.
devremi tam otomatik kontrollü olarak yapmaya çalıştım ama
hem işlemcinin program belleği yetmedi(lcd den kıstım),
hem de mikroc ile 877a kullanarak yazmaya çalışıyorum(pbp da 628a kullanmıştım)
Son olarak isis devre çizimin varsa onu da gönderir misin? shtnin bağlı oladuğu özel bir pin mi var yoksa pinleri dijital "ADCON1=7;" yaptıktan sonra rastgele  birini mi kullanıyorsun?
Altta devrenin resmi var
https://scontent-frt3-1.xx.fbcdn.net/v/t1.0-9/10448824_290424457802369_7764515378528534400_n.jpg?oh=81eb1519c6a55f35ae6670a77f2e5097&oe=581155DD

aygun78

Bu proje tam sana gore.Bende kulucka icin kullaniyorum.Ccs de yazdim.12 menulu isi ve nemi set ediyosun.hassasiyeti ayarliyosun.kulucka suresini kaydediyosun.ilk 3 gun cevirme yapmiyor sontraki gunlar ayarina gore . 1,2,3 saatte bir 60 saniyeye kadar cevirme yapiyor.son 3 gun cevirme duruyor.21 gunde baska hic bir islemm yapmiyosun. Isiyi battaniye teli nemi nem makinesi ile cevirmeyide pilic cevirme motoru ile yapiyorum.Su an sorunsuz.lcd ve 4 tane tus ile tum ayarlari koydugun yumurtaya gore ayarliyorsun.Elindeki malzeme listeni gonderirsen sana uygun olalini gonderirim.Sht11 cok guzel bi sensor ama cok hassas ve pahali.Ben 3 taneyi cope attim.Daha sonra dht11 ile denedim o cok yavas cikti.ondan sonra dht22 ile denedim nem konusunda iyifakat isi gec tepki verdi.Nemi dht22 isiyi ds18b20 ile olcuyom sorunsuz

yolcu27

Alıntı yapılan: aygun78 - 21 Ağustos 2016, 13:54:11
Bu proje tam sana gore.Bende kulucka icin kullaniyorum.Ccs de yazdim.12 menulu isi ve nemi set ediyosun.hassasiyeti ayarliyosun.kulucka suresini kaydediyosun.ilk 3 gun cevirme yapmiyor sontraki gunlar ayarina gore . 1,2,3 saatte bir 60 saniyeye kadar cevirme yapiyor.son 3 gun cevirme duruyor.21 gunde baska hic bir islemm yapmiyosun. Isiyi battaniye teli nemi nem makinesi ile cevirmeyide pilic cevirme motoru ile yapiyorum.Su an sorunsuz.lcd ve 4 tane tus ile tum ayarlari koydugun yumurtaya gore ayarliyorsun.Elindeki malzeme listeni gonderirsen sana uygun olalini gonderirim.Sht11 cok guzel bi sensor ama cok hassas ve pahali.Ben 3 taneyi cope attim.Daha sonra dht11 ile denedim o cok yavas cikti.ondan sonra dht22 ile denedim nem konusunda iyifakat isi gec tepki verdi.Nemi dht22 isiyi ds18b20 ile olcuyom sorunsuz

Özelden mail attım benimlede paylaşabilir misiniz?

bilsisco

Ben 628a ile yaptım zaten ama şimdi mikroc ile yazmaya çalışıyorum.
CCS C ile sanıyorum mikroc nin farkı yok, ccsc nin sadece hazır kütüphaneleri olduğunu biliyorum
Ete hocam saolsun pbp ile pic programlamayı çok iyi öğrendim, kuluçka devremin yazılımını ondan yararlandım, yalnız pbp geleceği olmayan bir dil, çok fazla örnek kod falan bulunmuyor internette.
C dili hem de arduino öğrenme açısından da bir temel teşkil ediyor.
------
Sizinle kuluçka konusunda sohbet etmek isterim, bu işi ticari anlamdan çok hobi amaçlı devre tasarlamak için yaptım, yapıyorum.
Pek paylaşımlarım olmasa da face sayfam da var :)
https://www.facebook.com/kuluckamakinesi/
---------
Siz varsa mikroc ile yoksa ccs c ile yapılmış kodlarınızı ve isis dosyanızı gönderirseniz makbule geçer.

aygun78

#13
Sht11 haberlesmesi en kolay elemanlardan .Istedigin pine baglaya biliyorsun.Sadece surucu dosyasinda tanimliyorsun. Sck ve data pinlerini .Piyasada 2 cesit var .Biri pbc li digeri sadece sht11 .Eger elinde yoksa mutlaka pbcli  olandan al diger turlu lehimlemesi sikinti
Ben 3 tane attim 2.si benim hatam ters baglamisim yandi.Digeri hic calismadi.Sanirim cakma sht11 di.Internetten alicaksan direnc.net deneye bilirsin bu gune kadar hicbir sikinti cikmadi.Diger konuya gelince ben bu ise basladigimda hic bir sey bilmiyordum.Sagolsun ETE hocam ve forumdaki diger arkadaslar cok yardimci oldular.Microc hic bilmiyorum.Tamamen CCS uzerinde yogunlastim.Hem anlasilir hemde ornek cok fazla.Projeyi siteye ekleyecegim.Herkes kullansin.Sonucta bende baskalarininkine bakarak yaptim.Proje dosyalari isyerimdeki bilgisayarimda.O yuzden yukleyemiyorum.kulucka konusunda sohbet edebiliriz bu fune kadar 3 tane yaptim.2 si hazir evco termostat ile digeri kendi devrem ile

bilsisco

yazdıklarına göre aynı tecrübelerimiz olmuş. sadece ben kulucka için hazır hicbir cihaz yada devre almadım
Ben de 2 tane bozdum. Diğer 2 tanesine de pcb yaptım, çalışıyor. Bilirsin kesin lehimleme sorununu :)
sht21 e bile lehim yaptım ama nasıl olduysa yanlış pinlere güç verince bozuldu. Mercimeğin 4de 1i kadar.
sensiron firmasından örnek istiyorduk bir tane ücretsiz yolluyorlardı. mektupla altına bantlamışlar farketmiyordum az kala atıyordum çöpe.
--------
Dediğim gibi halihazırda çalışan devrem var resmini yolladım, sensör kod okuma ve hesaplama kısmı Ete hocama ait.
ama bu devreyi 16F628a ile yapmıştım, aynı düzenlemeleri 877a ya mikroc kullanarak yapıyorum, çalışmıyor.
internette birkaç kod ve devre şeması buldum ama 1-2 haftadır uğraşıyorum, çalıştıramadım.
-------
bluemavi.com adresinden almıştım sensörü, güvenilir bir site.
ama aliexpress te daha ucuz.

Powered by EzPortal