اطلاعیه

Collapse
No announcement yet.

کمک در مورد ارسال فرمان توسط کلید به میکرو atmega

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

    کمک در مورد ارسال فرمان توسط کلید به میکرو atmega

    دوستان سلام.
    زبان برنامه نویسی من بیسیک avr ، حالا میخوام یاد بگیرم که چطور میشه با کلید به میکرو دستور داد؟
    مثلا فرض کنیم من 5 تا کلید به پورت های portd.0 تا portd.4 وصل کردم و الان میخوام با فشار هر کلید به دستورات اون کلید پرش کنم.
    لطفا کمکم کنید؟ :read:

    #2
    پاسخ : کمک در مورد ارسال فرمان توسط کلید به میکرو atmega

    کافیه pind از 0 تا 4 رو بخونی رو هرکدوم براساس فشرده شدن کلید صفر یا یک شد، با استفاده از If پشت سرهم هرکدوم از حالت ها اتفاق افتاد، دستور مورد نظر شما رو اجرا کنه
    ... و (بدانيد) گرفتن تصميمهاى محكم (براى رسيدن به اهداف بزرگ) با خوش گذرانى و سفرهآ‌هاى رنگين سازگار نيست و چه بسيار كه خواب شبانه تصميمهاى محكم روز را از ميان برده و تاريكيآ‌ها، خاطره همتآ‌هاى بلند را از يادها محو كرده است. (نهجآ‌البلاغه، خطبه211)

    امام علي (ع):کسي که به وقت ياري رهبرش در خواب باشد، با لگد دشمنش بيدار مي شود (غررالحکم،ص 422)

    دیدگاه


      #3
      پاسخ : کمک در مورد ارسال فرمان توسط کلید به میکرو atmega

      راه راحتتر اینه که از دستور debounce استفاده کنید توضیخاتش توی help بسکام و همینطور کتاب کاهه هست
      من نمىآ‌توانم فرضیه «بىآ‌اخلاقى انسان» را بپذیرم، و من اخلاق را منحصرا امرى انسانى و متعلق به انسان مىآ‌دانم که هیچ نوع قدرت مافوق انسانى در پشت آن وجود ندارد
      آلبرت اینشتین
      منبع: http://fa.wikiquote.org

      دیدگاه


        #4
        پاسخ : کمک در مورد ارسال فرمان توسط کلید به میکرو atmega

        از دوستای عزیزم بابت راهنمایی هاشون ممنونم.
        با دستور if هر کاری کردم نتونستم به نتیجه برسم اما با دستور debounce پاسخ سوالم رو گرفتم.
        حالا یه سوال دیگه برام پیش اومده که امیدوارم به این سوالم هم جواب بدید.
        سوالم اینه: اگه بخوام چند پورت رو (مثلا PortD.5 , PortD.2 , PortD.0 ) با هم چک کنم و در آخر در صورت True بودن همشون به یه برچسپ برش کنم باید چیکار کنم؟
        خودم از این روش استفاده کردم اما جواب نداد و در هر حالت(چه True بودن شرط و چه False بودن شرط) دستورات داخل شرط رو اجرا میکرد:
        if PortD.0=1 And PortD.2=1 And PortD.5=1 then
        دستورات
        end if

        پیشاپیش از لطف تون ممنونم، لطفا راهنماییم کنید؟

        دیدگاه


          #5
          پاسخ : کمک در مورد ارسال فرمان توسط کلید به میکرو atmega

          اولین کاری که میکنید باید مقاومت پول پ یا پول دون بزارید،یا پول پ داخلی رو فعال کنید،که اینجا شما چون قراره با یک شدن پورت کاری انجام بشه شما باید مقاومت پول دون بزارین و به صورت داخلی نمیشه فعال کرد
          بعد ازین که این کارو کردین،میمونه بحث بعدی که نحوه گانفیگ ورودی یا خروجیه،تو بسکام وقتی میخوای ورودی بگیرین مثه کلید باید از دستور pin استفاده کنین نه port
          کد:
          Config pind.1=input
          چون احتمال وجود bounce خیلی زیاده،وقتی از دستور if استفاده میکنید حتما باید به شکل زیر باشه
          کد:
          if pind.1=1 then
          waitms 100
           if pind.1=1 then
          کاری که قراره انجام بشه
          end if
          end if
          اون waitms هم میتونین تغییر بدین که طرف که کلیدو فشار میده چقدر نیازه دستش رو کلید باشه
          چون یه بار زده شدن کلیدو 1000 بار میاد میبینه و رد میشه ازش،واسه اینکه منظورمو متوجه بشید یه کانتر بنویسین که بازدن کلید یه عددو افزایش بده و روی LCD نمایش بده،با تمام سرعت ممکن اگر کلیدو فشار بدی و دستتو سریع برداری میبی به جای افزایش یک عدد،1000 بار عددو افزایش داده
          اگر اینکارو بدون مقاومت پول دون انجام بدین اصن میبینین بدون فشردن کلید خودش شانسی عدود افزایش میده
          بحث بعدی میمونه زدن چند تا کلید با هم،
          برای اینکار راه های زیادی با توجه به سبک برنامه نویسی هر کسی وجود داره
          میتونین متغیر تعریف کنید به شکل زیر
          کد:
           Dim kelid_1 as bit
           Dim kelid_2 as bit
           Dim kelid_3 as bit
          
          kelid_1=0
          kelid_2=0
          kelid_3=0
          
          do 
          
          if pind.1=1 then
          waitms 100
           if pind.1=1 then
          kelid_1=1
          else 
          kelid_1=0
          end if
          end if
          
          if pind.2=1 then
          waitms 100
           if pind.2=1 then
          kelid_2=1
          else 
          kelid_2=0
          end if
          end if
          
          if pind.3=1 then
          waitms 100
           if pind.3=1 then
          kelid_3=1
          else 
          kelid_3=0
          end if
          end if
          
          if kelid_1=1 and kelid_2=1 and kelid_3=1 then
          
          کاری که باید انجام بشه
          
          end if
          
          
          loop
          این یکا از راههاست و فکر میکنم ساده و سیلیس باشه،اینجوری میتونی حالت های دیگه رو هم دخیل کنی که اگر فلان پایه صفر و بقیه یک بود مثلا یکاری انجام بده
          بسته بکارتون داره،عیب این نوع Debounce اینه که وقتی کلید زده بشه یه تاخیری تو متن برنامه بوجود میاد،که در سطح بالاتر میشه با تایمرها کار کرد،ولی برای کاری معمولی خیلی خوبه،یه راهم اینه با خازن و مقاومت Debounce سخت افزاری درست کنید،ولی با نرم افزاری دست واسه تنظیم زمان بازه
          موفق باشید
          انحصار طلبي علمي در دنياي امروز جايگاهي ندارد،بياييد تا دانسته هاي خود را هرچند اندک؛با ديگران به اشتراک بگذاريم...
          فرهنگ و تمدن بي همتاي ايرانيان به سبب حمله ي وحشيانه مغولان نابود شد،امروز نوبت من و توست که با انتشار دانسته هاي خود ايران را به جايگاه بي همتاي گذشته باز گردانيم.

          پيامبر اکرم(ص)فرمودند بهترين مردم کساني هستند که خيرشان به ديگران برسد.

          دیدگاه


            #6
            پاسخ : کمک در مورد ارسال فرمان توسط کلید به میکرو atmega

            دوست خوبم، آقای شریف شریف زاد، از لطف تون بی نهایت ممنونم. :applause:
            من فعلا رو آموزش شما کار میکنم اگه مشکلی بود بازم مزاحم تون میشم. :read:

            دیدگاه


              #7
              پاسخ : کمک در مورد ارسال فرمان توسط کلید به میکرو atmega

              در خدمتم
              انحصار طلبي علمي در دنياي امروز جايگاهي ندارد،بياييد تا دانسته هاي خود را هرچند اندک؛با ديگران به اشتراک بگذاريم...
              فرهنگ و تمدن بي همتاي ايرانيان به سبب حمله ي وحشيانه مغولان نابود شد،امروز نوبت من و توست که با انتشار دانسته هاي خود ايران را به جايگاه بي همتاي گذشته باز گردانيم.

              پيامبر اکرم(ص)فرمودند بهترين مردم کساني هستند که خيرشان به ديگران برسد.

              دیدگاه


                #8
                پاسخ : کمک در مورد ارسال فرمان توسط کلید به میکرو atmega

                سلام خدمت دوستان عزیز
                من یه راهنمایی از شما میخواستم
                برنامه ای رو توی بسکام دارم مینویسم که یک کانتره و موجهای ورودی به میکرو رو میشماره،حالا میخوام وقتی به یک مقدار معینی رسید آلارم بده و این مقدار هم توسط کاربر با فشردن کلید مشخص بشه،یه چیزی مثل تنظیم ساعت که با چهارتا کلید چپ و راست روی هرکدوم از رقم ها میره و کلید بالا و پایین که مقدار رو کم یا زیاد میکنه مثلا عدد 10000 رو تنظیم میکنه،
                حالا مشکلم اینه که نمیدونم چطوری این کلیدها رو برای میکرو تعریف کنم و برنامه اون رو چطور بنویسم و طریقه اتصال کلیدها به میکرو چطوریه؟
                ممنون از لطفتون
                ببخشید سوالم ابتدایی بود :redface:

                دیدگاه


                  #9
                  پاسخ : کمک در مورد ارسال فرمان توسط کلید به میکرو atmega

                  نوشته اصلی توسط reza18b
                  سلام خدمت دوستان عزیز
                  من یه راهنمایی از شما میخواستم
                  برنامه ای رو توی بسکام دارم مینویسم که یک کانتره و موجهای ورودی به میکرو رو میشماره،حالا میخوام وقتی به یک مقدار معینی رسید آلارم بده و این مقدار هم توسط کاربر با فشردن کلید مشخص بشه،یه چیزی مثل تنظیم ساعت که با چهارتا کلید چپ و راست روی هرکدوم از رقم ها میره و کلید بالا و پایین که مقدار رو کم یا زیاد میکنه مثلا عدد 10000 رو تنظیم میکنه،
                  حالا مشکلم اینه که نمیدونم چطوری این کلیدها رو برای میکرو تعریف کنم و برنامه اون رو چطور بنویسم و طریقه اتصال کلیدها به میکرو چطوریه؟
                  ممنون از لطفتون
                  ببخشید سوالم ابتدایی بود :redface:
                  سلام
                  کلید باید پول پ یا پول دان بشه،اگر پول پ شد تو برنامه باید بنویسی اگر اون پایه صفر شد فلان کارو بکن،اگر پول دان بشه باید بگی وقتی اون پایه میکرو یک شد فلان کارو بکن،که اتصالشم فرق داره و پایه دیگه ی کلید وصل میشه به VCC،این عکس پایه میکرو رو پول پ کرده

                  یه قابلیتی که AVR داره اینه که پول پ داخلی داره،و نیاز به اون مقاومت نیست ولی باید تو برنامه بگی فعال بشه
                  یه نمونه کد ساده مینویسم از همین استفاده کن:
                  فرض کردم پایه 3 پورت D به کلید وصله
                  کد:
                  key1 Alias PIND.3 'bejaye inke too barname esme payeye micro ro biari migi key1
                  Config key1=input  'vase voroodi bayad az PIN estefade **** na port,inja goftim in paye voroodie
                  PortD.3=1 ' inja goftim moghavemate pull up dakheli faeal beshe
                  اینا گانفیگ اولیه بود
                  حالا مثلا میخوای بگی این کلید زده شد counter صفر بشه:
                  کد:
                  if key1=0 then
                  waitms 100
                  if key1=0 then
                  TCNT0=0
                  end if 
                  end if
                  این که دوبار اینو نوشتیم واسه اینه که یه تاخیر بوجود بیاد تا وقتی کلید حداقل 100 میلی ثانیه در حال فشار نباشه اون دستور انجام نشه،هم واسه جلوگیری از نویزه،هم اینکه اگر تاخیر نزاری با یه بار فشردن کلید 1000 بار این دستور اجرا میشه
                  خیلی وقته با بسکام کار نکردم ممکنه نگارش دستور اشتباه داشته باشه ولی کلیات همینه
                  با یه led تست کن
                  انحصار طلبي علمي در دنياي امروز جايگاهي ندارد،بياييد تا دانسته هاي خود را هرچند اندک؛با ديگران به اشتراک بگذاريم...
                  فرهنگ و تمدن بي همتاي ايرانيان به سبب حمله ي وحشيانه مغولان نابود شد،امروز نوبت من و توست که با انتشار دانسته هاي خود ايران را به جايگاه بي همتاي گذشته باز گردانيم.

                  پيامبر اکرم(ص)فرمودند بهترين مردم کساني هستند که خيرشان به ديگران برسد.

                  دیدگاه


                    #10
                    پاسخ : کمک در مورد ارسال فرمان توسط کلید به میکرو atmega

                    سلام خدمت شما دوست عزیز و پاسخ کامل و شفافتون،ازتون خیلی ممنونم،

                    دیدگاه


                      #11
                      پاسخ : کمک در مورد ارسال فرمان توسط کلید به میکرو atmega

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

                      دیدگاه


                        #12
                        پاسخ : کمک در مورد ارسال فرمان توسط کلید به میکرو atmega

                        کاملتر پروژه شما در لینک زیر هست
                        http://www.eca.ir/forum2/index.php?topic=107076.0
                        که من هم درگیر همین مشکل هستم البته بخش نرم افزار و شبیه سازی را با کمک دوستان و مهندسین عزیز ECA کامل کردیم
                        فقط یک مشکل نرم افزاری و چند مشکل عملی مانده است

                        دیدگاه


                          #13
                          پاسخ : کمک در مورد ارسال فرمان توسط کلید به میکرو atmega

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

                          دیدگاه


                            #14
                            پاسخ : کمک در مورد ارسال فرمان توسط کلید به میکرو atmega

                            میدونم منظورتون چیه،نمیدونم چجوری بیان کنم،ببین ازین سر در میاری،برای 2 رقم مثال میزنم:
                            کد:
                            Dim yekan_s as string*3
                            Dim dahgan_s as string*3
                            Dim yekan as byte
                            Dim dahgan as byte
                            dim ragham as byte
                            ragham=0
                            do
                            if key_set=1 then
                            waitms 100
                            if key_set=1 then
                            
                            incr ragham
                            
                            if ragham=2 then'>>>>>>>>>>>>برای اینکه دو رقم داریم 
                            ragham=0
                            end if
                            
                            end if
                            end if
                            '--------------------------------------تا این قسمت فقط میخواستیم بگیم کدوم رقم منظورمونه
                            if ragham=1 and key_afzayesh=1 then'<<<<<<<افزایش دهگان
                            incr dahgan
                            end if
                            
                            if ragham=1 and key_kahesh=1 then'<<<<<<<کاهش دهگان
                            decr dahgan
                            end if
                            
                            if ragham=0 and key_afzayesh=1 then'<<<<<<<افزایش یکان
                            incr dahgan
                            end if
                            
                            if ragham=0 and key_kahesh=1 then'<<<<<<<کاهش یکان
                            decr dahgan
                            end if
                            
                            
                            loop
                            در انتها هم این دو رقم رو بهم میجسبونی میشه یه عدد دو رقمی
                            متاسفانه زیاد نمیتونم وقت بزارم،امیدوارم همین کمک کرده باشه
                            انحصار طلبي علمي در دنياي امروز جايگاهي ندارد،بياييد تا دانسته هاي خود را هرچند اندک؛با ديگران به اشتراک بگذاريم...
                            فرهنگ و تمدن بي همتاي ايرانيان به سبب حمله ي وحشيانه مغولان نابود شد،امروز نوبت من و توست که با انتشار دانسته هاي خود ايران را به جايگاه بي همتاي گذشته باز گردانيم.

                            پيامبر اکرم(ص)فرمودند بهترين مردم کساني هستند که خيرشان به ديگران برسد.

                            دیدگاه


                              #15
                              پاسخ : کمک در مورد ارسال فرمان توسط کلید به میکرو atmega

                              خیلی خیلی ممنون بابت پاسختون
                              فقط یه سوال کوچیک،اگه بخوام همزمانی که این اعداد عوض میشن اونا رو روی اا سی دی ببینم که بدونم یکان رو چقدر و دهگان رو چقدر اضافه کردم دستور lcd dahgan;yekan رو باید بعد از حلقه ای که شما نوشتین بذارم یا قبلش؟آخه داخل حلقه که میذارم. مدام میاد و میره و هی صفر میشه
                              با تشکر

                              دیدگاه

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