اطلاعیه

Collapse
No announcement yet.

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

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

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

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

    در یکی از برد های الکترونیکی یک دستگاه که با Atmega 64 هست به مشکلی بر خوردم . تعداد هشت عدد کلید پوش باتن و هشت عدد led تنها با 10 پین میکرو خوانده می شود .

    طرز کارش به این صورته که هر کلید متناظر با خودش یه led داره و به محض تحریک led اون کلید روشن میشه . مدارش به صورت زیره

    میخواستم ببینم چطوری داره همزمان هم کلید هارو میخونه و هم به led فرمان میده ؟


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

    اول portd.1 رو 0 میکنه تا کلید ها آماده خوندن بشن مثلا کلیدی که به pind.2 وصل هست فشار داده میشه و pind.0=0 میشه حالا واسه این که led روبروش روشن بشه ports.0 رو 0 میکنه تا این دفعه led ها آماده روشن شدن بشه و همون پایه ای که کلید بهش وصل بود یعنی d.3 رو 1 میکنه .
    همین خیلی سادس
    به نظر من همه باید برنامه نویسی را یاد بگیرند زیرا برنامه نویسی طریقه ی فکر کردن را به شما یاد میدهد.
    @@@@@@@@@@*بیل گیتس*@@@@@@@@@@

    دیدگاه


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

      متاسفانه متوجه نشدم :cry2:؛ میشه با یه تیکه کد برنامه مثال بزنید؟ منظورم اینه که تو برنامه مثلا به زبان C چطور اینکارو انجام میده ؟ آیا از وقفه استفاده میکنه یا نه؟


      میشه از این روش برای تعداد کلید و LED های بیشتر هم استفاده کرد؟

      دیدگاه


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

        متاسفانه الان به کاپیوترم دسترسی ندارم
        به نظر من همه باید برنامه نویسی را یاد بگیرند زیرا برنامه نویسی طریقه ی فکر کردن را به شما یاد میدهد.
        @@@@@@@@@@*بیل گیتس*@@@@@@@@@@

        دیدگاه


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

          دوستا ن دیگه نظری ندارند ؟

          دیدگاه


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

            سلام من اینو تو پروتئوس تست کردم جواب داد ببین بدردت میخوره
            کد:
            #include <mega8.h>
            void main(void)
            {
            PORTB=0x00;
            DDRB=0x00;
            
            
            while (1)
               {
               if (PINB.0==1){
               DDRB.0=1; PORTB.0=1; DDRB.0=0;}
             }
            }

            دیدگاه


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

              از لطف شما ممنونم ؛ اما در مدار من سر led و اون ر کلید هم به میکرو وصله ؛ یعنی توسط میکرو صفر میشه

              چیزی که به ذهن خودم میرسه اینه که میکرو با سرعت بالا led رو قطع و وصل میکنه و همزمان کلید ها رو هم میخونه

              در واقع یه جورایی جاروب میکنه

              دوستان دیگه نظری ندارن ؟

              اضافه شده در تاریخ :
              همچنان منتظر یاری شما دوستان هستم

              دیدگاه


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

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

                دیدگاه


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

                  پس LED هایی که روش قرار میگیرند با یک سرعت بالایی قطعو وصل میشوند که ما قادر به دیدنش نیستم



                  سوال بعدی اینکه چطور میشه با همین 10 سیم تعداد بیشتری از LED ها و کلید ها رو کنترل کرد؟

                  دیدگاه


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

                    بله، این مدار تنها می تواند بصورت سویچیگ کار کند.
                    مدار دو مرحله دارد که هر مرحله نیز به تنهایی بصورت سوییچینگ کار میکند:
                    - روشن/خاموش کردن ال ای دی ها
                    - خواندن مقدار کلید ها

                    روشن/خاموش کردن ال ای دی ها:
                    برای روشن و خاموش کردن ال ای دی ها پایه های مشترک زمین می شوند. آنگاه به ترتیب پایه های آند تغذیه میشوند.
                    البته این مرحله می تواند بصورت یکجا تنظیم شود اگر کاتد(پایه های مشترک متصل به میکرو) توانایی تحمل جریان را داشته باشند.

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

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

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

                    دیدگاه


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

                      ضمن تشکر از دوستانی که راهنمایی فرمودند باید نکته دیگری رو عرض کنم که در برنامه نویسی باید دقت کنید..مثلا برنامه رو که مینویسید باید دقت کنید که بعد از برداشتن کلید اون الیدی روشن بمونه یا اینکه خاموش بشه...
                      در مورد سوال دومتون اینکه با تعداد 12 پین میشه دو ماتریکس 3*3 ساخت و یکی برای الیدی ویکی برای کلید ها و میشه 9 کلید و 9 الیدی رو بصورت جدا کنترل کرد...
                      با روشی که شما گفتید هم جالبه و اولین باره که دیدم و از این نظر جالبه که با 10 پین میشه 8 الیدی و کلید رو بصورت مجزا کنترل کرد که البته برنامه نویسیش سخته.طرز کارش هم اینطوره که یک ماتریس 1*8 تشکیل میدید که هم الیدی ها و هم کلید ها رو کنترل میکنید...
                      یک روش دیگه هم بنده میشناسم که با 10 پین میتونید 1024 عدد کلید رو کنترل کنید که به pcb خای چند لایه احتیاج هستش...البته هنوز امتحانش نکردم و از صحت عملکردش مطمئن نیستم...

                      دیدگاه


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

                        نوشته اصلی توسط ASHIT AXAR
                        بله، این مدار تنها می تواند بصورت سویچیگ کار کند.
                        مدار دو مرحله دارد که هر مرحله نیز به تنهایی بصورت سوییچینگ کار میکند:
                        - روشن/خاموش کردن ال ای دی ها
                        - خواندن مقدار کلید ها

                        روشن/خاموش کردن ال ای دی ها:
                        برای روشن و خاموش کردن ال ای دی ها پایه های مشترک زمین می شوند. آنگاه به ترتیب پایه های آند تغذیه میشوند.
                        البته این مرحله می تواند بصورت یکجا تنظیم شود اگر کاتد(پایه های مشترک متصل به میکرو) توانایی تحمل جریان را داشته باشند.

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

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

                        شما بهتر است در صورت نیاز اصلاح شده این مدار را استفاده کنید. اصلاح مدار و الگوریتم در عین منطق ساده تر و کاهش کد ها، سرعت اجرای برنامه را بسیار افزایش می دهد (در کل بیش از 25 برابر)
                        - همه پایه های مشترک کلید ها را با یک ترازیستور به زمین متصل کنید متصل کنید و به جای دیودهای متصل به کلید ها مقاومت (همراه با یک خازن) قرار دهید.
                        - همه ی پایه های مشترک ال ای دی ها را با یک ترانزیستور به زمین متصل کنید.
                        از پاسخ شما سپاسگزارم

                        امکانش هست که شماتیک پیشنهادی خودتون رو در تاپیک قرار بدید ؟

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


                        اضافه شده در تاریخ :
                        نوشته اصلی توسط amin tal
                        ضمن تشکر از دوستانی که راهنمایی فرمودند باید نکته دیگری رو عرض کنم که در برنامه نویسی باید دقت کنید..مثلا برنامه رو که مینویسید باید دقت کنید که بعد از برداشتن کلید اون الیدی روشن بمونه یا اینکه خاموش بشه...
                        در مورد سوال دومتون اینکه با تعداد 12 پین میشه دو ماتریکس 3*3 ساخت و یکی برای الیدی ویکی برای کلید ها و میشه 9 کلید و 9 الیدی رو بصورت جدا کنترل کرد...
                        با روشی که شما گفتید هم جالبه و اولین باره که دیدم و از این نظر جالبه که با 10 پین میشه 8 الیدی و کلید رو بصورت مجزا کنترل کرد که البته برنامه نویسیش سخته.طرز کارش هم اینطوره که یک ماتریس 1*8 تشکیل میدید که هم الیدی ها و هم کلید ها رو کنترل میکنید...
                        یک روش دیگه هم بنده میشناسم که با 10 پین میتونید 1024 عدد کلید رو کنترل کنید که به pcb خای چند لایه احتیاج هستش...البته هنوز امتحانش نکردم و از صحت عملکردش مطمئن نیستم...
                        از پاسخ شما هم ممنونم برد هم چند لایه خواهد بود

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

                        لطف میکنید شماتیک قرار بدید؟

                        دیدگاه


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

                          نوشته اصلی توسط marzbal
                          از پاسخ شما هم ممنونم برد هم چند لایه خواهد بود

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

                          لطف میکنید شماتیک قرار بدید؟
                          من سه تا روش گفتم..شما کدوم رو میگید؟؟؟
                          روش اول خیلی متداول هست و در منابع اموزشی از اون صحبت شده و روش دوم هم شبیه روش اول اما برنامه نویسی کمی سخت تری داره..
                          روش سوم برنامه نویسی سخت و به قول شما متری نداره اما طراحی برد متری میخواد.و البته بگم که برای 1000 تا کلید طول ارایه ها معلومه که زیاد میشه.....البته میگم که تابحال فرصت نشده امتحانش کنم...

                          دیدگاه


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

                            نوشته اصلی توسط amin tal
                            من سه تا روش گفتم..شما کدوم رو میگید؟؟؟
                            روش اول خیلی متداول هست و در منابع اموزشی از اون صحبت شده و روش دوم هم شبیه روش اول اما برنامه نویسی کمی سخت تری داره..
                            روش سوم برنامه نویسی سخت و به قول شما متری نداره اما طراحی برد متری میخواد.و البته بگم که برای 1000 تا کلید طول ارایه ها معلومه که زیاد میشه.....البته میگم که تابحال فرصت نشده امتحانش کنم...
                            برای من پیچیدگی pcb هم مهمه ؛ یعنی خیلی نمیخوام شلوغش کنم
                            از نظر شما بین این روش ها همون روش دوستمون که گفتن به جای دیود خازن بذارم مناسبه؟

                            اضافه شده در تاریخ :

                            دوستان چنانچه براتون مقدوره و اگر فرصت دارید یه نمونه برنامه برای خواندن و فرمان دادن به یک سطر کلید و LED رو هم قرار بدید

                            دیدگاه


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

                              نوشته اصلی توسط amin tal
                              از پاسخ شما سپاسگزارم

                              امکانش هست که شماتیک پیشنهادی خودتون رو در تاپیک قرار بدید ؟

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


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

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

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

                              میبینید که در این روش هر تابع با توجه به مقدار تاخیر زمانی سویچینگ می تواند ۵۰۰ بار در ثانیه اجرا شود
                              البته لازم نیست تابع خواندن کلید ها با این سرعت اجرا شود و برای مثال خواندن ۱۰ بار در ثانیه کافی است
                              If the wind will not serve, take to the oars

                              دیدگاه

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