اطلاعیه

Collapse
No announcement yet.

کمک در مورد تنظیم تایمر بصورت دستی نه بوسیله برنامه

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

    کمک در مورد تنظیم تایمر بصورت دستی نه بوسیله برنامه

    با سلام خدمت اساتید محترم :nerd: :nerd: :nerd: :nerd: :nerd:

    من پروژه ای داشتم ابته با کد ویژن که امیدوارم با یاری خدا و کمک شما دوستان بتونم اونو به نتیجه برسونم
    در این پروژه با استفاده از یک ATMEG 16 or 32 و یک LCD بر روی پورت A و 5 میکرو
    سوئیچ بر روی پورت D و دو رله بر روی پورت C می خواستم عملیات زیر را انجام دهم
    ابتدا با استفاده از سوئیچ شماره 1 به میکرو بفهمونم که کلیه عملیات ها برای رله شماره 1 است بعد با سوئیچ 2 و 3 بتونم زمان را برحسب ثانیه کم و زیاد کنم بعد با سوئیچ 4 کلیه عملیات های فوق را ثبت کنم
    دوباره با سوئیچ 5 رله 2 را فعال کنیم و با سوئیچ های 2 و 3 زمان بدهیم با سوئیچ 4 عملیات فوق را تثبیت کنم :arrow: :arrow: :arrow:

    منظورم این که با سوئیچ 1 کلیه عملیات برای رله 1 باشد با سوئیچ های 2 و3 مثلا یک زمان 15 ثانیه ای بدهیم که بر روی LCD هم نمایش داده شود بعد با سوئیچ 4 عملیات را تثبیت کنم
    و این عملیات را بر روی رله 2 نیز انجام دهم :arrow: :arrow: :arrow: :arrow:

    [color=navy]در واقع می خوام زمان بصورت دستی تنظیم بشه نه با فرمان delay

    چشم براه جوابتونم :agree: :agree: :agree: :agree: :agree:
    به امید اینکه در پناه یزدان هر روز موضوع جدیدی در زندگی یاد بگیریم و بتوانیم از آن به بهترین شکل استفاده کنیم

    #2
    پاسخ : کمک در مورد تنظیم تایمر بصورت دستی نه بوسیله برنامه

    سلام
    البته با استفاده از آی سی تایمر 555 و یک شمارنده خیلی راحت تر می تونی به هدفت برسی . آی سی تایمر زمانی رو ایجاد می کنه و با یک شمارنده می تونی تعداد پالس های تولید شده رو بشماری هر بار که به مقدار مورد نظرت رسید کاری رو که می خواهی انجام بده .

    پیروز و سربلند باشید.
    آدمی از عالم خاکی نمی آید بدست

    عالمی دیگر بباید ساخت و از نو آدمی
    پردازش تصویر با FPGA از صفر تا انتها
    http://www.eca.ir/forum2/index.php?topic=74299.0

    دیدگاه


      #3
      پاسخ : کمک در مورد تنظیم تایمر بصورت دستی نه بوسیله برنامه


      از اینکه لطف کردید و پاسخ دادید ازتون ممنونم

      دوست عزیز این پروژ] حتما باید با AVR و LCD 16*2 باشه و با کامپایر کدویژن :cry: :cry: :cry2: :cry2: :cry2:

      منتظر جوابتون هستم :nerd: :nerd:
      به امید اینکه در پناه یزدان هر روز موضوع جدیدی در زندگی یاد بگیریم و بتوانیم از آن به بهترین شکل استفاده کنیم

      دیدگاه


        #4
        پاسخ : کمک در مورد تنظیم تایمر بصورت دستی نه بوسیله برنامه

        سلام
        ببین این روش چطوره؟
        کریستال میکرو رو بذار 8MHz و کلاک تایمر 1 رو روی 31250 تنظیم کن. تو این حالت اگه تایمر 1 ، 32 بار تا 0xFFFF بشماره زمان 1 ثانیه بدست میاد. یعنی کافیه شما تعداد دفعات یک شدن پرچم overflow رو بشماری ( 32 بار ) . حالا شما می تونی یه متغیر رو طوری تعریف کنی که مثلاً با هر بار زدن 2 افزایش پیدا کنه و بازدن 3 کاهش. بعدش مقدار این متغیر رو ضرب در 32 کن. با این اوصاف مثلاً برای 3 ثانیه، متغیر شما میشه 96. یعنی اگه تایمر 96 بار تا انتها بشماره زمان 3 ثانیه دقیق بدست اومده

        دیدگاه


          #5
          پاسخ : کمک در مورد تنظیم تایمر بصورت دستی نه بوسیله برنامه

          مرسی از توجه و عنایت شما دوست عزیز

          انشا ا... فردا شب این کار رو که گفتین انجام می دهم جوابشو بهتون می دم :agree: :agree: :agree: :agree:

          بازم ممنونم :applause: :applause:
          به امید اینکه در پناه یزدان هر روز موضوع جدیدی در زندگی یاد بگیریم و بتوانیم از آن به بهترین شکل استفاده کنیم

          دیدگاه


            #6
            پاسخ : کمک در مورد تنظیم تایمر بصورت دستی نه بوسیله برنامه

            سلام حمید خان
            اگه تو برنامه نویسی با کدویژن به مشکل برخوردی میتونی رو کمکم حساب کنی.
            حتما با کلیدها هم مشکل پیدا خواهی کرد.
            اگه کاری داشتی خبرم کن. :bye
            engineer.imani@gmail.com
            خداوند ميآ‌فرمايند:
            هرگز نيكي و بدي در جهان يكسان نيست، هميشه بدي خلق را به بهترين عمل (كه نيكي است) پاداش ده تا همان كس كه گويي با تو بر سر دشمني است دوست تو گردد. «سوره فصلت آيه 34»

            دیدگاه


              #7
              پاسخ : کمک در مورد تنظیم تایمر بصورت دستی نه بوسیله برنامه


              بازم از این همه لطف ممنونم امید وارم بتونم یه روزی این همه محبت را جبران کنم :smile: :smile: :smile:

              دارم باهاش کار می کنم :biggrin: :biggrin: :biggrin: :biggrin:

              انشا ا... خبرشو بهتون می دم
              بازم تشکر می کنم
              به امید اینکه در پناه یزدان هر روز موضوع جدیدی در زندگی یاد بگیریم و بتوانیم از آن به بهترین شکل استفاده کنیم

              دیدگاه


                #8
                پاسخ : کمک در مورد تنظیم تایمر بصورت دستی نه بوسیله برنامه

                با سلام خدمت دوستان عزیز :smile:

                من مدار رو آماده کردم lcd بر روی پورت A سوئیچ ها بر روی پورت B و رله یا led بر روی پورت c ولی برنامه اشکالاتی داره :NO: :NO: :NO:

                لطفا اگه امکان داره دوستان چک کنند

                این برنامه اشکال داره :angry: :angry: :angry: :angry: :angry: :angry: :angry: :angry: :angry: :angry:

                *************************
                This program was produced by the
                CodeWizardAVR V1.24.4 Standard
                Automatic Program Generator
                © Copyright 1998-2004 Pavel Haiduc, HP InfoTech s.r.l.
                http://www.hpinfotech.com
                e-mailffice@hpinfotech.com

                Project :
                Version :
                Date : 2008/08/25
                Author : Hamid Reza A
                Company : A
                Comments:


                Chip type : ATmega32
                Program type : Application
                Clock frequency : 8.000000 MHz
                Memory model : Small
                External SRAM size : 0
                Data Stack size : 512
                ************************************************** ***/

                #include <mega32.h>
                #include <stdio.h>
                #include <delay.h>
                #define key 1 PINB.1
                #define key 2 PINB.2
                #define key 3 PINB.3
                #define key 4 PINB.4
                #define LED1 PORTD.5

                // Alphanumeric LCD Module functions
                #asm
                .equ __lcd_port=0x1B ;PORTA
                #endasm
                #include <lcd.h>

                int sec=0;
                int min=0;
                int hour=0;

                // Timer 1 overflow interrupt service routine
                interrupt [TIM1_OVF] void timer1_ovf_isr(void)
                {
                // Place your code here

                }

                // Declare your global variables here

                void main(void)
                {
                // Declare your local variables here

                // Input/Output Ports initialization
                // Port A initialization
                // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
                // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
                PORTA=0x00;
                DDRA=0xFF;

                // Port B initialization
                // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
                // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
                PORTB=0x00;
                DDRB=0x00;

                // Port C initialization
                // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
                // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
                PORTC=0x00;
                DDRC=0xFF;

                // Port D initialization
                // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
                // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
                PORTD=0x00;
                DDRD=0x00;

                // Timer/Counter 0 initialization
                // Clock source: System Clock
                // Clock value: Timer 0 Stopped
                // Mode: Normal top=FFh
                // OC0 output: Disconnected
                TCCR0=0x00;
                TCNT0=0x00;
                OCR0=0x00;

                // Timer/Counter 1 initialization
                // Clock source: System Clock
                // Clock value: 31.250 kHz
                // Mode: Normal top=FFFFh
                // OC1A output: Discon.
                // OC1B output: Discon.
                // Noise Canceler: Off
                // Input Capture on Falling Edge
                TCCR1A=0x00;
                TCCR1B=0x04;
                TCNT1H=0x00;
                TCNT1L=0x00;
                ICR1H=0x00;
                ICR1L=0x00;
                OCR1AH=0x00;
                OCR1AL=0x00;
                OCR1BH=0x00;
                OCR1BL=0x00;

                // Timer/Counter 2 initialization
                // Clock source: System Clock
                // Clock value: Timer 2 Stopped
                // Mode: Normal top=FFh
                // OC2 output: Disconnected
                ASSR=0x00;
                TCCR2=0x00;
                TCNT2=0x00;
                OCR2=0x00;

                // External Interrupt(s) initialization
                // INT0: Off
                // INT1: Off
                // INT2: Off
                MCUCR=0x00;
                MCUCSR=0x00;

                // Timer(s)/Counter(s) Interrupt(s) initialization
                TIMSK=0x04;

                // Analog Comparator initialization
                // Analog Comparator: Off
                // Analog Comparator Input Capture by Timer/Counter 1: Off
                ACSR=0x80;
                SFIOR=0x00;

                // LCD module initialization
                lcd_init(16*2);

                // Global enable interrupts
                #asm("sei&quot

                while (1)
                {
                // Place your code here
                if(++sec==60)
                {
                sec=0;
                min=min+1;
                if(++min==60)
                {
                min=0;
                hour=hour+1;
                if(++hour==24)
                {
                hour=0;


                char txt[15];
                goto_lcd(0,0);
                clear_lcd();
                printf ('d%,d%,d%'



                bit key1_old;

                if(key1_old ^ key1)
                {
                key1_old=key1;
                if(key1)
                {
                LED1=1;
                lcd_putsf("Hello"
                }
                else
                {
                LED1=0;
                }
                }



                }
                }

                }
                };
                }


                منتظرتون هستم :cry2: :cry2: :cry2: :cry2: :cry2: :cry2: :cry2:
                به امید اینکه در پناه یزدان هر روز موضوع جدیدی در زندگی یاد بگیریم و بتوانیم از آن به بهترین شکل استفاده کنیم

                دیدگاه


                  #9
                  پاسخ : کمک در مورد تنظیم تایمر بصورت دستی نه بوسیله برنامه

                  سلام
                  فکر کنم اگه هی خورده به error ها دقت کنی مشکلت حل بشه. روشون کلیک کن، محل خطا رو بهت نشون میدن.
                  بیشتر ایراداتی که برنامه شما داره، نوشتاری هستن. مثلاً ماکرو ها رو با فاصله نوشتی ( key 1 ) اما تو برنامه به صورت key1 استفاده کردی. همیشه هم سعی کن برای تعریف ماکرو از حروف بزرگ استفاده کنی ( این طور معموله ). یه جاهایی هم دستور ها رو اشتباه نوشتی و ...
                  کلاً معلومه خیلی دقت نکردی! یه خورده بیشتر حوصله به خرج بده

                  دیدگاه


                    #10
                    پاسخ : کمک در مورد تنظیم تایمر بصورت دستی نه بوسیله برنامه

                    سلام خدمت دوستان

                    به این برنامه که امروز ظهر نوشتم توجه کنید
                    در این برنامه lcd بر روی پورت A دو سوئیچ بر روی پورت D که بازدن هر سوئیچ 2 ثانیه به زمان اضافه یا کم می شود

                    اما من می خواستم وقتی که یک سوئیچ را فشار می دهم یکه عدد بر حسب ثانیه بر روی lcd حک بشه ( مثلا 15 ) بعد رله ای که بعدا بر روی پورت c می ذارم مثلا بعدا از 15 ثاینه روشن بشه :sad: :sad: :sad: :sad: :sad: :sad: :sad: :sad:

                    منظورم تنظیم زمان برای رله بصورت دستی است

                    برنامه رو ببنید :NO: :NO: :NO: :NO: :NO: :NO: :NO: :NO: :NO:

                    char txt[15]
                    int sec=0;
                    int min=0;
                    int hour=0;

                    while(1)
                    {
                    if(~PIND.6)
                    {
                    sec=sec+2;
                    }
                    if(~PIND.5)
                    {
                    sec=sec-2;
                    }

                    if(sec==59)
                    {
                    sec=0;

                    if(min==59)
                    {
                    min=0;


                    if(hour==23)
                    {
                    hour=0;
                    }

                    else
                    {
                    hour++;
                    }

                    else
                    {
                    min++;
                    }

                    else
                    {
                    sec++;
                    }

                    sprintf(txt,"%d,%d,%d",hour,min,sec);

                    lcd_puts(txt);

                    delay_ms(130);

                    lcd_clear();
                    }
                    }


                    منتظر نظراتتون هستم
                    :smile: :smile: :smile: :smile: :smile: :cry: :cry: :cry: :cry: :cry:

                    به امید اینکه در پناه یزدان هر روز موضوع جدیدی در زندگی یاد بگیریم و بتوانیم از آن به بهترین شکل استفاده کنیم

                    دیدگاه


                      #11
                      پاسخ : کمک در مورد تنظیم تایمر بصورت دستی نه بوسیله برنامه

                      سلام حمید خان
                      خوب خودت گفتی که با زدن هر کلید 2 ثانیه کم یا زیاد بشه.
                      نوشته اصلی توسط hamid_adel
                      if(~PIND.6)
                      {
                      sec=sec+2;
                      }
                      if(~PIND.5)
                      {
                      sec=sec-2;
                      }
                      البته علاوه بر اون ممکنه که با زدن هر کلید چند بار عملی که واسش در نظر گرفتی رو انجام بده.
                      برای همین باید کاری کنی که وقتی کلید رو زدی صبر کنه تا دستتو از روی کلید برداری.
                      من قسمتی از این برنامه رو اصلاح کردم،آ‌ امیدوارم کمکت کنه:
                      char txt[15]
                      int sec=0;
                      int min=0;
                      int hour=0;
                      lcd_clear();
                      while(1)
                      {
                      if(PIND.6==1)
                      {
                      sec++;
                      while (PIND.6==1);
                      }
                      if(PIND.5==1)
                      {
                      sec--;
                      while (PIND.5==1);
                      }
                      sprintf(txt,"h=%2d,m=%2d,s=%2d ",hour,min,sec);
                      lcd_gotoxy(0,0);
                      lcd_puts(txt);
                      }
                      }
                      :nice: :bye
                      خداوند ميآ‌فرمايند:
                      هرگز نيكي و بدي در جهان يكسان نيست، هميشه بدي خلق را به بهترين عمل (كه نيكي است) پاداش ده تا همان كس كه گويي با تو بر سر دشمني است دوست تو گردد. «سوره فصلت آيه 34»

                      دیدگاه


                        #12
                        پاسخ : کمک در مورد تنظیم تایمر بصورت دستی نه بوسیله برنامه


                        دستت درد نکنه اینو امشب امتحان می کنم :surprised: :surprised: :surprised:

                        خبرشو بهت می دم :mrgreen: :mrgreen:

                        باتشکر فراوان :applause: :applause:
                        به امید اینکه در پناه یزدان هر روز موضوع جدیدی در زندگی یاد بگیریم و بتوانیم از آن به بهترین شکل استفاده کنیم

                        دیدگاه


                          #13
                          پاسخ : کمک در مورد تنظیم تایمر بصورت دستی نه بوسیله برنامه

                          بازم سلام به mc_AVR خان

                          راستی نفهمیدم دستور while واسه چی گذاشتی


                          یه سوال دیگه که ربطی به موضوع نداره . با lcd گرافیکی کار کردی ؟؟؟؟؟؟؟؟؟؟؟ البته در این پروژه من با lcd 16*2 کار کردم


                          بازم ممنون از توجهتون :nerd: :nerd: :nerd: :nerd: :nerd: :nerd:
                          به امید اینکه در پناه یزدان هر روز موضوع جدیدی در زندگی یاد بگیریم و بتوانیم از آن به بهترین شکل استفاده کنیم

                          دیدگاه


                            #14
                            پاسخ : کمک در مورد تنظیم تایمر بصورت دستی نه بوسیله برنامه

                            با سلام برنامه ای را که نوشته بودید امتحان کردم :NO: :NO: :NO:

                            ولی وقتی یک سویچ + ( سوئیچی که 2 ثانیه 2 ثانیه اضافه می کند ) را فشار می دهیم خیلی سریع شروع به شمارش می کند مثلا تا 200 یا 300 ثانیه می رود :cry2: :cry2: :cry2: :cry2: :cry2: :cry2: :cry2:

                            ولی در عوض وقتی بخواهیم با سوئیچ - ( سوئیچی که 2 ثانیه 2 ثانیه کم می کند ) را فشار دهیم فقط یک بار 2 ثانیه کم می کند و کل برنامه متوقف می شود :cry2: :cry2: :cry2: :cry2: :cry2: :cry2:


                            لطفا دوستان اهل فن بررسی کنند ببینند اشکال کار از کجاست :sad: :sad:

                            منتظر جوابتون هستم با تشکر
                            به امید اینکه در پناه یزدان هر روز موضوع جدیدی در زندگی یاد بگیریم و بتوانیم از آن به بهترین شکل استفاده کنیم

                            دیدگاه


                              #15
                              پاسخ : کمک در مورد تنظیم تایمر بصورت دستی نه بوسیله برنامه

                              یه مشکل بزرگ یه مشکل بزرگ :angry: :angry: :angry: :angry: :angry: :angry:

                              من وقتی که یکی از سویئچها را فشار می دم می خوام که 2 تا 2تا مثلا به مقدار x اضاف بشه و روی LCD هم نمایش بده

                              منظورم اینه که مثلا X>0 و X<20 با هر بار فشار دادن همان سوئیچ 2 تا به x اضاف بشه مثلا اگر 4 بار سویچ را فشار بدم x بشه 8 و روی ال سی دی بیاد

                              ولی مشکلی که هست با فشار داد سوئیچ یک دفعه به x اضاف می شود و تا بی نهایت می رود

                              خلاصه اینکه موندم توش بابا یکی به دادم برسه :angry: :angry: :angry: :angry: :angry: :angry: :angry: :angry: :angry: :angry: :angry:
                              به امید اینکه در پناه یزدان هر روز موضوع جدیدی در زندگی یاد بگیریم و بتوانیم از آن به بهترین شکل استفاده کنیم

                              دیدگاه

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