اطلاعیه

Collapse
No announcement yet.

یک و صرف کردن یک پایه ATMEGA8 با بیسیک در زمان مشخص بدون ایجاد وقفه در بقیه...

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

    یک و صرف کردن یک پایه ATMEGA8 با بیسیک در زمان مشخص بدون ایجاد وقفه در بقیه...

    سلام دوستان
    میخوام یک پایه میکرو ATMEGA8 و زبان بیسیک مثلا پایه Portb.3 رو 60 ثانیه صفر باشه و 90 ثانیه یک باشه
    با استفاده از دستور wait میشه انجام داد اما در بقیه کدها که زیر wait قرار میگیرن تاخیر ایجاد میکنن و اگر زیر تمام کدها هم باشه wait عمل نمیکنه تا مدت زمان کدهای دیگه بگزره، میخوام با روشی انجام بدم که در بقیه کدها وقفه ایجاد نشه
    ممنون میشم راهنمایی کنید

    #2
    پاسخ : یک و صرف کردن یک پایه ATMEGA8 با بیسیک در زمان مشخص بدون ایجاد وقفه در بقیه...

    نوشته اصلی توسط hamidelectroniic
    سلام دوستان
    میخوام یک پایه میکرو ATMEGA8 و زبان بیسیک مثلا پایه Portb.3 رو 60 ثانیه صفر باشه و 90 ثانیه یک باشه
    با استفاده از دستور wait میشه انجام داد اما در بقیه کدها که زیر wait قرار میگیرن تاخیر ایجاد میکنن و اگر زیر تمام کدها هم باشه wait عمل نمیکنه تا مدت زمان کدهای دیگه بگزره، میخوام با روشی انجام بدم که در بقیه کدها وقفه ایجاد نشه
    ممنون میشم راهنمایی کنید
    سلام
    شما باید از کانتر-تایمر های میکرو استفاده کنید
    مگا8 سه تا کانتر تایمر داره
    شما باید از مود تایمر یکی از این کانتر-تایمر ها استفاده کنید
    نحوه کار هم به این صورت هست که وقتی اونو فعال میکنید؛ میکرو در فواصل زمانی مشخص برنامه روتین رو متوقف میکنه به زیر برنامه ای که شما تعیین کردید میره(که تو اون میتونید یک پین رو صفر یا یک کنید) بعد از انجام کار به نقطه متوقف شده برمیگرده و کارش رو ادامه میده
    اگه لازمه تا بیشتر توضیح بدم
    آموزش ساخت جعبه برای مدار با نرم افزار Corel Draw - آموزش طراحی تابلو ثابت با Corel Draw و LED Tool - آموزش کرک LED Tool

    116 کتابخانه مورد نیاز برای Altium Designer

    از دروغ متنفرم؛ هرچند در این مملکت به جرم صداقت، کودن نامیده شوم.

    دیدگاه


      #3
      پاسخ : یک و صرف کردن یک پایه ATMEGA8 با بیسیک در زمان مشخص بدون ایجاد وقفه در بقیه...

      نوشته اصلی توسط hamidelectroniic
      سلام دوستان
      میخوام یک پایه میکرو ATMEGA8 و زبان بیسیک مثلا پایه Portb.3 رو 60 ثانیه صفر باشه و 90 ثانیه یک باشه
      با استفاده از دستور wait میشه انجام داد اما در بقیه کدها که زیر wait قرار میگیرن تاخیر ایجاد میکنن و اگر زیر تمام کدها هم باشه wait عمل نمیکنه تا مدت زمان کدهای دیگه بگزره، میخوام با روشی انجام بدم که در بقیه کدها وقفه ایجاد نشه
      ممنون میشم راهنمایی کنید
      سلام رو ماهت
      فرکانستون چقدره ؟
      [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
      معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
      معرفی نرم افزار Codewizard PWM
      با من بیشتر آشنا شوید

      دیدگاه


        #4
        پاسخ : یک و صرف کردن یک پایه ATMEGA8 با بیسیک در زمان مشخص بدون ایجاد وقفه در بقیه...

        سلام
        ممنون میشم بیشتر توضیح بدید
        فرکانس 8 مگا هرتز هست

        دیدگاه


          #5
          پاسخ : یک و صرف کردن یک پایه ATMEGA8 با بیسیک در زمان &#1

          نوشته اصلی توسط hamidelectroniic
          سلام
          ممنون میشم بیشتر توضیح بدید
          فرکانس 8 مگا هرتز هست
          فرکانس خیلی زیاده ... و زمانتون هم خیلی زیاده ...
          یه کریستال ساعت روی پایه های 9 و 10 بگذارید منبع فرکانس تایمر 2 را از این فرکانس پایه های 9 و 10 انتخاب کنید ...
          بسته به کار شما میتوانید تقسیم فرکانسی رو تغییر بدید ...
          مثلا اگر مقسم را روی 128 تنظیم کنید هر یک ثانیه یک بار به روتین سر ریزی پرش میکند ...
          و شما می توانید در داخل روتین یک متغیری بگذارید و آن را یکی یکی زیاد کنید ...
          و شرط هم بگذارید و بگید اگر به این عدد رسید خروجی رو یک کن و اگر به این عدد رسید صفر کن ...
          همین ... یه چیز خیلی ساده ...
          موفق باشید
          [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
          معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
          معرفی نرم افزار Codewizard PWM
          با من بیشتر آشنا شوید

          دیدگاه


            #6
            پاسخ : یک و صرف کردن یک پایه ATMEGA8 با بیسیک در زمان مشخص بدون ایجاد وقفه در بقیه...

            همین روش بهترین پیشنهاده

            البته صحیح نیست منه حقیر در حضور آقای اسدی اظهار نظر کنم :redface:
            اما اگه نخواستین کریستال اضافه کنید و پردازش سنگینی هم روی میکرو ندارین میشه با یه تایمر و یکی دو تا متغییر هم این کار رو انجام داد
            ولی روش درست همونه که جناب اسدی فرمودن
            آموزش ساخت جعبه برای مدار با نرم افزار Corel Draw - آموزش طراحی تابلو ثابت با Corel Draw و LED Tool - آموزش کرک LED Tool

            116 کتابخانه مورد نیاز برای Altium Designer

            از دروغ متنفرم؛ هرچند در این مملکت به جرم صداقت، کودن نامیده شوم.

            دیدگاه


              #7
              پاسخ : یک و صرف کردن یک پایه ATMEGA8 با بیسیک در زمان مشخص بدون ایجاد وقفه در بقیه...

              نوشته اصلی توسط masoud_m_bf
              البته صحیح نیست منه حقیر در حضور آقای اسدی اظهار نظر کنم :redface:
              خواهش میکنم ... آقا مسعود این حرف را نفرمایید ... شما استاد بنده هستید ...

              نوشته اصلی توسط masoud_m_bf
              اما اگه نخواستین کریستال اضافه کنید و پردازش سنگینی هم روی میکرو ندارین میشه با یه تایمر و یکی دو تا متغییر هم این کار رو انجام داد
              ولی روش درست همونه که جناب اسدی فرمودن
              ببینید دوستان
              دلیل اینکه نخواستم از تایمر یک و فرکانس 8 مگا استفاده کنم این بود که :
              1 - زیادتر پردازش میگرفت
              2 - محاسباتش سنگین تر بود
              3 - دقیق هم در نمی اومد ...
              پیش خودم هم گفتم تایمر یک هم شاید توی برنامه به درد کارای دیگه خورد ... چون امکاناتش واقعا عالیه ...

              موفق باشید
              [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
              معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
              معرفی نرم افزار Codewizard PWM
              با من بیشتر آشنا شوید

              دیدگاه


                #8
                پاسخ : یک و صرف کردن یک پایه ATMEGA8 با بیسیک در زمان مشخص بدون ایجاد وقفه در بقیه...

                نوشته اصلی توسط سامان اسدی
                خواهش میکنم ... آقا مسعود این حرف را نفرمایید ... شما استاد بنده هستید ...
                اختیار دارین
                نوشته اصلی توسط سامان اسدی
                ببینید دوستان
                دلیل اینکه نخواستم از تایمر یک و فرکانس 8 مگا استفاده کنم این بود که :
                1 - زیادتر پردازش میگرفت
                2 - محاسباتش سنگین تر بود
                3 - دقیق هم در نمی اومد ...
                پیش خودم هم گفتم تایمر یک هم شاید توی برنامه به درد کارای دیگه خورد ... چون امکاناتش واقعا عالیه ...

                موفق باشید
                بله برای این که بهترین حالت در بیاد باید Prescale رو برابر 8 قرار داد
                که تازه فرکانس تایمر میشه 1مگا!
                بعد در بهترین حالت باید حدود 15 بار (بخوایم دقیق در بیاد 50 بار!!!) سرریز رو شمرد تازه میرسیم به یک ثانیه :NO:
                اما با کریستال 32768 به راحتی میشه به یک ثانیه دست پیدا کرد
                آموزش ساخت جعبه برای مدار با نرم افزار Corel Draw - آموزش طراحی تابلو ثابت با Corel Draw و LED Tool - آموزش کرک LED Tool

                116 کتابخانه مورد نیاز برای Altium Designer

                از دروغ متنفرم؛ هرچند در این مملکت به جرم صداقت، کودن نامیده شوم.

                دیدگاه


                  #9
                  پاسخ : یک و صرف کردن یک پایه ATMEGA8 با بیسیک در زمان مشخص بدون ایجاد وقفه در بقیه...

                  ممنون از دوستان
                  من از lcd هم استفاده کردم و بعضی کدهارو با کریستال 8 مگا ست کردم،
                  نمیشه با همین روشی که میگید انجام بدم؟
                  من برنامه نویسی تحت ویندوز انجام میدادم و میدم و برنامه نویسی میکرو اسمبلی خوب بلدم اما بیسیک میکرو بخاطر vb6 بلدم یه چیزهایی ولی در حد بالا در بیسیک میکرو نمیدونم تایمر چطوری بنویسم چون vb6 خودش تایمر داره اما میکرو نمیدونم ممنون میشم راهنمایی کنید.

                  دیدگاه


                    #10
                    پاسخ : یک و صرف کردن یک پایه ATMEGA8 با بیسیک در زمان مشخص بدون ایجاد وقفه در بقیه...

                    نوشته اصلی توسط hamidelectroniic
                    ممنون از دوستان
                    من از lcd هم استفاده کردم و بعضی کدهارو با کریستال 8 مگا ست کردم،
                    نمیشه با همین روشی که میگید انجام بدم؟
                    من برنامه نویسی تحت ویندوز انجام میدادم و میدم و برنامه نویسی میکرو اسمبلی خوب بلدم اما بیسیک میکرو بخاطر vb6 بلدم یه چیزهایی ولی در حد بالا در بیسیک میکرو نمیدونم تایمر چطوری بنویسم چون vb6 خودش تایمر داره اما میکرو نمیدونم ممنون میشم راهنمایی کنید.
                    مشکلی نداره شما با نوسان ساز داخلی میکرو 8 مگا رو بسازید برای برنامتون
                    کریستال 32768 رو هم بذارید برای محاسبه ثانیه
                    به هر حال این برنامه:
                    کد:
                    $regfile = "m8def.dat"
                    $crystal = 8000000
                    '#######################################################
                    Enable Interrupts
                    '#######################################################
                    Config Timer1 = Timer , Prescale = 8
                    Enable Ovf1
                    On Ovf1 Hamid
                    Timer1 = 15535
                    Start Timer1
                    '#######################################################
                    Dim Saniye As Byte , Shomarande As Byte
                    '#######################################################
                    Do
                    
                      If Saniye <= 60 Then
                       Reset Portb.3
                      Elseif Saniye > 60 And Saniye <= 150 Then
                       Set Portb.3
                      Else
                       Saniye = 0
                      End If
                    
                      Waitms 1
                    
                    Loop
                    End
                    '#######################################################
                    Hamid:
                    Incr Shomarande
                    Timer1 = 15535
                    If Shomarande >= 20 Then Incr Saniye
                    Return
                    '#######################################################
                    تو این روش من از کانتر تایمر1 استفاده کردم؛ میتونید تغییرش بدین
                    اول از همه فرکانس کاری تایمر رو یک هشتم فرکانس میکرو انتخاب کردم(یعنی هر یک میکرو ثانیه یکی به عدد تایمر اضافه میشه)
                    این تایمر با رسیدن به مقدار 65535 سرریز میشه(تعیین کردم با سرریز شدن به زیربرنامه Hamid پرش کنه)
                    مقدار اولیه اون رو 15535 قرار دادم؛ یعنی بعد از 50000 پالس سرریز خواهد شد(که این پالس خودش یک هشتم فرکانس میکرو هست)
                    و بعد از هر بار سرریز شدن دوباره باید مقدار اولیه اون رو 1535 گذاشت
                    تا حالا داریم 50000 بار ضرب در یک میکرو ثانیه میشه 0.05 ثانیه
                    یعنی میکرو هر 0.05 ثانیه یک بار به زیربرنامه پرش خواهد کرد
                    تو زیر برنامه هم گفتم هر 20 باری که با زیر برنامه پرش میکنه عدد متغییر Saniye رو یکی اضافه کنه
                    با تمام این تلاشها تازه تونستیم یک ثانیه بسازیم
                    شمردن تا 60 و 150 هم که توی حلقه اصلی برنامه هست

                    این اعداد دقیق ترین حالت ممکن هست
                    ولی با این روش به مشکل میخورید چون تمام توان میکرو درگیر پرش محاسبه تایمر و پرش به زیر برنامه خواهد شد
                    شما باید هر چی میتونید عدد PRESCALE رو بیشتر کنید( اعداد قابل قبول 1و8و64و256و1024 هستند) تا میکرو کمتر درگیر تایمر بشه
                    بقیه محاسباتش رو بر اساس Prescale جدید انجام بدین

                    آموزش ساخت جعبه برای مدار با نرم افزار Corel Draw - آموزش طراحی تابلو ثابت با Corel Draw و LED Tool - آموزش کرک LED Tool

                    116 کتابخانه مورد نیاز برای Altium Designer

                    از دروغ متنفرم؛ هرچند در این مملکت به جرم صداقت، کودن نامیده شوم.

                    دیدگاه


                      #11
                      پاسخ : یک و صرف کردن یک پایه ATMEGA8 با بیسیک در زمان مشخص بدون ایجاد وقفه در بقیه...

                      نوشته اصلی توسط masoud_m_bf
                      مشکلی نداره شما با نوسان ساز داخلی میکرو 8 مگا رو بسازید برای برنامتون
                      کریستال 32768 رو هم بذارید برای محاسبه ثانیه
                      خیلی ممنون
                      خب میتونید نمونه کد اینکار بزارید؟ هم نوسان ساز هم برای ساخت تایمر اگر میشه ممنون میشم

                      دیدگاه


                        #12
                        پاسخ : یک و صرف کردن یک پایه ATMEGA8 با بیسیک در زمان &#1

                        نوشته اصلی توسط hamidelectroniic
                        خیلی ممنون
                        خب میتونید نمونه کد اینکار بزارید؟ هم نوسان ساز هم برای ساخت تایمر اگر میشه ممنون میشم
                        بفرمایید
                        این هم کد :
                        [code=qbasic]
                        $regfile = "m8def.dat"
                        $crystal = 8000000
                        $hwstack = 50
                        $swstack = 50
                        $framesize = 50

                        Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , E = Portc.1 , Rs = Portc.0
                        Config Lcd = 16 * 2


                        Config Timer2 = Timer , Async = On , Prescale = 128
                        On Timer2 Timer_1s
                        Enable Timer2
                        Enable Interrupts

                        Ddrb = 1
                        Led Alias Portb.0

                        Dim A As Word , B As Word , On_time As Word , Off_time As Word
                        A = 0
                        On_time = 1
                        'Seconds
                        Off_time = 2
                        'Seconds
                        Off_time = On_time + Off_time
                        ' (On_time + Off_time) nabayad bozorgtar az 65535 shavad

                        Cls
                        Lcd "this is a test"

                        Do
                        ';;;;;;
                        '
                        ';;;;;;
                        '
                        ';;;;;;
                        'this is my code
                        ';;;;;;
                        '
                        ';;;;;;
                        '
                        '
                        Loop

                        End


                        Timer_1s:
                        Incr A
                        If A = On_time Then Reset Led
                        If A = Off_time Then
                        Set Led
                        A = 0
                        End If
                        Return
                        [/code]
                        توضیحات رو بخونید ...
                        موفق باشید

                        اضافه شده در تاریخ :
                        نوشته اصلی توسط hamidelectroniic
                        سلام دوستان
                        ببخشید کسی از دوستان هست روش استفاده صحیح از پایه lcd بگه؟ lcd کاراکتری 2*16 منظورمه اگر شماتیک باشه بهتره
                        بنده اینو میدون پایه 4 و 6، 11 تا 14 باید به میکرو بدیم اما برای بقیه پایه ها خیلی شماتیک متفاوت پیدا میکنم
                        مثلا در یک شماتیک پایه 1 و 3 و 5 مستقیم به gnd میدن و پایه 2 هم به مثبت مدار
                        در یک شماتیک دیگه پایه 1 مستقیم به gnd، پایه 3 با مقاومت 4.7 کیلو اهم به gnd، پایه 5 هم به میکرو و پایه دو هم مثبت، ممنون میشم توضیح بدید
                        راستی چرا تو پروتئوس 14 پایه نشون داده، توی lcd 16 پایه هست، شماره پایه ها تو پروتئوس با خود lcd یکی هستند؟ یعنی تو پروتئوس پایه 7 تا 14 پایه d0 تا d7 هستش، تو خود lcd همینطور هستش؟ پس 15 و 16 چه پایه ای هستند :-?
                        و اینکه پایه های d0 تا d3 آزاد بمونند یا به gnd بدیم
                        با تشکر
                        برنامه LCD رو هم براتون گذاشتم ...
                        پایه 1 و 5 و 7 و 8 و 9 و 10 و 16 رو به زمین
                        پایه 2 به 5v+
                        پایه 15 رو هم با یه مقاومت 100 اهم به 5+ ولت وصل کن
                        پایه 3 رو هم باید با یه پتانسیومتر شدت نور نوشته ها رو تنظیم کنید ... به این شکل که پایه 1 پتانسیومتر رو به زمین و پایه وسط رو به پایه 3 LCD وصل کن و پایه 3 پتانسیومتر رو به مثبت 5v وصل کن ... بعد با یه پیچ گوشتی اون رو تنظیم کنید ...

                        LCD میکروکنترلر مگا8
                        4 23
                        6 24
                        11 25

                        12 26
                        13 27
                        14 28

                        موفق باشید
                        [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
                        معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
                        معرفی نرم افزار Codewizard PWM
                        با من بیشتر آشنا شوید

                        دیدگاه


                          #13
                          پاسخ : یک و صرف کردن یک پایه ATMEGA8 با بیسیک در زمان مشخص بدون ایجاد وقفه در بقیه...

                          خیلی ممنون ازتون
                          اون پتانسیومتر باید چند کیلو باشه؟
                          راستی در کدی که میخوام بنویسم قبل از دستور do روی lcd یک متن درباره مینویسم سپس متن please wait که در این متنها یک حلقه for با دستور wait برای آماده سازی و گرم شدن اولیه سنسور گاز مینویسم ولی با دستور RETURN اون کدها دوباره اجرا میشن درسته؟ اگر اره راه حلی نداره؟
                          با تشکر از شما برای قرار دادن کد

                          دیدگاه


                            #14
                            پاسخ : یک و صرف کردن یک پایه ATMEGA8 با بیسیک در زمان مشخص بدون ایجاد وقفه در بقیه...

                            نوشته اصلی توسط hamidelectroniic
                            خیلی ممنون ازتون
                            اون پتانسیومتر باید چند کیلو باشه؟
                            راستی در کدی که میخوام بنویسم قبل از دستور do روی lcd یک متن درباره مینویسم سپس متن please wait که در این متنها یک حلقه for با دستور wait برای آماده سازی و گرم شدن اولیه سنسور گاز مینویسم ولی با دستور RETURN اون کدها دوباره اجرا میشن درسته؟ اگر اره راه حلی نداره؟
                            با تشکر از شما برای قرار دادن کد
                            من همیشه 10 کیلو اهم گذاشتم جواب داده ...
                            حالا چرا return ؟؟
                            مگه میخواین چیکار کنید ؟
                            [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
                            معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
                            معرفی نرم افزار Codewizard PWM
                            با من بیشتر آشنا شوید

                            دیدگاه


                              #15
                              پاسخ : یک و صرف کردن یک پایه ATMEGA8 با بیسیک در زمان مشخص بدون ایجاد وقفه در بقیه...

                              توی کدی که قرار دادید return نوشتید

                              دیدگاه

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