اطلاعیه

Collapse
No announcement yet.

نوشتن برنامه تایمر ؟

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

    نوشتن برنامه تایمر ؟

    با سلام خدمت اعضای انجمن
    لطفا در نوشتن برنامه زیر بهم کمک کنید:
    خانه ای داریم که می خواهیم از 7 الی 11 شب چراغی در آن روشن شود. همچنین از 9 الی 11 صبح و 5 الی 7 عصر یک شیر آب فعال گردد وچمن ها را آبیاری کند. ممنون میشم اگر کمک کنید.

    #2
    پاسخ : نوشتن برنامه تایمر ؟

    من یه برنامه تایمر در قسمت "پروژه ها و مقالات تکمیل شده AVR" گذاشتم.می تونی روش تغییراتی داد تا این خواسته ات رو تامین کنه.
    انا لله و انا الیه الراجعون

    دیدگاه


      #3
      پاسخ : نوشتن برنامه تایمر ؟

      سلام شما کافی هستش با استفاده از تایمر یک زمان دقیق بسازید و توسط آن ساعت مورد نظرتان را پیاده سازی کنید برای باز کردن شیر آب هم می توانید از استپ موتور ها استفاده کنید و همچنین به صورت دقیق مقدار اب خروجی را نیز حساب کنید البته ساعت دقیق میشه توسط RTC نیز ساخت ولی فکر نکنم اینجا به زمان خیلی دقیقی نیاز داشته باشین
      معجزه این است که هرچه داشته هایت را بیشتر با دیگران سهیم شوی،داراتر می شوی (لئونارد نیموی)
      اگر مغزانسان،چنان ساده می بود که ما از آن سر در می آوردیم،هنوز چنان احمق بودیم که هیچ از آن سر در نمی آوردیم!
      آموزش Modelsim

      دیدگاه


        #4
        پاسخ : نوشتن برنامه تایمر ؟

        بهترین کار استفاده از rtc است .
        اما اگه نمی خواهید از آن استفاده کنید .
        برنامه ای بنویسید که در اینتراپت تایمر یک متغیر را اضافه کند و البته آن متغییر هم ... کمی برنامه نویسی داره ولی کار سختی نیست .
        من قبلا برای یک کاری یه همچنین چیزی نوشتم اگه پیدا کردم براتون می فرستم ولی بازهم میگم اگه امکان داره از همون rtc استفاده کنید .

        دیدگاه


          #5
          پاسخ : نوشتن برنامه تایمر ؟

          من هنوز متوجه نشدم چطور به از طریق تایمر RTC به میکرو بفهمونم که از ساعت 7 تا 11 روشن باشد مثلا میکرو از کجا بفهمه که از 7 تا 11 روشن باشه .و غیره یا مثلا چطور زمان تاخیر 2 ساعته بسازیم ؟ ممنون میشم اگر کمک کنید.

          دیدگاه


            #6
            پاسخ : نوشتن برنامه تایمر ؟

            اگه از rtc استفاده می کنی که اصلا دیگه نیازی به تایمر نداری !
            شما تیم رو می خونی و اگه در بازه زمانی مورد نظر بود کار مورد نظر رو انجام می دی همین و بس .
            اگه نخوای که از rtc استفاده کنی اونوقت باید از تایمر استفاده کنی که کمی سخت تر میشه

            دیدگاه


              #7
              پاسخ : نوشتن برنامه تایمر ؟

              نوشته اصلی توسط KINDA
              من هنوز متوجه نشدم چطور به از طریق تایمر RTC به میکرو بفهمونم که از ساعت 7 تا 11 روشن باشد مثلا میکرو از کجا بفهمه که از 7 تا 11 روشن باشه .و غیره یا مثلا چطور زمان تاخیر 2 ساعته بسازیم ؟ ممنون میشم اگر کمک کنید.
              میکرو همیشه روشن میمونه و از طریق یه ای سی rtc ( مثل ds1307 ) زمان و تاریخ رو هر لخظه در اختیارتون میذاره که حالا با توجه با نیاز تو برنامه مینویسید که مثلا از ساعت 7 تا 11 چراغ ها رو روشن کنه یا مثلا تو زمان دیگری شیرها رو باز کنه
              به رویاهات فکر کن!!

              دیدگاه


                #8
                پاسخ : نوشتن برنامه تایمر ؟

                با سلام به همه دوستان
                من یک پست اینجا زده بودم ولی الان نیست ! نمی دونم والا چی بگم !!!! احتمالا شما یک تاپیک دیگه مشابه این تاپیک جایی دیگه درست نکرده بودید ؟
                تاپیک جامع سیستم مدیریت ساختمان BMS و خانه هوشمند Smart Home
                دانلود مجموعه آموزشی شرکت Altium ا (Altium Training)
                مقالات و فایل های آموزشی نرم افزار Labview
                حل مشکل درایور و راه اندازی FT232 های غیراورجینال

                دیدگاه


                  #9
                  پاسخ : نوشتن برنامه تایمر ؟

                  این برنامه ای که خودم نوشتم 3 تا رله جداگونه کنترل میکنه میتونی برای هرکدوم یک زمان off و یک زمان on تعریف کنی کنترل زمانشم با س تا دکمه فشاری هست و از کلاک ساعت استفاده میکنه
                  بازم مشکل داشتی بگو تا کمکت کنم
                  و گفتم که اگر PIND.6==0 یعنی منبع تغذیه اصلیم قطع بشه lcd خاموش کنه و میتونی battry backup به میکرو وصل کنی که تایمرت از کار نیوفته

                  #include <mega16.h>
                  #include <delay.h>
                  #include <stdio.h>


                  #asm
                  .equ __lcd_port = 0x1b;
                  #endasm
                  #include <Lcd.h>






                  void mode();
                  void inc();
                  void dec();
                  void start();
                  void stop();


                  eeprom unsigned char ond=1 , onc=2 , day=1,rr,onm=3 ,ofc=0 ,onc2=0,onc3=0,ofc2=0,ofc3,set=0;
                  unsigned char sec=0 , min=0 , hr=0 , replay=0 ,clk=1;
                  unsigned char lcd_buff[13],str[16],h[15],m[8],re1[5],r[16],re2[5],ff[16],fff[16],re3[5],rel3[15],rel4[15];
                  //int o;
                  int i,count=1;
                  //eeprom int x=0,del=0 ;


                  interrupt [TIM2_OVF] void timer2_ovf_isr(void){

                  if(sec==59){
                  sec=0;
                  if(min==59){
                  min=0 ;
                  if(hr==23)
                  hr=0;

                  else
                  hr++;
                  }
                  else{
                  min++;
                  }
                  }
                  else
                  sec++;
                  if(PIND.6==0) {
                  PORTA=0x00; }
                  else {

                  if(i==0){

                  lcd_clear();
                  lcd_gotoxy(0,0);
                  sprintf(lcd_buff,"Time=%2d:%2d:%2d" , hr , min , sec);
                  lcd_puts(lcd_buff);


                  lcd_gotoxy(0,1);
                  sprintf(re1,"R1=%2d",onc);
                  lcd_puts(re1);

                  lcd_gotoxy(6,1);
                  sprintf(re2,"R2=%2d",onc2);
                  lcd_puts(re2);

                  lcd_gotoxy(11,1);
                  sprintf(re3,"R2=%2d",onc3);
                  lcd_puts(re3);





                  } }



                  }

                  void main() {
                  PORTD=0X0F ;
                  DDRD=0X00;
                  PORTB=0X00 ;
                  DDRB=0Xff;

                  lcd_init (16);
                  ASSR = 0X08;
                  TCCR2 = 0X05;
                  TCNT2 = 0x00;
                  OCR2 = 0x00;
                  MCUCR=0x00;
                  TIMSK = 0x40;
                  UCSRB=0x00;
                  ACSR=0x80;
                  SFIOR=0x00;
                  ADCSRA=0x00;
                  SPCR=0x00;
                  TWCR=0x00;
                  #asm("sei"
                  day=1;



                  while(1){
                  if(set == 255){
                  onc=0;
                  onc2=0;
                  onc3=0;
                  ofc=0;
                  ofc2=0;
                  ofc3=0;
                  set=1;
                  }

                  if(PIND.6==0) {
                  PORTA=0x00;

                  }
                  else {

                  if (hr != onc && min != onm){
                  rr=0;
                  }
                  replay=0 ;




                  //---------------------------relay1----------------------------------
                  if( rr==0 && hr == onc && sec == 0 && min ==0){
                  PORTB.0=1;
                  }
                  if( rr==0 && hr == ofc && sec == 0 && min ==0){
                  PORTB.0=0;
                  }
                  //-------------------------relay2-----------------------------------
                  if( rr==0 && hr == onc2 && sec == 0 && min ==0){
                  PORTB.1=1;
                  }
                  if( rr==0 && hr == ofc2 && sec == 0 && min ==0){
                  PORTB.1=0;
                  }
                  //---------------------------relay3----------------------------------
                  if( rr==0 && hr == onc3 && sec == 0 && min ==0){
                  PORTB.2=1;
                  }
                  if( rr==0 && hr == ofc3 && sec == 0 && min ==0){
                  PORTB.2=0;
                  }




                  if (day > ond) day=1;
                  if (clk >= 9) clk=0;










                  if(i==1){
                  lcd_clear();
                  lcd_gotoxy(5,0);
                  sprintf(h,"HR:%2d" , hr);
                  lcd_puts(h);
                  delay_ms(150);
                  }
                  if(i==2){
                  lcd_clear();
                  lcd_gotoxy(5,0);
                  sprintf(m,"Min:%2d" ,min);
                  lcd_puts(m);
                  delay_ms(150);
                  }

                  if(i==3){
                  lcd_clear();
                  lcd_gotoxy(0,0);
                  sprintf(r,"RELAY1 oN=%2d",onc);
                  lcd_gotoxy(0,0);
                  lcd_puts(r);
                  delay_ms(150);
                  }
                  if(i==4){
                  lcd_clear();
                  lcd_gotoxy(0,1);
                  sprintf(str,"RELAY1 oFF=%2d",ofc);

                  lcd_puts(str);
                  delay_ms(150);
                  }
                  if(i==5){
                  lcd_clear();
                  lcd_gotoxy(0,0);
                  sprintf(ff,"RELAY2 oN=%2d",onc2);

                  lcd_puts(ff);
                  delay_ms(150);
                  }
                  if(i==6){
                  lcd_clear();
                  lcd_gotoxy(0,1);
                  sprintf(fff,"RELAY2 oFF=%2d",ofc2);

                  lcd_puts(fff);
                  delay_ms(150);
                  }
                  if(i==7){
                  lcd_clear();
                  lcd_gotoxy(0,0);
                  sprintf(rel3,"RELAY3 oN=%2d",onc3);

                  lcd_puts(rel3);
                  delay_ms(150);
                  }

                  if(i==8){
                  lcd_clear();
                  lcd_gotoxy(0,1);
                  sprintf(rel4,"RELAY3 oFF=%2d",ofc3);

                  lcd_puts(rel4);
                  delay_ms(150);
                  }


                  if(PIND.2==0) mode();
                  if(PIND.1==0) inc();
                  if(PIND.0==0) dec();
                  if(PIND.3==0) start();
                  if(PIND.4==0) stop();
                  }}

                  }

                  void mode(){
                  i++;
                  if(i==9) i=0;
                  while(PIND.2==0);
                  }

                  void inc(){
                  if(i==1){
                  hr++;
                  if(hr==24) hr=0;
                  }
                  if(i==2){
                  min++;
                  if(min==60) min=0;
                  }
                  if(i==3){
                  onc++;
                  if(onc==24) onc=0;
                  }

                  if(i==4){
                  ofc++;
                  if(ofc==24) ofc=0;
                  }
                  if(i==5){
                  onc2++;
                  if(onc2==24) onc2=0;
                  }

                  if(i==6){
                  ofc2++;
                  if(ofc2==24) ofc2=0;
                  }
                  if(i==7){
                  onc3++;
                  if(onc3==24) onc3=0;
                  }

                  if(i==8){
                  ofc3++;
                  if(ofc3==24) ofc3=0;
                  }

                  while(PIND.1==0);
                  }



                  void dec(){
                  if(i==1){
                  if(hr==0) hr=24;
                  hr--;
                  }
                  if(i==2){
                  if(min==0) min=60;
                  min--;
                  }
                  if(i==3){
                  if(onc==0) onc=24;
                  onc--;
                  }

                  if(i==4){
                  if(ofc==0) ofc=24;
                  ofc--;
                  }
                  if(i==5){
                  if(onc2==0) onc2=24;
                  onc2--;
                  }

                  if(i==6){
                  if(ofc2==0) ofc2=24;
                  ofc2--;
                  }
                  if(i==7){
                  if(onc3==0) onc3=24;
                  onc3--;
                  }

                  if(i==8){
                  if(ofc3==0) ofc3=24;
                  ofc3--;
                  }

                  while(PIND.0==0);

                  }


                  void start(){
                  PORTB.0=1;
                  PORTB.1=1;
                  PORTB.2=1;

                  while(PIND.3==0);

                  }

                  void stop(){
                  PORTB.0=0;
                  PORTB.1=0;
                  PORTB.2=0;
                  while(PIND.4==0);


                  }

                  دیدگاه

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