اطلاعیه

Collapse
No announcement yet.

خواندن مجموعه کلید های led دار با حداقل پین میکرو

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

    #16
    پاسخ : خواندن مجموعه کلید های led دار با حداقل پین میکرو

    ببینید از همه روش ها میشه استفاده کرد اما هر روش و هر نوع برنامه برای یکجا مناسبه که باید به برنامه نویسی مسلط باشید و تمرین کنید...
    در رابطه با سوالتون هم من دقیقا متوجه نشدم شما چه کاری میخواهید انجام بدید..اگر برای همون شماتیکی که در ابتدا اوردید بطوری که با فشردن هر کلید led متناظر با اون روشن بشه بله این روش خوبه...و به گفته دوستمون استفاده از دیود لازم نیست.استفاده از خازن هم ضرورتی نداره اما اگر باشه میتونه نویزهای احتمالی رو بگیره...اما اگه منظورتون اینه که یک صفحه کلید درست کنید و با فشاردادن هر کلید عدد متناظر با اون رو توسط میکرو بخونید باید از روش دیگه ای استفاده کنید...که معمولا از روش ماتریسی استفاده میشه که خوندن این مطلب رو به عهده خودتون میزارم..روش کلی ثابت هست ولی نوع برنامه نویسی برای کاری که میخواید انجام بدید فرق میکنه..
    دوستان چنانچه براتون مقدوره و اگر فرصت دارید یه نمونه برنامه برای خواندن و فرمان دادن به یک سطر کلید و LED رو هم قرار بدید
    ببینید دوست عزیز تمام این روش ها در کتابها و منابع امورشی avr که کم هم نیستند گفته شده...فکر میکنم شما تازه وارد مبحث avr شده اید..بنده هرگز از جواب دادن به شما خسته نمیشم که خوشحال هم میشم...ولی این مباحث در منابع اموزشی به وفور دربارش بحث شده که براحتی براتون قابل فهمه حتی از نوشته های من هم گیراتر..و هروقت مطلبی برای شما قابل فهم نبود در انجمن مطرح بفرماید تا راهنمایی بشید..
    بهتون پیشنهاد میکنم این مطالب رو دنبال کنید:
    این یکی از سری فیلم های اموزش avr جناب استاد کی نژاد هست که در رابطه با دلیل استفاده از خازن برای کلید و پدیده دیبانسینگ صحبت شده :
    http://www.aparat.com/v/52aX3
    در کتابهای خود اموز avr مثلا کتاب مهندس جابر الوندی نمونه این کد ها گفته شده...
    در اخر هم بگم که بنا به ضربالمثل ماهیگیری یاددادن به زماهی دادن بنده شخصا کد قرار نمیدم تا خودتون دنبالش باشید...

    اضافه شده در تاریخ :
    راستی پست قبلی ر ندیده بودم. شماتیک اون دوستمون یک روش اصولی هست .اما یه سوالی از ایشون داشتم.دلیل استفاده از ترانزیستور متصل به k-en چیست و یک کلید فشرده شده چگونه خوانده میشود؟
    تشکر

    دیدگاه


      #17
      پاسخ : خواندن مجموعه کلید های led دار با حداقل پین میکرو

      نوشته اصلی توسط amin tal
      راستی پست قبلی ر ندیده بودم. شماتیک اون دوستمون یک روش اصولی هست .اما یه سوالی از ایشون داشتم.دلیل استفاده از ترانزیستور متصل به k-en چیست و یک کلید فشرده شده چگونه خوانده میشود؟
      تشکر
      بله، خواهش میکنم.
      با توجه به اینکه واکنش انسان در فشردن کلید کند هست(گمون نمیکنم بشه بیشتر از ۵ بار فشرد - برای همین فرکانس نمونه برداری رو دوبرابر گذاشتم)
      و از طرفی نمی توان بیشتر از چند میلی ثانیه چراغ ها را در زمان شیفت خاموش نگه داشت(در صورت روشن بودن- چون بصورت منقطع دیده خواهد شد - البته زمان یک میلی ثانیه ای برای خواندن کلید ها بسیار کوتاه است و مشکلی را ایجاد نمیکند) پس اگر K_EN را حذف کنیم و کاربر کلیدی را فشار دهد آنگاه چراغ متصل به آن کلید هرگز روشن نخواهد شد(نوعی اتصال کوتاه که به واسطه مقاومت کاملا ایمن است و هیچ صدمه ای به مدار وارد نخواهد کرد)

      مورد دیگر مربوط به خازن است. حذف خازن یک خطای منطقی است. هرچند حذف خازن هیچ مشکلی ایجاد نمیکند ولی باعث میشود مقدار خوانده شده برای کلیدها نامعتبر باشد(نویز - حالت گذار).

      خواندن مقدار کلید ها هم به این صورت است که ترانزیستور چراغ ها را غیر فعال میکنیم و ترانزیستور کلید ها را فعال میکنیم
      آنگاه گذرگاه را خروجی کرده و کل گذرگاه را به صورت یکجا فعال میکنیم(روی گذرگاه یک مینویسیم)
      در این هنگام روی همه ی خازن ها بار الکتریکی ذخیره میشود. و اگر کلیدی فشرده شده باشد بار الکتریکی خازن تخلیه می شود.
      اینک گذرگاه را ورودی میکنیم و مقدار کل گذرگاه را یکجا می خوانیم.

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

      این روش بسیار بهتر است و سرعت بسار زیادی دارد (درواقع یک زمان کوتاه و ثابت برای هر تعداد دلخواه کلید) در حالی که صرف زمان برای تک تک کلید ها و چراغ ها بصورت جداگانه زمان زیادی را میگیرد ( و چراغ ها روشنایی لازم را نخواهند داشت) مخصوصا هرچه تعداد چراغ ها زیاد شود.
      If the wind will not serve, take to the oars

      دیدگاه


        #18
        پاسخ : خواندن مجموعه کلید های led دار با حداقل پین میکرو

        اهان اینطوریه... :-q پس وجود خازن در اینجا الزای هستش..
        ببیینید الان من دو روش دیگه رو هم میگم..
        در روش اول میایم یک تاخیر ایجاد میکنیم و بعد برای هر کلید اون رو یک و خروجی میکنیم و سپس پین ورودی که در اینجا میتونه k-en با شه رو میخونیم...و بزای سه کلید 6 خط برنامه داریم(بدون احتساب شرط if )..حالا با روش شما هم 6 خط برنامه داریم..حالا چطور؟
        ببینید ما وقتی در کامپایلر کد ویژن یک پورت رو بصورت یکجا خروجی میکنیم که البته روش صحیحی نیست درواقع همه پین های اون پورت با هم خروجی نمیشن بلکه از پین باارزشتر یعنی 7 شروع به یک شدن میکنه تا میرسه به پین 0...
        البته روش گفته شده (اینکه هربار یک پین رو یک و پین دیگر رو بخونیم و همین کار رو برای هر کلید تکرار کنیم )بخاطر وجود شرط if در هربار خوندن وقت بیشتری تلف می کنه.ضمن این که برنامه نویسیش هم طولانی تر هست ..
        اما روش دوم و اصولی تر اینه که یک پین مثلا k-en رو ترانزیستورشو برداریم اونو خروجی و 1 بکنیم.یک تاخیر ایجاد کنیم .بعد پین های 1 و 2 و 3 رو ورودی کنیم و بخونیم.تعداد کد کمتری هم میخواد ..به همین راحتی..
        راستی فک میکنم در برنامه ای که نوشتید تاخیر بهتره قبل از خوندن پین ها ایجاد بشه..درسته

        دیدگاه


          #19
          پاسخ : خواندن مجموعه کلید های led دار با حداقل پین میکرو

          نوشته اصلی توسط amin tal
          اهان اینطوریه... :-q پس وجود خازن در اینجا الزای هستش..
          ببیینید الان من دو روش دیگه رو هم میگم..
          در روش اول میایم یک تاخیر ایجاد میکنیم و بعد برای هر کلید اون رو یک و خروجی میکنیم و سپس پین ورودی که در اینجا میتونه k-en با شه رو میخونیم...و بزای سه کلید 6 خط برنامه داریم(بدون احتساب شرط if )..حالا با روش شما هم 6 خط برنامه داریم..حالا چطور؟
          ببینید ما وقتی در کامپایلر کد ویژن یک پورت رو بصورت یکجا خروجی میکنیم که البته روش صحیحی نیست درواقع همه پین های اون پورت با هم خروجی نمیشن بلکه از پین باارزشتر یعنی 7 شروع به یک شدن میکنه تا میرسه به پین 0...
          البته روش گفته شده (اینکه هربار یک پین رو یک و پین دیگر رو بخونیم و همین کار رو برای هر کلید تکرار کنیم )بخاطر وجود شرط if در هربار خوندن وقت بیشتری تلف می کنه.ضمن این که برنامه نویسیش هم طولانی تر هست ..
          اما روش دوم و اصولی تر اینه که یک پین مثلا k-en رو ترانزیستورشو برداریم اونو خروجی و 1 بکنیم.یک تاخیر ایجاد کنیم .بعد پین های 1 و 2 و 3 رو ورودی کنیم و بخونیم.تعداد کد کمتری هم میخواد ..به همین راحتی..
          راستی فک میکنم در برنامه ای که نوشتید تاخیر بهتره قبل از خوندن پین ها ایجاد بشه..درسته
          :NO:
          روش اول رو من نمی پسندم. و هیچگاه آماده به پیاده سازی اون نخواهم بود.
          چنانچه تعداد پایه ها جوابگوی تعداد چراغ ها و کلید ها نباشد. می توان روش های افزایش پایه ها را به روش زیر به کار برد.

          روش دوم :applause:
          این روش بهتر از روش پیشنهادی من هست.
          در این روش می توان خازن ها را بدون هیچ تاثیر نامطلوبی حذف کرد (مدار ساده تر).
          بهتر است ترانزیستور کلید ها را حذف نکنیم. و جهت ترانزیستور را برعکس کنیم (یعنی ترانزیستور کلید ها را تغذیه کند - این کار یک برتری استراتژیک دارد که به ما اجازه می دهد بجای چراغ ها المان های دیگری را هم راه اندازی کنیم ولی برای راه اندازی چراغ ها ایرادی ندارد)
          برنامه نویسی این روش هم ساده ترین روش است و منطق ساده تری دارد. و سرعت اجرای بالاتری دارد.
          این روش بهینه ترین سخت افزار و نرم افزار را دارد. (دست خودم نیست - علاقه ی عجیبی به بهینگی و سرعت اجرای الگوریتم دارم) :biggrin:
          دوستانی که قصد ساخت دارند این روش را پیاده سازی کنند. :nice:
          تا می تونید سخت افزار رو ساده تر طراحی کنید و پیچیدگی ها رو گردن نرم افزار بندازین.
          If the wind will not serve, take to the oars

          دیدگاه


            #20
            پاسخ : خواندن مجموعه کلید های led دار با حداقل پین میکرو

            نوشته اصلی توسط ASHIT AXAR
            :NO:
            روش اول رو من نمی پسندم. و هیچگاه آماده به پیاده سازی اون نخواهم بود.
            چنانچه تعداد پایه ها جوابگوی تعداد چراغ ها و کلید ها نباشد. می توان روش های افزایش پایه ها را به روش زیر به کار برد.

            روش دوم :applause:
            این روش بهتر از روش پیشنهادی من هست.
            در این روش می توان خازن ها را بدون هیچ تاثیر نامطلوبی حذف کرد (مدار ساده تر).
            بهتر است ترانزیستور کلید ها را حذف نکنیم. و جهت ترانزیستور را برعکس کنیم (یعنی ترانزیستور کلید ها را تغذیه کند - این کار یک برتری استراتژیک دارد که به ما اجازه می دهد بجای چراغ ها المان های دیگری را هم راه اندازی کنیم ولی برای راه اندازی چراغ ها ایرادی ندارد)
            برنامه نویسی این روش هم ساده ترین روش است و منطق ساده تری دارد. و سرعت اجرای بالاتری دارد.
            این روش بهینه ترین سخت افزار و نرم افزار را دارد. (دست خودم نیست - علاقه ی عجیبی به بهینگی و سرعت اجرای الگوریتم دارم) :biggrin:
            دوستانی که قصد ساخت دارند این روش را پیاده سازی کنند. :nice:
            تا می تونید سخت افزار رو ساده تر طراحی کنید و پیچیدگی ها رو گردن نرم افزار بندازین.
            بابا اینقدر سخت نگیر... :biggrin:
            بنده بردی رو ساختم (البته طراحش من نیستم) که با 8 کلید و صفحه نمایش و منویی کامل که از منو تلوزیون ما هم کامل تره...حالا اینها هیچ محاسبات خیلی پیچیده ای داره که در زمانهای کوتاهی باید اجرا بشه و خروجیش رو تحویل بده..با فرکانس 8 مگا هرتز و میکرو avr...حالا جالبه بدونید طبق گفته ساندش فقط 5 تا 7 درصد از کل حافظش صرف پردازش برای کلید ها و الارم و السیدیش میشه..
            در کل اینقدر حساس نشو :biggrin:
            اینو هم بگم که همه این روش ها در جای خاص خودش قابل استفادست و یک برنامه ریز خوب باید همه اونا رو تمرین کنه تا از هر کدومش در جای خودش بهره ببره...
            حالا مثال میزنیم...
            روش خودتون رو بینید...پیاده کردن این روش برای تعداد کلید های بالاتر از لحاظ سخت افزاری سخته..اما تعجب میکنی اگه بدونی که از روشی که من گفتم هم سریعتر هستش...حالا چطوری؟؟؟
            کافیه یه تغییر کوچک تو نرم افزار ایجاد کنی..اون هم برداشتن تاخیر اول هستش...حالا پس پدیده debuncing یا همون نویز کلید چی میشه؟اینو میزارم به عهده خودتون....
            پس در واقع شما میتونید گرفتن نویز رو به بر عهده سخت افزار بزارید تا نرم افزار سریعتر کار کنه...

            دیدگاه


              #21
              پاسخ : خواندن مجموعه کلید های led دار با حداقل پین میکرو



              از هر دو عزیز سپاسگزارم برای نکاتی که مطرح فرمودید ، برنامه رو برای روش اول که عکسشو گذاشتم نوشتم و تو شبیه سازی جواب گرفتم ؛ منتظرم pcb آماده بشه و در عمل تست بکنم و نتیجه رو همینجا میذارم

              البته به مقامت 10 کیلو پورت میکرو رو پول پ کردم

              روش هایی که معرفی کردید رو هم برنامه اش رو مینویسم و تست می کنم ببینم کدومش بهتر جواب میده

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

              دیدگاه


                #22
                پاسخ : خواندن مجموعه کلید های led دار با حداقل پین میکرو

                نوشته اصلی توسط ASHIT AXAR


                بله، این روش بسیار ساده تره
                در این روش مقدار کلید ها یا چراغ ها هرکدام یکجا خوانده یا نوشته میشود.
                فرض کنیم نخست باید کلیدها را بخوانیم.
                K_EN برای فعالسازی کلید ها (متصل به یکی از پایه های میکرو)
                L_EN برای فعالسازی چراغ ها (متصل به یکی از پایه های میکرو)
                <گذرگاه> پورت مورد استفاده

                تابع خواندن کلیدها:
                L_EN غیر فعال شود
                K_EN فعال شود
                جهت گذرگاه خروجی شود
                گذرگاه یک شود(یکجا)
                تاخیر زمانی کوتاه
                جهت گذرگاه ورودی شود
                خواندن مقدار گذرگاه(یکجا)
                [تاخیر زمانی بلند سویچینگ (برای نمونه یک میلی ثانیه)]

                تابع نوشتن چراغ ها:
                K_EN غیرفعال شود
                L_EN فعال شود
                گذرگاه خروجی شود
                نوشتن مقدار چراغ ها در گذرگاه(یکجا)
                [تاخیر زمانی بلند سویچینگ (برای نمونه یک میلی ثانیه)]

                میبینید که در این روش هر تابع با توجه به مقدار تاخیر زمانی سویچینگ می تواند ۵۰۰ بار در ثانیه اجرا شود
                البته لازم نیست تابع خواندن کلید ها با این سرعت اجرا شود و برای مثال خواندن ۱۰ بار در ثانیه کافی است
                متشکرم بابت معرفی این روش جالب ؛ اولش وقتی فرمودید ترانزیستور فکر کردم برای درایو جریان میذارید ؛ اینطوری که من متوجه شدم برای قطع و وصل همزمان هست درسته ؟

                دیدگاه


                  #23
                  پاسخ : خواندن مجموعه کلید های led دار با حداقل پین میکرو

                  نوشته اصلی توسط amin tal
                  ببینید از همه روش ها میشه استفاده کرد اما هر روش و هر نوع برنامه برای یکجا مناسبه که باید به برنامه نویسی مسلط باشید و تمرین کنید...
                  در رابطه با سوالتون هم من دقیقا متوجه نشدم شما چه کاری میخواهید انجام بدید..اگر برای همون شماتیکی که در ابتدا اوردید بطوری که با فشردن هر کلید led متناظر با اون روشن بشه بله این روش خوبه...و به گفته دوستمون استفاده از دیود لازم نیست.استفاده از خازن هم ضرورتی نداره اما اگر باشه میتونه نویزهای احتمالی رو بگیره...اما اگه منظورتون اینه که یک صفحه کلید درست کنید و با فشاردادن هر کلید عدد متناظر با اون رو توسط میکرو بخونید باید از روش دیگه ای استفاده کنید...که معمولا از روش ماتریسی استفاده میشه که خوندن این مطلب رو به عهده خودتون میزارم..روش کلی ثابت هست ولی نوع برنامه نویسی برای کاری که میخواید انجام بدید فرق میکنه..ببینید دوست عزیز تمام این روش ها در کتابها و منابع امورشی avr که کم هم نیستند گفته شده...فکر میکنم شما تازه وارد مبحث avr شده اید..بنده هرگز از جواب دادن به شما خسته نمیشم که خوشحال هم میشم...ولی این مباحث در منابع اموزشی به وفور دربارش بحث شده که براحتی براتون قابل فهمه حتی از نوشته های من هم گیراتر..و هروقت مطلبی برای شما قابل فهم نبود در انجمن مطرح بفرماید تا راهنمایی بشید..
                  بهتون پیشنهاد میکنم این مطالب رو دنبال کنید:
                  این یکی از سری فیلم های اموزش avr جناب استاد کی نژاد هست که در رابطه با دلیل استفاده از خازن برای کلید و پدیده دیبانسینگ صحبت شده :
                  http://www.aparat.com/v/52aX3
                  در کتابهای خود اموز avr مثلا کتاب مهندس جابر الوندی نمونه این کد ها گفته شده...
                  در اخر هم بگم که بنا به ضربالمثل ماهیگیری یاددادن به زماهی دادن بنده شخصا کد قرار نمیدم تا خودتون دنبالش باشید...

                  اضافه شده در تاریخ :
                  راستی پست قبلی ر ندیده بودم. شماتیک اون دوستمون یک روش اصولی هست .اما یه سوالی از ایشون داشتم.دلیل استفاده از ترانزیستور متصل به k-en چیست و یک کلید فشرده شده چگونه خوانده میشود؟
                  تشکر
                  ممنونم دوست عزیز ,

                  منظور من این نبود که برای من مثال رو کامل حل کنید

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

                  برنامه نویسی و طراحی مدار دنیای بزرگیه و روش های بسیار متفاوتی داره ؛ برای همین مثال تا الان چندین روش مطرح شده

                  با این حال از وقتی که میذارید سپاسگزارم دوست عزیز

                  دیدگاه


                    #24
                    پاسخ : خواندن مجموعه کلید های led دار با حداقل پین میکرو

                    نوشته اصلی توسط amin tal
                    بابا اینقدر سخت نگیر... :biggrin:
                    بنده بردی رو ساختم (البته طراحش من نیستم) که با 8 کلید و صفحه نمایش و منویی کامل که از منو تلوزیون ما هم کامل تره...حالا اینها هیچ محاسبات خیلی پیچیده ای داره که در زمانهای کوتاهی باید اجرا بشه و خروجیش رو تحویل بده..با فرکانس 8 مگا هرتز و میکرو avr...حالا جالبه بدونید طبق گفته ساندش فقط 5 تا 7 درصد از کل حافظش صرف پردازش برای کلید ها و الارم و السیدیش میشه..
                    در کل اینقدر حساس نشو :biggrin:
                    اینو هم بگم که همه این روش ها در جای خاص خودش قابل استفادست و یک برنامه ریز خوب باید همه اونا رو تمرین کنه تا از هر کدومش در جای خودش بهره ببره...
                    حالا مثال میزنیم...
                    روش خودتون رو بینید...پیاده کردن این روش برای تعداد کلید های بالاتر از لحاظ سخت افزاری سخته..اما تعجب میکنی اگه بدونی که از روشی که من گفتم هم سریعتر هستش...حالا چطوری؟؟؟
                    کافیه یه تغییر کوچک تو نرم افزار ایجاد کنی..اون هم برداشتن تاخیر اول هستش...حالا پس پدیده debuncing یا همون نویز کلید چی میشه؟اینو میزارم به عهده خودتون....
                    پس در واقع شما میتونید گرفتن نویز رو به بر عهده سخت افزار بزارید تا نرم افزار سریعتر کار کنه...
                    تا هنگامی که الگوریتم بهینه تری داریم،آ‌ این خردمندانه نیست که روش با کارایی پایین تر را بکار ببریم.
                    من بتازگی یک CNC Plotter ساختم(با همین شاسی DVD رایتر ها) در این دستگاه برای پردازنده من یک میکرو ATMega8 گذاشتم
                    بدون استفاده از کریستال بیرونی و با اسیلاتور ۸ مگاهرتز درونی این پردازنده به اندازه یک درصد هم بار پردازشی نداشت !
                    الان می خوام یک نمونه بهتر با اندازه کمی بزرگتر (فرز سی ان سی) درست کنم که مدار هام رو با اون بزنم.
                    گفته شما درسته ولی حتی اگر بیش از نیاز ما باشد. با الگوریتم کاراتر می توان مصرف را کاهش داد.
                    :agree:
                    If the wind will not serve, take to the oars

                    دیدگاه

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