اطلاعیه

Collapse
No announcement yet.

گیر کردن رله هنگام متصل شدن برق به مدار

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    #31
    پاسخ : گیر کردن رله هنگام متصل شدن برق به مدار

    سلام
    من در کد قبل اشتباه کردم شما پین رله رو به PINC.2 وصل کن وتست کن
    اگه نشد احتمالا یکی از کتابخونه ها مثلا DS1307 مشکلی داره
    کد:
    #include <mega8.h>
    #include <delay.h>
    #include <stdio.h>
    #include <i2c.h>
    #include <ds1307.h>
    #include <alcd.h>
    #define b_down   PIND.1
    #define b_up    PIND.2   
    #define b_set   PIND.0
    #define b_set_down PIND.3
    #define relay   PORTC.2
    #define buzzer   PORTC.0
    //____________________________________________________________
    void main(){
    char lcd_buffer1[16];
    
    unsigned char hr,min,sec,status=0,value=0,roz=0;
    unsigned char week,year,month,day;
    unsigned char en_hr=0,en_min=0,en_sec=0;
    unsigned char st_hr=0,st_min=0,st_sec=0;
    unsigned char en_year=0,en_month=0,en_day=0;
    unsigned char st_year=0,st_month=0,st_day=0;
    unsigned int main_year;
    
    DDRC=0xFF;
    relay = 0;
    PORTD=0XFF;
    
    lcd_init(16);
    i2c_init();
    
    rtc_init(0,0,0);
    
    if(b_set == 0)
    {
      rtc_set_time(0,0,0);
      rtc_set_date(0,8,7,15);
      lcd_putsf("Successfully!");
      while(1)
      {
      }
    }
     
    delay_ms(20);
    rtc_get_time(&en_hr,&en_min,&en_sec);
    rtc_get_time(&st_hr,&st_min,&st_sec);
    rtc_get_date(&week,&en_day,&en_month,&en_year);
    rtc_get_date(&week,&st_day,&st_month,&st_year);
    delay_ms(20);
        
      while (1){  
        while(status == 0)
        {
          rtc_get_time(&hr,&min,&sec);
          rtc_get_date(&week,&day,&month,&year);
          main_year = year + 2000;
          
          if(b_up == 0)
          {
            roz++;
            if(roz == 2) roz = 0;
            while(b_up == 0);
          }  
          
          if(roz == 0)
          {
            if(hr == en_hr & min == en_min & sec == en_sec & year == en_year & month == en_month & day == en_day)
            {
              value = 1;
              relay = 1;
              buzzer = 1;
              delay_ms(3000);
              buzzer = 0;
            }
    
            if(hr == st_hr & min == st_min & sec == st_sec & year == en_year & month == en_month & day == en_day)
            {
              value = 0;
              relay = 0;
            }
          }
          else
          {
            if(hr == en_hr & min == en_min & sec == en_sec)
            {
              value = 1;
              relay = 1;
              buzzer = 1;
              delay_ms(3000);
              buzzer = 0;
            }
    
            if(hr == st_hr & min == st_min & sec == st_sec)
            {
              value = 0;
              relay = 0;
            }
          }      
    
          lcd_clear();
    
          sprintf(lcd_buffer1,"Time~ %02u:%02u:%02u",hr,min,sec);
          lcd_gotoxy(0,0);    
          lcd_puts(lcd_buffer1);
          sprintf(lcd_buffer1,"%u/%02u/%02u ",main_year,month,day);
          lcd_gotoxy(0,1);    
          lcd_puts(lcd_buffer1);
             
          if(value == 0)  
            lcd_putsf("Off");
          else
            lcd_putsf("On");
            
          if(roz != 0)  
            lcd_putsf(" R");        
    
          if(b_set == 0)
          {
            status++;
            if(status == 19) status = 0;
            while(b_set == 0);
          }
          delay_ms(200);
        }  
        
        rtc_get_time(&hr,&min,&sec);
        b:
        while(status == 1)
        {
          if(b_up == 0)
          {  
            hr++;
            if(hr == 25) hr = 0;
            delay_ms(70);
          }  
    
          if(b_down == 0)
          {  
            hr--;
            if(hr == -1) hr = 0;
            delay_ms(70);
          }  
         
          lcd_clear();  
          lcd_gotoxy(0,0);
          sprintf(lcd_buffer1,"Time~%02u:%02u:%02u",hr,min,sec);
          lcd_puts(lcd_buffer1);
          delay_ms(80);
          lcd_clear();
          sprintf(lcd_buffer1,"Time~ :%02u:%02u",min,sec);
          lcd_puts(lcd_buffer1);       
          delay_ms(80);
          if(b_set == 0)
          {
            rtc_set_time(hr,min,sec);
            status++;
            if(status == 19) status = 0;
            while(b_set == 0);  
          }
          if(b_set_down == 0)
          {
            status--;
            if(status == -1) status = 0;
            while(b_set_down == 0);
            goto b;
          }  
        }
    امام مهدی(عج): اگر شیعیان ما ، که خداوند طاعتشان دهد. در عهد ما وفادار و همدل بودند، هرگز دیدار ما (ظهور) به تاخیر نمی افتاد.(کدام عهد ؟)

    دیدگاه


      #32
      پاسخ : گیر کردن رله هنگام متصل شدن برق به مدار

      معذرت کدتون ریزه خونده نمیشه..من اینجا میذارمش که بتونم بخونمش :

      [code=c]
      #include <mega8.h>
      #include <delay.h>
      #include <stdio.h>
      #include <i2c.h>
      #include <ds1307.h>
      #include <alcd.h>
      #define b_down PIND.1
      #define b_up PIND.2
      #define b_set PIND.0
      #define b_set_down PIND.3
      #define relay PORTB.7
      #define buzzer PORTC.0
      //__________________________________________________ __________
      void main(){
      char lcd_buffer1[16];

      unsigned char hr,min,sec,status=0,value=0,roz=0;
      unsigned char week,year,month,day;
      unsigned char en_hr=0,en_min=0,en_sec=0;
      unsigned char st_hr=0,st_min=0,st_sec=0;
      unsigned char en_year=0,en_month=0,en_day=0;
      unsigned char st_year=0,st_month=0,st_day=0;
      unsigned int main_year;
      DDRB.7=0xFF;
      DDRC.0=0xFF;
      PORTD=0XFF;
      i2c_init();
      lcd_init(16);
      rtc_init(0,0,0);

      if(b_set == 0)
      {
      rtc_set_time(0,0,0);
      rtc_set_date(0,8,7,15);
      lcd_putsf("Successfully!"
      while(1)
      {
      }
      }

      delay_ms(20);
      rtc_get_time(&en_hr,&en_min,&en_sec);
      rtc_get_time(&st_hr,&st_min,&st_sec);
      rtc_get_date(&week,&en_day,&en_month,& amp;en_year);
      rtc_get_date(&week,&st_day,&st_month,& amp;st_year);
      delay_ms(20);

      while (1){
      while(status == 0)
      {
      rtc_get_time(&hr,&min,&sec);
      rtc_get_date(&week,&day,&month,&ye ar);
      main_year = year + 2000;

      if(b_up == 0)
      {
      roz++;
      if(roz == 2) roz = 0;
      while(b_up == 0);
      }

      if(roz == 0)
      {
      if(hr == en_hr & min == en_min & sec == en_sec & year == en_year & month == en_month & day == en_day)
      {
      value = 1;
      relay = 1;
      buzzer = 1;
      delay_ms(3000);
      buzzer = 0;
      }

      if(hr == st_hr & min == st_min & sec == st_sec & year == en_year & month == en_month & day == en_day)
      {
      value = 0;
      relay = 0;
      }
      }
      else
      {
      if(hr == en_hr & min == en_min & sec == en_sec)
      {
      value = 1;
      relay = 1;
      buzzer = 1;
      delay_ms(3000);
      buzzer = 0;
      }

      if(hr == st_hr & min == st_min & sec == st_sec)
      {
      value = 0;
      relay = 0;
      }
      }

      lcd_clear();

      sprintf(lcd_buffer1,"Time~ %02u:%02u:%02u",hr,min,sec);
      lcd_gotoxy(0,0);
      lcd_puts(lcd_buffer1);
      sprintf(lcd_buffer1,"%u/%02u/%02u ",main_year,month,day);
      lcd_gotoxy(0,1);
      lcd_puts(lcd_buffer1);

      if(value == 0)
      lcd_putsf("Off"
      else
      lcd_putsf("On"

      if(roz != 0)
      lcd_putsf(" R"

      if(b_set == 0)
      {
      status++;
      if(status == 19) status = 0;
      while(b_set == 0);
      }
      delay_ms(200);
      }

      rtc_get_time(&hr,&min,&sec);
      b:
      while(status == 1)
      {
      if(b_up == 0)
      {
      hr++;
      if(hr == 25) hr = 0;
      delay_ms(70);
      }

      if(b_down == 0)
      {
      hr--;
      if(hr == -1) hr = 0;
      delay_ms(70);
      }

      lcd_clear();
      lcd_gotoxy(0,0);
      sprintf(lcd_buffer1,"Time~%02u:%02u:%02u&quot ;,hr,min,sec);
      lcd_puts(lcd_buffer1);
      delay_ms(80);
      lcd_clear();
      sprintf(lcd_buffer1,"Time~ :%02u:%02u",min,sec);
      lcd_puts(lcd_buffer1);
      delay_ms(80);
      if(b_set == 0)
      {
      rtc_set_time(hr,min,sec);
      status++;
      if(status == 19) status = 0;
      while(b_set == 0);
      }
      if(b_set_down == 0)
      {
      status--;
      if(status == -1) status = 0;
      while(b_set_down == 0);
      goto b;
      }
      }


      [/code]

      یه مورد الان دیدم :
      واسه مقدار دهی به یک بیت که نباید از 0x استفاده کنید

      این اشتباهه: [code=c]ِDDRB.7=0xff[/code]

      درست :

      [code=c]DDRB.7=1[/code]
      تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

      www.intelart.ir


      ساخت کنترلر دما PID فازی با AVR [آموزشی]

      دیدگاه


        #33
        پاسخ : گیر کردن رله هنگام متصل شدن برق به مدار

        اوه اینا که خیلی طولانیه...شما اول چیزای اضافی رو کامنت کن...برنامه رو کامپایل کن کم کم کامنت ها رو بردار و کامپایل کن تا جایی که مشکل دوباره ظاهر بشه...اونجا میتونی متوجه بشی مشکل از کجاست...اینطری خب معلومه که سردرگم میشی...
        تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

        www.intelart.ir


        ساخت کنترلر دما PID فازی با AVR [آموزشی]

        دیدگاه


          #34
          پاسخ : گیر کردن رله هنگام متصل شدن برق به مدار

          البته ما هم همینو گفتیم که مقدار 8 بیتی رو که نمیشه رو1 پین گذاشت باید بقول دستومن اقای فانی مثل زیر اصلاح کنید
          [code=c]
          ِDDRB.7=0xff
          [/code]
          [code=c]
          DDRB.7=1
          [/code]
          ولی این هم احتمال داره که مشکل بقول دوستمون از BUZZER باشه میتونید زمان 3000 میلی ثانیه رو مثلا 30 میلی ثانیه بذاری وتست کنی احساس میکنم 3000 زیاد ولی قبلش شما پین که به رله میره رو 0 میکنی
          امام مهدی(عج): اگر شیعیان ما ، که خداوند طاعتشان دهد. در عهد ما وفادار و همدل بودند، هرگز دیدار ما (ظهور) به تاخیر نمی افتاد.(کدام عهد ؟)

          دیدگاه


            #35
            پاسخ : گیر کردن رله هنگام متصل شدن برق به مدار

            نوشته اصلی توسط mahdi8866
            سلام
            من در کد قبل اشتباه کردم شما پین رله رو به PINC.2 وصل کن وتست کن
            اگه نشد احتمالا یکی از کتابخونه ها مثلا DS1307 مشکلی داره
            کد:
            #include <mega8.h>
            #include <delay.h>
            #include <stdio.h>
            #include <i2c.h>
            #include <ds1307.h>
            #include <alcd.h>
            #define b_down   PIND.1
            #define b_up    PIND.2   
            #define b_set   PIND.0
            #define b_set_down PIND.3
            #define relay   PORTC.2
            #define buzzer   PORTC.0
            //____________________________________________________________
            void main(){
            char lcd_buffer1[16];
            
            unsigned char hr,min,sec,status=0,value=0,roz=0;
            unsigned char week,year,month,day;
            unsigned char en_hr=0,en_min=0,en_sec=0;
            unsigned char st_hr=0,st_min=0,st_sec=0;
            unsigned char en_year=0,en_month=0,en_day=0;
            unsigned char st_year=0,st_month=0,st_day=0;
            unsigned int main_year;
            
            DDRC=0xFF;
            relay = 0;
            PORTD=0XFF;
            
            lcd_init(16);
            i2c_init();
            
            rtc_init(0,0,0);
            
            if(b_set == 0)
            {
              rtc_set_time(0,0,0);
              rtc_set_date(0,8,7,15);
              lcd_putsf("Successfully!");
              while(1)
              {
              }
            }
             
            delay_ms(20);
            rtc_get_time(&en_hr,&en_min,&en_sec);
            rtc_get_time(&st_hr,&st_min,&st_sec);
            rtc_get_date(&week,&en_day,&en_month,&en_year);
            rtc_get_date(&week,&st_day,&st_month,&st_year);
            delay_ms(20);
                
              while (1){  
                while(status == 0)
                {
                  rtc_get_time(&hr,&min,&sec);
                  rtc_get_date(&week,&day,&month,&year);
                  main_year = year + 2000;
                  
                  if(b_up == 0)
                  {
                    roz++;
                    if(roz == 2) roz = 0;
                    while(b_up == 0);
                  }  
                  
                  if(roz == 0)
                  {
                    if(hr == en_hr & min == en_min & sec == en_sec & year == en_year & month == en_month & day == en_day)
                    {
                      value = 1;
                      relay = 1;
                      buzzer = 1;
                      delay_ms(3000);
                      buzzer = 0;
                    }
            
                    if(hr == st_hr & min == st_min & sec == st_sec & year == en_year & month == en_month & day == en_day)
                    {
                      value = 0;
                      relay = 0;
                    }
                  }
                  else
                  {
                    if(hr == en_hr & min == en_min & sec == en_sec)
                    {
                      value = 1;
                      relay = 1;
                      buzzer = 1;
                      delay_ms(3000);
                      buzzer = 0;
                    }
            
                    if(hr == st_hr & min == st_min & sec == st_sec)
                    {
                      value = 0;
                      relay = 0;
                    }
                  }      
            
                  lcd_clear();
            
                  sprintf(lcd_buffer1,"Time~ %02u:%02u:%02u",hr,min,sec);
                  lcd_gotoxy(0,0);    
                  lcd_puts(lcd_buffer1);
                  sprintf(lcd_buffer1,"%u/%02u/%02u ",main_year,month,day);
                  lcd_gotoxy(0,1);    
                  lcd_puts(lcd_buffer1);
                     
                  if(value == 0)  
                    lcd_putsf("Off");
                  else
                    lcd_putsf("On");
                    
                  if(roz != 0)  
                    lcd_putsf(" R");        
            
                  if(b_set == 0)
                  {
                    status++;
                    if(status == 19) status = 0;
                    while(b_set == 0);
                  }
                  delay_ms(200);
                }  
                
                rtc_get_time(&hr,&min,&sec);
                b:
                while(status == 1)
                {
                  if(b_up == 0)
                  {  
                    hr++;
                    if(hr == 25) hr = 0;
                    delay_ms(70);
                  }  
            
                  if(b_down == 0)
                  {  
                    hr--;
                    if(hr == -1) hr = 0;
                    delay_ms(70);
                  }  
                 
                  lcd_clear();  
                  lcd_gotoxy(0,0);
                  sprintf(lcd_buffer1,"Time~%02u:%02u:%02u",hr,min,sec);
                  lcd_puts(lcd_buffer1);
                  delay_ms(80);
                  lcd_clear();
                  sprintf(lcd_buffer1,"Time~ :%02u:%02u",min,sec);
                  lcd_puts(lcd_buffer1);       
                  delay_ms(80);
                  if(b_set == 0)
                  {
                    rtc_set_time(hr,min,sec);
                    status++;
                    if(status == 19) status = 0;
                    while(b_set == 0);  
                  }
                  if(b_set_down == 0)
                  {
                    status--;
                    if(status == -1) status = 0;
                    while(b_set_down == 0);
                    goto b;
                  }  
                }
            ممنون دوست عزیز: باز درست نشد! این کتابخانه ای را که میگید چطور میشه درست اش کرد؟
            سپاس

            اضافه شده در تاریخ :
            دوستان: اگر منظورتان این هست که کد ها را اینطوری بنویسم : که نوشتم ولی باز جواب نداد!! PORTD را اگر 1 کنم کلا روی ال سی دی چیزی ظاهر نمیشه!!!
            کد:
            DDRB.7=1;
            DDRC.0=1;
            PORTD=0XFF;
            سپاس

            دیدگاه


              #36
              پاسخ : گیر کردن رله هنگام متصل شدن برق به مدار

              من حقیقتش 2-3 سال هست که بخاطر بیماریم مخصوصا سردرد کدنویسی وکار میکروکنترلرها رو کنار گذاشته بودم اون یاداوری گذشته رو ندارم
              و همینطور بخاطر حکم شرعی استفاده از نرم افزار های کرک شده مثل پرتئوس و کدویژن رو رو سیستمم ندارم وگرنه خودم کد رو اصلاح وتست شده برات میذاشتم

              اما شما بجای فایل هگز در پرتئوس از فایل با پسوند .COF که کدویژن بجز فایل هگز خروجی میده رو استفاده کن بعد تو قسمت سیمولاتور خود پرتئوس اگه اشتباه نکنم کد رو خط به خط چک کن ببین کجا گیر میکنه تا مشکلش رو حل کنی
              امام مهدی(عج): اگر شیعیان ما ، که خداوند طاعتشان دهد. در عهد ما وفادار و همدل بودند، هرگز دیدار ما (ظهور) به تاخیر نمی افتاد.(کدام عهد ؟)

              دیدگاه


                #37
                پاسخ : گیر کردن رله هنگام متصل شدن برق به مدار

                شما مشکلتون دقیقا چیه یعنی لحظه ای که تغذیه وصل میشه به مدت سه ثانیه رله وصل میشه در صورتی که باید قطع بشه؟

                برد جوجه کشی:
                مطالعه پست 1 (حتما مطالعه کنید)


                مطالعه پست 2 (برای مطلع شدن از تغییرات برنامه مطالعه کنید)

                دانلود

                توجه:
                این برد نیمه صنعتی و خانگی هست...
                برای صنعتی شدن حتما برد مخصوص خودتون رو بزنید...

                آی دی کانال تلگرامی مربوط به برد جوجه کشی : electr0o0nic@

                دیدگاه


                  #38
                  پاسخ : گیر کردن رله هنگام متصل شدن برق به مدار

                  نوشته اصلی توسط mohammad...
                  شما مشکلتون دقیقا چیه یعنی لحظه ای که تغذیه وصل میشه به مدت سه ثانیه رله وصل میشه در صورتی که باید قطع بشه؟

                  البته اگه بقول شما 3 ثانیه باشه خب زمان تاخییر در بازر 3000MS هست دیگه میخوای زمان رو 30 بذار
                  امام مهدی(عج): اگر شیعیان ما ، که خداوند طاعتشان دهد. در عهد ما وفادار و همدل بودند، هرگز دیدار ما (ظهور) به تاخیر نمی افتاد.(کدام عهد ؟)

                  دیدگاه


                    #39
                    پاسخ : گیر کردن رله هنگام متصل شدن برق به مدار

                    نوشته اصلی توسط mahdi8866
                    من حقیقتش 2-3 سال هست که بخاطر بیماریم مخصوصا سردرد کدنویسی وکار میکروکنترلرها رو کنار گذاشته بودم اون یاداوری گذشته رو ندارم
                    و همینطور بخاطر حکم شرعی استفاده از نرم افزار های کرک شده مثل پرتئوس و کدویژن رو رو سیستمم ندارم وگرنه خودم کد رو اصلاح وتست شده برات میذاشتم

                    اما شما بجای فایل هگز در پرتئوس از فایل با پسوند .COF که کدویژن بجز فایل هگز خروجی میده رو استفاده کن بعد تو قسمت سیمولاتور خود پرتئوس اگه اشتباه نکنم کد رو خط به خط چک کن ببین کجا گیر میکنه تا مشکلش رو حل کنی
                    ممنون دوست عزیز:واقعا برنامه نویسی اعصاب خورد کن و سردرد اور هست من متاسفانه کار با سیمولاتور پرتئوس را بلد نیستم !!
                    اموزشی دارید؟
                    سپاس

                    دیدگاه


                      #40
                      پاسخ : گیر کردن رله هنگام متصل شدن برق به مدار

                      اینم تست کن ببین همون پین B.7 به رله میره در ضمن بازر رو هم تغییر دادم
                      [code=c]

                      #include <mega8.h>
                      #include <delay.h>
                      #include <stdio.h>
                      #include <i2c.h>
                      #include <ds1307.h>
                      #include <alcd.h>
                      #define b_down PIND.1
                      #define b_up PIND.2
                      #define b_set PIND.0
                      #define b_set_down PIND.3
                      #define relay PORTB.7
                      #define buzzer PORTC.0
                      //__________________________________________________ __________
                      void main(){
                      char lcd_buffer1[16];

                      unsigned char hr,min,sec,status=0,value=0,roz=0;
                      unsigned char week,year,month,day;
                      unsigned char en_hr=0,en_min=0,en_sec=0;
                      unsigned char st_hr=0,st_min=0,st_sec=0;
                      unsigned char en_year=0,en_month=0,en_day=0;
                      unsigned char st_year=0,st_month=0,st_day=0;
                      unsigned int main_year;
                      DDRB.7=1;
                      relay = 0;
                      DDRC=0xFF;
                      PORTD=0XFF;
                      i2c_init();
                      lcd_init(16);
                      rtc_init(0,0,0);

                      if(b_set == 0)
                      {
                      rtc_set_time(0,0,0);
                      rtc_set_date(0,8,7,15);
                      lcd_putsf("Successfully!"
                      while(1)
                      {
                      }
                      }

                      delay_ms(20);
                      rtc_get_time(&en_hr,&en_min,&en_sec);
                      rtc_get_time(&st_hr,&st_min,&st_sec);
                      rtc_get_date(&week,&en_day,&en_month,& amp;en_year);
                      rtc_get_date(&week,&st_day,&st_month,& amp;st_year);
                      delay_ms(20);

                      while (1){
                      while(status == 0)
                      {
                      rtc_get_time(&hr,&min,&sec);
                      rtc_get_date(&week,&day,&month,&ye ar);
                      main_year = year + 2000;

                      if(b_up == 0)
                      {
                      roz++;
                      if(roz == 2) roz = 0;
                      while(b_up == 0);
                      }

                      if(roz == 0)
                      {
                      if(hr == en_hr & min == en_min & sec == en_sec & year == en_year & month == en_month & day == en_day)
                      {
                      value = 1;
                      relay = 1;
                      buzzer = 1;
                      delay_ms(30);
                      buzzer = 0;
                      }

                      if(hr == st_hr & min == st_min & sec == st_sec & year == en_year & month == en_month & day == en_day)
                      {
                      value = 0;
                      relay = 0;
                      }
                      }
                      else
                      {
                      if(hr == en_hr & min == en_min & sec == en_sec)
                      {
                      value = 1;
                      relay = 1;
                      buzzer = 1;
                      delay_ms(30);
                      buzzer = 0;
                      }

                      if(hr == st_hr & min == st_min & sec == st_sec)
                      {
                      value = 0;
                      relay = 0;
                      }
                      }

                      lcd_clear();

                      sprintf(lcd_buffer1,"Time~ %02u:%02u:%02u",hr,min,sec);
                      lcd_gotoxy(0,0);
                      lcd_puts(lcd_buffer1);
                      sprintf(lcd_buffer1,"%u/%02u/%02u ",main_year,month,day);
                      lcd_gotoxy(0,1);
                      lcd_puts(lcd_buffer1);

                      if(value == 0)
                      lcd_putsf("Off"
                      else
                      lcd_putsf("On"

                      if(roz != 0)
                      lcd_putsf(" R"

                      if(b_set == 0)
                      {
                      status++;
                      if(status == 19) status = 0;
                      while(b_set == 0);
                      }
                      delay_ms(200);
                      }

                      rtc_get_time(&hr,&min,&sec);
                      b:
                      while(status == 1)
                      {
                      if(b_up == 0)
                      {
                      hr++;
                      if(hr == 25) hr = 0;
                      delay_ms(70);
                      }

                      if(b_down == 0)
                      {
                      hr--;
                      if(hr == -1) hr = 0;
                      delay_ms(70);
                      }

                      lcd_clear();
                      lcd_gotoxy(0,0);
                      sprintf(lcd_buffer1,"Time~%02u:%02u:%02u&quot ;,hr,min,sec);
                      lcd_puts(lcd_buffer1);
                      delay_ms(80);
                      lcd_clear();
                      sprintf(lcd_buffer1,"Time~ :%02u:%02u",min,sec);
                      lcd_puts(lcd_buffer1);
                      delay_ms(80);
                      if(b_set == 0)
                      {
                      rtc_set_time(hr,min,sec);
                      status++;
                      if(status == 19) status = 0;
                      while(b_set == 0);
                      }
                      if(b_set_down == 0)
                      {
                      status--;
                      if(status == -1) status = 0;
                      while(b_set_down == 0);
                      goto b;
                      }
                      }



                      [/code]
                      امام مهدی(عج): اگر شیعیان ما ، که خداوند طاعتشان دهد. در عهد ما وفادار و همدل بودند، هرگز دیدار ما (ظهور) به تاخیر نمی افتاد.(کدام عهد ؟)

                      دیدگاه


                        #41
                        پاسخ : گیر کردن رله هنگام متصل شدن برق به مدار

                        نوشته اصلی توسط mohammad...
                        شما مشکلتون دقیقا چیه یعنی لحظه ای که تغذیه وصل میشه به مدت سه ثانیه رله وصل میشه در صورتی که باید قطع بشه؟
                        درسته دوست عزیز: ولی لینک ان فیلم که از محیط شبیه سازی را گرفتم را دیدید؟ اگر ببنید متوجه می شوید چی میگم!!
                        در حالت عادی هنگام اجرا مدار نباید رله و بازر و ... چند ثانیه روشن و بعد خاموش بشوند!!
                        سپاس

                        دیدگاه


                          #42
                          پاسخ : گیر کردن رله هنگام متصل شدن برق به مدار

                          نوشته اصلی توسط mahdi8866
                          اینم تست کن ببین همون پین B.7 به رله میره در ضمن بازر رو هم تغییر دادم
                          [code=c]

                          #include <mega8.h>
                          #include <delay.h>
                          #include <stdio.h>
                          #include <i2c.h>
                          #include <ds1307.h>
                          #include <alcd.h>
                          #define b_down PIND.1
                          #define b_up PIND.2
                          #define b_set PIND.0
                          #define b_set_down PIND.3
                          #define relay PORTB.7
                          #define buzzer PORTC.0
                          //__________________________________________________ __________
                          void main(){
                          char lcd_buffer1[16];

                          unsigned char hr,min,sec,status=0,value=0,roz=0;
                          unsigned char week,year,month,day;
                          unsigned char en_hr=0,en_min=0,en_sec=0;
                          unsigned char st_hr=0,st_min=0,st_sec=0;
                          unsigned char en_year=0,en_month=0,en_day=0;
                          unsigned char st_year=0,st_month=0,st_day=0;
                          unsigned int main_year;
                          DDRB.7=1;
                          relay = 0;
                          DDRC=0xFF;
                          PORTD=0XFF;
                          i2c_init();
                          lcd_init(16);
                          rtc_init(0,0,0);

                          if(b_set == 0)
                          {
                          rtc_set_time(0,0,0);
                          rtc_set_date(0,8,7,15);
                          lcd_putsf("Successfully!"
                          while(1)
                          {
                          }
                          }

                          delay_ms(20);
                          rtc_get_time(&en_hr,&en_min,&en_sec);
                          rtc_get_time(&st_hr,&st_min,&st_sec);
                          rtc_get_date(&week,&en_day,&en_month,& amp;en_year);
                          rtc_get_date(&week,&st_day,&st_month,& amp;st_year);
                          delay_ms(20);

                          while (1){
                          while(status == 0)
                          {
                          rtc_get_time(&hr,&min,&sec);
                          rtc_get_date(&week,&day,&month,&ye ar);
                          main_year = year + 2000;

                          if(b_up == 0)
                          {
                          roz++;
                          if(roz == 2) roz = 0;
                          while(b_up == 0);
                          }

                          if(roz == 0)
                          {
                          if(hr == en_hr & min == en_min & sec == en_sec & year == en_year & month == en_month & day == en_day)
                          {
                          value = 1;
                          relay = 1;
                          buzzer = 1;
                          delay_ms(30);
                          buzzer = 0;
                          }

                          if(hr == st_hr & min == st_min & sec == st_sec & year == en_year & month == en_month & day == en_day)
                          {
                          value = 0;
                          relay = 0;
                          }
                          }
                          else
                          {
                          if(hr == en_hr & min == en_min & sec == en_sec)
                          {
                          value = 1;
                          relay = 1;
                          buzzer = 1;
                          delay_ms(30);
                          buzzer = 0;
                          }

                          if(hr == st_hr & min == st_min & sec == st_sec)
                          {
                          value = 0;
                          relay = 0;
                          }
                          }

                          lcd_clear();

                          sprintf(lcd_buffer1,"Time~ %02u:%02u:%02u",hr,min,sec);
                          lcd_gotoxy(0,0);
                          lcd_puts(lcd_buffer1);
                          sprintf(lcd_buffer1,"%u/%02u/%02u ",main_year,month,day);
                          lcd_gotoxy(0,1);
                          lcd_puts(lcd_buffer1);

                          if(value == 0)
                          lcd_putsf("Off"
                          else
                          lcd_putsf("On"

                          if(roz != 0)
                          lcd_putsf(" R"

                          if(b_set == 0)
                          {
                          status++;
                          if(status == 19) status = 0;
                          while(b_set == 0);
                          }
                          delay_ms(200);
                          }

                          rtc_get_time(&hr,&min,&sec);
                          b:
                          while(status == 1)
                          {
                          if(b_up == 0)
                          {
                          hr++;
                          if(hr == 25) hr = 0;
                          delay_ms(70);
                          }

                          if(b_down == 0)
                          {
                          hr--;
                          if(hr == -1) hr = 0;
                          delay_ms(70);
                          }

                          lcd_clear();
                          lcd_gotoxy(0,0);
                          sprintf(lcd_buffer1,"Time~%02u:%02u:%02u&quot ;,hr,min,sec);
                          lcd_puts(lcd_buffer1);
                          delay_ms(80);
                          lcd_clear();
                          sprintf(lcd_buffer1,"Time~ :%02u:%02u",min,sec);
                          lcd_puts(lcd_buffer1);
                          delay_ms(80);
                          if(b_set == 0)
                          {
                          rtc_set_time(hr,min,sec);
                          status++;
                          if(status == 19) status = 0;
                          while(b_set == 0);
                          }
                          if(b_set_down == 0)
                          {
                          status--;
                          if(status == -1) status = 0;
                          while(b_set_down == 0);
                          goto b;
                          }
                          }



                          [/code]
                          ممنون دوست عزیز: همانطور که گفتم به احتمال 99 درصد مشکل از بازر و تابع delay-ms هست ! این کدی که گذاشتید را تست کردم و جواب داد! به خاطر اینکه مقدار delay-ms عدد 30 بود نه 3000 !!
                          میگم مگر 3000 میلی ثانیه معادل 3 ثانیه نیست!!؟؟
                          برای چی به رله گیر داده!!؟
                          تابع دیگر یا روش دیگری برای تولید صدا ایا وجود دارد؟
                          سپاس

                          دیدگاه


                            #43
                            پاسخ : گیر کردن رله هنگام متصل شدن برق به مدار

                            نوشته اصلی توسط ircaspianhero
                            درسته دوست عزیز: ولی لینک ان فیلم که از محیط شبیه سازی را گرفتم را دیدید؟ اگر ببنید متوجه می شوید چی میگم!!
                            در حالت عادی هنگام اجرا مدار نباید رله و بازر و ... چند ثانیه روشن و بعد خاموش بشوند!!
                            سپاس
                            بله دیدم ولی فرض کنیم مشکل رو رفع کردیم و برای بار اول که تغذیه وصل میشه مشکل برطرف شد ولی هر بار که رله وصل بشه به مدت سه ثانیه همونطور باقی خواهد ماند این مشکلی نداره؟
                            برد جوجه کشی:
                            مطالعه پست 1 (حتما مطالعه کنید)


                            مطالعه پست 2 (برای مطلع شدن از تغییرات برنامه مطالعه کنید)

                            دانلود

                            توجه:
                            این برد نیمه صنعتی و خانگی هست...
                            برای صنعتی شدن حتما برد مخصوص خودتون رو بزنید...

                            آی دی کانال تلگرامی مربوط به برد جوجه کشی : electr0o0nic@

                            دیدگاه


                              #44
                              پاسخ : گیر کردن رله هنگام متصل شدن برق به مدار

                              خب خدا رو شکر حالا که حل شد یکار دیگه بکنیم بیایم دستور روشن شدن رله رو بعد دستور بازر بنویسیم
                              مشکل از این بود که ما موقعی که پین مربوط رله رو 0 میکردیم با اجرا شدن شرط IF در حلقه دوم بلا فاصله پین رله 1 میشد و 3 ثانیه هم بازر روشن میشد
                              حالا جای دستور 1 شدن رله رو بعد بازر میذارم و بازر هم با همون 3 ثانیه صوت کشیدن پس شما کد زیر تست کن ببین این چطوره
                              اگه کد زیر با همون بازر 3 ثانیه درست کار کرد که هیچی وگرنه همون کد قبل رو استفاده کن

                              [code=c]


                              #include <mega8.h>
                              #include <delay.h>
                              #include <stdio.h>
                              #include <i2c.h>
                              #include <ds1307.h>
                              #include <alcd.h>
                              #define b_down PIND.1
                              #define b_up PIND.2
                              #define b_set PIND.0
                              #define b_set_down PIND.3
                              #define relay PORTB.7
                              #define buzzer PORTC.0
                              //__________________________________________________ __________
                              void main(){
                              char lcd_buffer1[16];

                              unsigned char hr,min,sec,status=0,value=0,roz=0;
                              unsigned char week,year,month,day;
                              unsigned char en_hr=0,en_min=0,en_sec=0;
                              unsigned char st_hr=0,st_min=0,st_sec=0;
                              unsigned char en_year=0,en_month=0,en_day=0;
                              unsigned char st_year=0,st_month=0,st_day=0;
                              unsigned int main_year;
                              DDRB.7=1;
                              relay = 0;
                              DDRC=0xFF;
                              PORTD=0XFF;
                              i2c_init();
                              lcd_init(16);
                              rtc_init(0,0,0);

                              if(b_set == 0)
                              {
                              rtc_set_time(0,0,0);
                              rtc_set_date(0,8,7,15);
                              lcd_putsf("Successfully!"
                              while(1)
                              {
                              }
                              }

                              delay_ms(20);
                              rtc_get_time(&en_hr,&en_min,&en_sec);
                              rtc_get_time(&st_hr,&st_min,&st_sec);
                              rtc_get_date(&week,&en_day,&en_month,& amp;en_year);
                              rtc_get_date(&week,&st_day,&st_month,& amp;st_year);
                              delay_ms(20);

                              while (1){
                              while(status == 0)
                              {
                              rtc_get_time(&hr,&min,&sec);
                              rtc_get_date(&week,&day,&month,&ye ar);
                              main_year = year + 2000;

                              if(b_up == 0)
                              {
                              roz++;
                              if(roz == 2) roz = 0;
                              while(b_up == 0);
                              }

                              if(roz == 0)
                              {
                              if(hr == en_hr & min == en_min & sec == en_sec & year == en_year & month == en_month & day == en_day)
                              {
                              value = 1;

                              buzzer = 1;
                              delay_ms(3000);
                              buzzer = 0;
                              relay = 1;
                              }

                              if(hr == st_hr & min == st_min & sec == st_sec & year == en_year & month == en_month & day == en_day)
                              {
                              value = 0;
                              relay = 0;
                              }
                              }
                              else
                              {
                              if(hr == en_hr & min == en_min & sec == en_sec)
                              {
                              value = 1;

                              buzzer = 1;
                              delay_ms(3000);
                              buzzer = 0;

                              relay = 1;
                              }

                              if(hr == st_hr & min == st_min & sec == st_sec)
                              {
                              value = 0;
                              relay = 0;
                              }
                              }

                              lcd_clear();

                              sprintf(lcd_buffer1,"Time~ %02u:%02u:%02u",hr,min,sec);
                              lcd_gotoxy(0,0);
                              lcd_puts(lcd_buffer1);
                              sprintf(lcd_buffer1,"%u/%02u/%02u ",main_year,month,day);
                              lcd_gotoxy(0,1);
                              lcd_puts(lcd_buffer1);

                              if(value == 0)
                              lcd_putsf("Off"
                              else
                              lcd_putsf("On"

                              if(roz != 0)
                              lcd_putsf(" R"

                              if(b_set == 0)
                              {
                              status++;
                              if(status == 19) status = 0;
                              while(b_set == 0);
                              }
                              delay_ms(200);
                              }

                              rtc_get_time(&hr,&min,&sec);
                              b:
                              while(status == 1)
                              {
                              if(b_up == 0)
                              {
                              hr++;
                              if(hr == 25) hr = 0;
                              delay_ms(70);
                              }

                              if(b_down == 0)
                              {
                              hr--;
                              if(hr == -1) hr = 0;
                              delay_ms(70);
                              }

                              lcd_clear();
                              lcd_gotoxy(0,0);
                              sprintf(lcd_buffer1,"Time~%02u:%02u:%02u&quot ;,hr,min,sec);
                              lcd_puts(lcd_buffer1);
                              delay_ms(80);
                              lcd_clear();
                              sprintf(lcd_buffer1,"Time~ :%02u:%02u",min,sec);
                              lcd_puts(lcd_buffer1);
                              delay_ms(80);
                              if(b_set == 0)
                              {
                              rtc_set_time(hr,min,sec);
                              status++;
                              if(status == 19) status = 0;
                              while(b_set == 0);
                              }
                              if(b_set_down == 0)
                              {
                              status--;
                              if(status == -1) status = 0;
                              while(b_set_down == 0);
                              goto b;
                              }
                              }
                              [/code]
                              امام مهدی(عج): اگر شیعیان ما ، که خداوند طاعتشان دهد. در عهد ما وفادار و همدل بودند، هرگز دیدار ما (ظهور) به تاخیر نمی افتاد.(کدام عهد ؟)

                              دیدگاه


                                #45
                                پاسخ : گیر کردن رله هنگام متصل شدن برق به مدار

                                من یه روش می گم ببین اگر خوشتون اومد استفاده کنید اگر نه که هیچ

                                یه متغیر از نوع int تعریف کنید و مقدارش رو 10 بدید

                                بعد اون قسمتی که رله برابر یک میشه رو داخل شرط بزارید به این صورت که اگر متغیری که تعریف شده 0 هست رله رو یک کن

                                و بعد از این شرط مقدار متغیر رو 0 می کنی

                                این باعث میشه که فقط برای اولین بار که تغذیه وصل میشه رله کار نکنه

                                [code=c]
                                unsigned int rahandazi=1;

                                if(hr == en_hr & min == en_min & sec == en_sec)
                                {
                                value = 1;
                                if(rahandazi==0){
                                relay = 1;
                                rahandazi=0;
                                }

                                buzzer = 1;
                                delay_ms(3000);
                                buzzer = 0;

                                }

                                [/code]
                                برد جوجه کشی:
                                مطالعه پست 1 (حتما مطالعه کنید)


                                مطالعه پست 2 (برای مطلع شدن از تغییرات برنامه مطالعه کنید)

                                دانلود

                                توجه:
                                این برد نیمه صنعتی و خانگی هست...
                                برای صنعتی شدن حتما برد مخصوص خودتون رو بزنید...

                                آی دی کانال تلگرامی مربوط به برد جوجه کشی : electr0o0nic@

                                دیدگاه

                                لطفا صبر کنید...
                                X