اطلاعیه

Collapse
No announcement yet.

اینتراپت خارجی به صورت نرم افزاری

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

    اینتراپت خارجی به صورت نرم افزاری

    سلام.
    من از پورت c در میکروی atmega8 به عنوان خروجی دیتا استفاده می کنم. حالا می خوام یک پین از میکرو که آزاد هست رو به عنوان اینتراپت در نظر بگیرم. چطور میکرو رو کانفیگ کنم؟
    ممنون می شوم یکی کمک کنه.

    #2
    پاسخ : اینتراپت خارجی به صورت نرم افزاری

    اینتراپتهای 1 و2 که روی پین d تعریف شده اند و ربطی به پورت c ندارند
    فرزندم در راه است

    دیدگاه


      #3
      پاسخ : اینتراپت خارجی به صورت نرم افزاری

      اشتباه کردم. خروجی رو پورت D انتخاب کردم.

      دیدگاه


        #4
        پاسخ : اینتراپت خارجی به صورت نرم افزاری

        سلام
        فکر نمیکنم بشه این کار را نرم افزاری انجام داد مگه اینکه یه تایمر راه بندازی تو وقفه اون یکی از پینها را چک کنی
        البته من تا حالا این کار را نکردم ولی تنها چیزی که به نظرم میرسه اینه
        فرزندم در راه است

        دیدگاه


          #5
          پاسخ : اینتراپت خارجی به صورت نرم افزاری


          با تغییر وضعیت پین مربوط به وقفه خارجی به طور نرم افزاری هم این کار شدنیه
          مثلا اگه
          Config Int0 = Low Level

          پین مورد نظر رو 1 کنی

          portD.2 = 1





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

          دیدگاه


            #6
            پاسخ : اینتراپت خارجی به صورت نرم افزاری

            من از پورت D هر 8 پینش رو استفاده می کنم. یه کم بیشتر توضیح بدید.

            دیدگاه


              #7
              پاسخ : اینتراپت خارجی به صورت نرم افزاری

              وقفه خارجی یک مکانیزم سخت افزاری هست و نمیشه هم به صورت نرم افزاری انجامش داد، شما میتونید هر پینی که خواستید رو ورودی تعریف کنید اما اون نمیتونه براتون وقفه ایجاد کنه. توی atmega8 پایه های PD2 و PD3 جهت وقفه خارجی قرار داده شدند و اگر میخواید وقفه خارجی داشته باشید باید تنظیمات وقفه رو انجام بدید و از اونها به عنوان مولد وقفه استفاده کنید.
              از آنجا که گاهی فرصت بازخوانی پست نیست، بابت غلط های املایی و نگارشی احتمالی معذرت میخوام.
              هیچیک از پاسخ هایی که میدم را کاملا تایید نمیکنم و ممکن هست اشتباه کرده باشم، اگر من به نوشته ام مطمئن هستم شما مشکوک باشید.
              اگر در حل مشکل من کمک کردید و دکمه تشکر رو نزدم حتما فراموش کردم کوچکترین کمک شما برایم ارزشمند است!
              اگر به هر طریقی از من ناراحت شدید حتما با یک پیام خصوصی تذکر بدهید تا مشکل رو حل کنیم و رابطه ی صمیمانه، پایدار بماند.
              شاد و موفق باشید

              دیدگاه


                #8
                پاسخ : اینتراپت خارجی به صورت نرم افزاری

                جناب study
                فرمایش شما در مورد اینکه وقفه خارجی یک مکانیزم سخت افزاری هست صحیحه اما این سخت افزار به یک نرم افزار داره فرمان میده
                بنابراین با دستکاری در قسمت نرم افزار نیز می تونی همون روال سخت افزاری رو طی کنی

                2 با داشتن یک وقفه خارجی می تونی تمامی پین های میکرو رو وقفه دار کنی (حرفم قابل اثبات)


                من فکر می کنم جناب feshwari باید حداقل یکی از پین هایی که وقفه خارجی رو تامین می کنه رو خالی کنن تا بتونن کارشو انجام بده

                توضیحات اضافی : :nerd: :nerd: :nerd:

                در موقع برنامه نویسی بیشتر سعی کنیم از پین هایی که مربوط به وقفههای خارجی ، پورت سریال و تایمرها و کانتر هاست استفاده نکنیم مگر در مواقعی که ناچاریم


                $regfile = "m32def.dat"
                $crystal = 8000000

                Dim Count As Integer
                Config Int0 = Low Level

                Dim A As Byte


                On Int0 Int0_int 'Initialise the INT0 Interrupt


                Enable Interrupts
                Enable Int0 'enable the interrupt

                Count = 0 'reset counter
                Do

                Waitms 100
                Incr A
                Print A
                If A > 3 Then
                Ddrd.2 = 1
                A = 0
                End If

                Loop
                End

                Int0_int:

                Incr Count
                If Count = 2 Then
                Print "Int 0 occured"
                Count = 0
                Ddrd.2 = 0
                End If
                Return
                اگه مردم می دونستن زمان چقدر با ارزشه دیگه هیچ وقت کفش بند دار نمی خریدن البرت انیشتن

                دیدگاه


                  #9
                  پاسخ : اینتراپت خارجی به صورت نرم افزاری

                  منظور شما از وقفه نرم افزاری چیه؟ من به بیسیک زیاد مسلط نیستم ولی احتمال میدم که شما توی bascom میاید یک پایه رو به عنوان وقفه نرم افزاری تعریف میکنید بعد اون میاد موقع کامپایل برنامه و تولید کد اسمبلی بین هر چند دستور اسمبلی که تولید میکنه وضعیت اون پایه که شما مشخص کردید رو چک میکنه ( بدون اینکه شما متوجه بشید که همچین کدی تولید شده ) که اگر تغییر وضعیت داده بود گزارش وقفه بده، اگر اینجوری باشه این دیگه اسمش نمیشه وقفه، میشه polling یا سرکشی که Bascom اسمش رو عوض کرده و گذاشته وقفه نرم افزاری و این نوع وقفه اصلا مزایای وقفه سخت افزاری رو هم نداره، چون هم کد برنامه تولیدی بیخودی زیاد میشه هم اینکه اصلا وقفه نیست، سرکشی هست، منتهی به جای اینکه توی یک نقطه منتظر بمونه و همینطور چک کنه تا تغییر وضعیت پایه برسه میاد و هر از گاهی یکبار چک میکنه ( کلک رشتی )
                  اگر من اشتباه میکنم روشن تر توضیح بدید ولی من خیلی بعید میدونم که خود عمل وقفه با همون ویژگیها قابل انتقال به هر پایه دلخواه باشه.
                  از آنجا که گاهی فرصت بازخوانی پست نیست، بابت غلط های املایی و نگارشی احتمالی معذرت میخوام.
                  هیچیک از پاسخ هایی که میدم را کاملا تایید نمیکنم و ممکن هست اشتباه کرده باشم، اگر من به نوشته ام مطمئن هستم شما مشکوک باشید.
                  اگر در حل مشکل من کمک کردید و دکمه تشکر رو نزدم حتما فراموش کردم کوچکترین کمک شما برایم ارزشمند است!
                  اگر به هر طریقی از من ناراحت شدید حتما با یک پیام خصوصی تذکر بدهید تا مشکل رو حل کنیم و رابطه ی صمیمانه، پایدار بماند.
                  شاد و موفق باشید

                  دیدگاه


                    #10
                    پاسخ : اینتراپت خارجی به صورت نرم افزاری

                    در برنامه فرض کن یه جایی به ناچار بخای بری توی زیر روال وقفه چکار می کنی صبر میکنی تا سخت افزار وقفه رو اعمال کنه !!!

                    در ثانی این برنامه هر به طور سخت افزاریه و هم به طور نرم افزاری
                    یک مثال ساده
                    کنترل تلوزیون رو در نظر بگیر اگه فرض کنیم که هرکدوم از کلید های روی خود تلوزیون یک وقفه سخت افزاری باشه (که همین طور هم هست ) پس کلید مربوطه روی کنترل تلوزیون چی تولید می کنه ؟؟؟
                    در صورتی که واضحه هیچ کدوم از این روال ها نیاز به سرکشی ندارن
                    بحث کلی سر اینه که همون کارهایی که با سخت افزار میشه انجام داد با نرم افزار هم میشه انجام داد اگر چه این زیر روال توی قسمت وقفه باشه

                    با یک تعقیر کوچیک (مثل اضافه کردن یک دیود ) میشه هر پینی رو که می خوای وقفه دار کنی اتلبته حداقل به یک وقفه خارجی نیازه

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

                    دیدگاه


                      #11
                      پاسخ : اینتراپت خارجی به صورت نرم افزاری

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

                      دیدگاه


                        #12
                        پاسخ : اینتراپت خارجی به صورت نرم افزاری

                        فکر کنم بحث ما بی نتیجه باشه
                        و تمامی این صحبت های شما کاملا درسته
                        هر کسی یک برداشتی از حرف خودش و دیگران داره
                        به قول شاعر :
                        فیل اندر خانه ای تاریک بود آورده بودندش از هنود


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

                        دیدگاه


                          #13
                          پاسخ : اینتراپت خارجی به صورت نرم افزاری

                          نوشته اصلی توسط Study
                          منظور شما از وقفه نرم افزاری چیه؟ من به بیسیک زیاد مسلط نیستم ولی احتمال میدم که شما توی bascom میاید یک پایه رو به عنوان وقفه نرم افزاری تعریف میکنید بعد اون میاد موقع کامپایل برنامه و تولید کد اسمبلی بین هر چند دستور اسمبلی که تولید میکنه وضعیت اون پایه که شما مشخص کردید رو چک میکنه ( بدون اینکه شما متوجه بشید که همچین کدی تولید شده ) که اگر تغییر وضعیت داده بود گزارش وقفه بده، اگر اینجوری باشه این دیگه اسمش نمیشه وقفه، میشه polling یا سرکشی که Bascom اسمش رو عوض کرده و گذاشته وقفه نرم افزاری و این نوع وقفه اصلا مزایای وقفه سخت افزاری رو هم نداره، چون هم کد برنامه تولیدی بیخودی زیاد میشه هم اینکه اصلا وقفه نیست، سرکشی هست، منتهی به جای اینکه توی یک نقطه منتظر بمونه و همینطور چک کنه تا تغییر وضعیت پایه برسه میاد و هر از گاهی یکبار چک میکنه ( کلک رشتی )
                          اگر من اشتباه میکنم روشن تر توضیح بدید ولی من خیلی بعید میدونم که خود عمل وقفه با همون ویژگیها قابل انتقال به هر پایه دلخواه باشه.
                          ببینید مردم دیگه چقدر به bascom بدبینند که چه فکرهایی که نمیکنند oo:
                          دیگه این بسکام بی زبون از خدا بی خبر چه کارا میکنه که ما نمیدونیم؟؟؟؟؟؟؟؟؟؟؟؟؟؟
                          اصلا بسکام چیزی به نام وقفه نرم افزاری نداره
                          لطفا زود قضاوت نکنین
                          پروردگارا: به من زیستنی عطا کن که در لحظه مرگ بر بی ثمری لحظه ای که برای زیستن گذشته است حسرت نخورم، و مردنی عطا کن که بر بیهودگیش سوگوار نباشم. بگذار تا آن را خود انتخاب کنم، اما آنچنان که تو دوست میداری

                          دیدگاه


                            #14
                            پاسخ : اینتراپت خارجی به صورت نرم افزاری

                            سعید جان جسارت نشده باشه، من امروز توی منابع مختلف بیشتر مطالعه کردم و متوجه شدم که فلسفه این وقفه نرم افزاری کلا چی هست. این نوع وقفه با وقفه سخت افزاری فرق میکنه، شما وقتی توی Bascom یک پین رو غیر از پین های اصلی به عنوان ورودی وقفه تعریف میکنید اون پین فقط میتونه برای شما وقفه نرم افزاری تولید کنه ( پرشی به روتین وقفه انجام میشه ) وقفه نرم افزاری با وقفه خارجی سخت افزاری فرق میکنه و همونطور که گفتم ویژگی اصلی اون که غیر همزمان بودن هست رو نداره. کلا فلسفه وقفه نرم افزاری چیز دیگری هست، باز هم میگم که شما پایه های دیگه رو فقط میتونید برای وقفه نرم افزاری تعریف کنید، وقفه سخت افزاری فقط توسط پایه های مشخص شده توسط دیتاشیت اتفاق میوفته.
                            --------
                            امیرجان اتفاقا شما زود قضاوت کردید،Bascom خیلی کارها میکنه که احتمالا شما متوجه نمیشید، طبیعی هست که به Bascom بد بین باشم، کامپایلری که میاد برنامه ای رو که میشه با 50 بایت از حافظه نوشت رو میکنه حدود 300 بایت یا بیشتر، و سرعت اجرای برنامه رو به مراتب پایین میاره باید بهش بدبین بود، چرا که کارهای بیخود زیاد انجام میده، کسی که میکروکنترلر رو با زبان های سطح بالا کار کرده و میکنه و به زبان ماشین مسلط نباشه و معماری میکروکنترلری که داره باهاش کار میکنه رو درست و حسابی بررسی نکرده باشه متوجه نمیشه که کامپایلر داره چه افتضاحی به بار میاره. فقط به خاطر اینکه کارش راحت و سریع بشه ترجیح میده با کامپایلر کار کنه. اون زمانی که من شروع کرده بودم AVR کار میکردم هنوز چاپ اول کتاب مهندس کاهه هم نیومده بود، اصلا کسی نمیدونست کاهه کی هست؟ Bascom چی هست؟ AVR چیه دیگه؟ ( غیر از تعداد محدودی از افراد که توی همین سایت هم خوشبختانه چندتاشون هستند و کم و بیش سر میزنند و ما رو از اطللاعاتشون بهرمند و مفتخر میکنند ) مثل حالا نبود که هرکی رسید بپره کتاب مهندس کاهه یا کتاب مهندس ره افروز و .. رو بخره و زود شروع کنه به برنامه نویسی. اصلا اون موقع کتاب فارسی برای AVR نبود. کامپایلری مثل Bascom و حتی در خیلی موراد CodeVision تنها سودی که برای دانشجو های ما داشته این بوده که پروژه هاشون رو راحت با AVR درست کنند و در قبالش ضرری که زده بهشون این بوده که متاسفانه حدود 80 درصدشون رو از درک صحیح و عمیق معماری میکروکنترلری محروم کرده و توی این مورد کاملا بیسواد و بی حوصله بارشون آورده. قصد جسارت به افرادی که با این کامپایلرها کار میکنند ندارم، بعضی هاشون واقعا اطلاعات خیلی خوبی هم دارند و خودم هم از خودشون بدتر هستم اما این حقیقتی هست که متاسفانه وجود داره. این Bascom بنده خدا که میفرمایید به ما خوب ماهی میده اما ماهیگیری یاد نمیده، ما هم که اکثرمون ماشالا آماده خور هستیم و حاضریم همیشه وابسته به ماهیگیر باشیم ولی ماهیگیری رو یاد نگیریم.
                            اگر لحن تندی داشتم و یا جوری بود که بی احترامی شد پیشاپیش معذرت میخوام.
                            از آنجا که گاهی فرصت بازخوانی پست نیست، بابت غلط های املایی و نگارشی احتمالی معذرت میخوام.
                            هیچیک از پاسخ هایی که میدم را کاملا تایید نمیکنم و ممکن هست اشتباه کرده باشم، اگر من به نوشته ام مطمئن هستم شما مشکوک باشید.
                            اگر در حل مشکل من کمک کردید و دکمه تشکر رو نزدم حتما فراموش کردم کوچکترین کمک شما برایم ارزشمند است!
                            اگر به هر طریقی از من ناراحت شدید حتما با یک پیام خصوصی تذکر بدهید تا مشکل رو حل کنیم و رابطه ی صمیمانه، پایدار بماند.
                            شاد و موفق باشید

                            دیدگاه


                              #15
                              پاسخ : اینتراپت خارجی به صورت نرم افزاری

                              جناب study عزیز
                              من بیش خودم تعریفی که از وقفه داشتم این بود
                              "" هر نوع خللی که در برنامه اصلی ایجاد بشه و باعث بشه که میکرو کار اصلی شو رها کنه و اول بره سراغ اون کاره "
                              حالا ممکنه این وقفه سخت افزاری باشه و یا نرم افزاری
                              این کاملا درسته که برای استفاده وقفه خارجی مثلا 0 حتما بایستی پیکر بندی های مربوط به اون پین و وقفه انجام بشه و اگه اون پین تغییر وضعیت داد میکرو به زیر روال وقفه بره
                              ولی این درست نیست که بگیم تنها راه ورود به اون زیر روال فقط تغییر وضعیت پین مربوطه از خارج میکروه
                              اصلا شاید عمدا اون وقفه رو به طور دستی ایجاد کنیم زمانی که وارد زیر روال شدیم وقفه ایجاد شده یعنی در واقع اون خلل رو ایجاد کردیم ممکنه یکمی مصنوعی به نظر بیاد ولی وقفه ایجاد شده
                              بازم می گم تعابیری که شما از وقفه دارید کاملا درسته اما ممکنه تعاریفی که میشه با هم اختلاف نظر داشته باشیم

                              2- لطفا اینقدر هم به bascom
                              شما برای نوشتن یک برنامه که 16 کاراکتر رو روی LCD نمایش بده و یا دو عدد 10 رقمی رو در هم ضرب کنه چند خط برنامه به زبون اسمبلی می نویسید :question: :question: :question: :question:
                              من اون توی bascom حداکثر با 5 خط انجام می دم البته اگه یکسری تنظیمات هم انجام بدی فقط 1 خط برنامه نیازه
                              زبان های سطح بالا ممکنه یکسری از توانایی های اسمبلی رو بگیره و فضای بیشتری رو اشغال کنه ولی اونقدر سرعت کار رو افزایش میده که ارزش کار کردن رو داره
                              در ثانی قیمت میکرو با حافظه بالاتر چقدره !!! ببین زمان هم اونقدر قیمت داره
                              یک سوال

                              شما چه برنامه ای رو با اسمبلی میتونی بنویسی که با بیسکام نشه انجام داد (البته جدا از فرمایش خودتون در مورد برنامه های سرعت بالا )

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


                              حالا به نظر شما زمان ارزشش بیشتره یا اون چند هزار تومنی که بابت حافظه بیشتر باید بدی

                              من از اطلاعات شما خیلی لذت بردم و قصد جبهه گیری هم ندارم









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

                              دیدگاه

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