اطلاعیه

Collapse
No announcement yet.

شبکه ای از میکروکنترلرها

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

    #16
    پاسخ : شبکه ای از میکروکنترلرها

    جناب قاسم پور خدمتتون سلام عرض می کنم و از اینکه دوباره در پاسخ به پست هام تاخیر داشتم شرمنده ام شرمنده شرمنده :redface: :redface:

    اجازه بدید یه بحثی بکنیم روی نکات مهمی که در مورد I2C باید بهش توجه بشه و بعد بریم سراغ بحث شما...

    ببینید برای شبکه کردن device های مختلف از طریق این پروتکل ، اول باید بدونیم که Master و slave کدوم ها هستن، به این دلیل که شریان ارتباطی ما دست عنصر Master هستش یعنی اینکه کلاکی که برای سنکرون کردن ارسال اطلاعات استفاده میشه از اون تامین میشه . عنصر slave هم که تابع این کلاک ، به ارسال و دریافت اطلاعات می پردازه . چون در این پروتکل تنها از دو خط برای ارتباط استفاده میشه (SDAوSCL) پس سنکرون سازی ارسال برامون خیلی مهمه به این دلیل که دیتا و کلاک، هر کدوم راه خودشونو میرن و این وسط یه الگوریتمی باید وجود داشته باشه که اینها رو باهم سنکرون کنه .

    نحوه ی ارسال اطلاعات در این پروتکل بر این اساسه که Master ، با فرستادن آدرس slave مورد نظرش روی SDA، اون رو مطلع میکنه که میخواد براش اطلاعات بفرسته . در این زمان slave یک بیت به نام بیت تصدیق (Acknowledge) برای Master میفرسته که دریافت آدرس و آمادگی برای دریافت اطلاعات رو تائید می کنه . حالا این بیت در پالس چندم تولید میشه؟ در واقع قالب آدرسی که برای این پروتکل پیش بینی کردن یک قالب هفت بیتیه که یک بیت ACK و یک بیت تعیین جهت هم که بهش اضافه کنیم میشه نه بیت . منظور از بیت ACK همون بیت تائیده و منظور از بیت تعیین جهت هم بیتیه که تعیین میکنه اطلاعات از Master به slave انتقال پیدا کنه یا برعکس (یعنی تعیین وضعیت فرستنده/گیرنده برای slave یا Master) . شاید این سوال پیش بیاد که مگه میشه Master گیرنده هم باشه؟!! مگه Master کارش تولید اطلاعات نیست؟!! در واقه یه تفکیکی باید برای واژه ی تولید توی این پروتکل قائل بشیم و اون هم اینه که Master وظیفش تولید پالس بر روی خط SCK هست و می تونیم برای Master هم وضعیت فرستنده در نظر بگیریم و هم گیرنده . یعنی برای مثال Master می تونه ازعنصر slave1 یک سری اطلاعات دریافت کنه و اونها رو بر حسب روال مورد نظر توی شبکه که طراح تنظیم کرده ، برچسب گذاری کنه و به slave2 بفرسته .

    حالا فرض کنیم بخوایم داده ارسال کنیم . اولین کاری که باید بکنیم اینه که تعیین کنیم این اطلاعات از کجا به کجا میخواد منتقل بشه و این کار هم یعنی تعیین بیت جهت ، بعدشم ارسال هفت بیت آدرس برای تعیین slave مورد نظر و بعد هم در پالس نهم ارسال بیت ACK از جانب slave و دریافتش توسط Master . وقتی این بیت توسطMaster دریافت شد ، یعنی آدرس توسط slave تائید شد ، حاکم شروع به ارسال اطلاعات می کنه برحسب زمانبندی کلاکی که خودش روی SCK تولید کرده ، اطلاعات رو منتقل می کنه.

    اما گاها در شبکه وضعیتی پیش میاد که یک پیغام عمومی رو میخوایم از Master به همه ی slave ها ارسال کنیم . این وضعیت در این پروتکل اصطلاحا فراخوانی تشخیص عمومی یا Call Recognition General نامیده میشه و براش یه آدرس رزرو شده ، در نظر گرفته شده که به آدرس صفر معروفه 0000000 . در این وضعیت همه ی slave های شبکه خطوط SDA خودشونو در وضعیت پایین قرار میدن (البته در زمانی که پالس ACK تولید شده باشه) و دیتای ارسال شده رو دریافت می کنن .

    حالا فرض کنیم که یه سری slave در شبکه داریم که با یه Master کنترل میشن . برای برقراری ارتباط بین اونها کافیه که به هر slave یک آدرس معین اختصاص بدیم که این آدرس در طول ارتباط ثابته و از طرف Master هم شناخته شده هست . با این شرایط همونطورکه گفتیم ، وقتی آدرس یک slave روی SDA قرار گرفت ، slave های دیگه از ارتباط در اون لحظه خارج میشن و ارتباط بین Master و یک slave محدود میشه . فقط در این نوع ارتباط باید به یک نکته ، خیلی توجه بشه اونم اینه که اگه slave به هر دلیلی نتونه داده ی ارسالی ازMaster رو دریافت کنه ، خبری از ارسال ACK نیست و این بار بیت NACK برای Master ارسال میشه و این به اون معنا هست که ارسال دیتا دوباره باید از سر گرفته بشه و این یعنی یک تاخیر در انتقال لذا برای جلوگیری از این وضعیت پیشنهاد کردند که یک وقفه در پایان انتقال پاکت های دیتا ایجاد بشه تا از این نگرانی هم جلوگیری بشه .

    فایل زیر یه توضیحی در مورد I2C هست فکر کنم به درد بخوره .
    http://www.4shared.com/file/48276748...9c/I2C_me.html

    قسمت 9 این فایلم حتما نگاه کنید خیلی به درد بخوره .
    http://www.4shared.com/file/48276523/912811fc/I2C.html

    چون من درایو C کامپیوترم به خاطر ویروس کلا پاک شده سورس برنامه هام اکثرا دود شدن و به دلیل این که شما خیلی عجله داشتید و من هم جایی بودم که نمی شد برنامه رو براتون بنویسم مجبور به نقض قانون copy-write شدم و این برنامه رو براتون گذاشتم . امیدوارم گیر کارتون برطرف بشه .
    http://www.4shared.com/file/48277416...e2/Sample.html
    این برنامه شبکه بندی چند تا slave رو با یه Master نشون میده (انجام میده) .

    بازم به خاطر تاخیر ازتون عذرخواهی می کنم . :nerd: موفق باشید .



    [hr]عاقلان نقطه ی پرگار وجودند ولی عشق داند که در این دایره سرگردانند
    دوستان! مدتی کمتر به سایت میام ..

    دیدگاه


      #17
      پاسخ : شبکه ای از میکروکنترلرها

      سلام حسام جان....
      از توضیحاتت واقعا ممنون....لطف بزرگی کردی...
      من دیشب به مهدی(پرتوی فر) تماس گرفتم و گفت توکتاب جدیدشون توضیح داده مجبور شدم همون دیشب کتاب رو بگیرم.....فکر میکنم این همون برنامه باشه دیگه...درسته....؟
      برنامه تویه کتاب کاملا جواب میده...واقعا دستت درد نکنه......از اینکه وقت گذاشتی ممنون.....

      دیدگاه


        #18
        پاسخ : شبکه ای از میکروکنترلرها

        سلام میشه کتابی که میگی رو معرفی کنی....مرسی. :nerd:

        دیدگاه


          #19
          پاسخ : شبکه ای از میکروکنترلرها

          مرجع کامل میکرو کنترلر های avr ویراست دوم...نوشته مهدی پرتوی فر

          دیدگاه


            #20
            پاسخ : شبکه ای از میکروکنترلرها

            ممنون...من این کتاب رو دارم ولی چاپ اول...سال 85....ویراست جدیدش رو ندیدم. ممنون

            دیدگاه


              #21
              پاسخ : شبکه ای از میکروکنترلرها

              سلام امکان داره استفاده از I2C رو با Bascom هم توضیح بدید من لینک ها رو دیدم عالی بود ولی سمپلش با codevision بود من نیاز شدید به Bascom دارم ممنون میشم کمکم کنید.

              دیدگاه


                #22
                پاسخ : شبکه ای از میکروکنترلرها

                سلام
                استفاده از ارتباط I2C تو بسکام با Code Vision تقریبا یک جوره. یه نگاه به Help بسکام بنداز.
                1) مشخص کردن پایه های ارتباطی SDA و SCL
                کد:
                Config Scl = Portb.4
                
                Config Sda = Portb.5

                2) مشخص کردن زمان تاخیر که نسبت به Code Vision دستوری اضافه است. البته من سعی نکردم تو Code Vision این مقدار رو عوض کنم. ولی فکر کنم که دستور مستقیم برای اون نداره.
                کد:
                CONFIG I2CDELAY = 2
                البته به توضیح این دستور تو Help بسکام حتما یه نگاه بنداز.

                3)خیلی راحت استفاده از دستورهای I2C
                کد:
                I2CSTART
                
                I2CSTOP
                
                I2CRBYTE var, ack/nack
                
                I2CWBYTE val
                
                I2CSEND slave, var
                
                I2CSEND slave, var , bytes
                
                I2CRECEIVE slave, var
                
                I2CRECEIVE slave, var , b2W, b2R

                توضیح دستورهای بالا رو تو Help نگاه کن. اگر مشکلی بود مطرح کن.
                موفق باشی

                دیدگاه


                  #23
                  پاسخ : شبکه ای از میکروکنترلرها

                  سلام خیلی متشکرم از راهنمایی شما ، من هلپا رو دیدم ولی نیار دارم 4 تا avr با هم شبکه کنم نمیدونم چه جوری به slave ها و به master آدرس بدم اگر ممکنه کمی بیشتر راهنمایی کنید البته اگر با sampleباشه خیلی بهتره

                  دیدگاه


                    #24
                    پاسخ : شبکه ای از میکروکنترلرها

                    سلام
                    حقیقت اینه که به این شکل کار نکردم. اما یه نگاه به بسکام کردم دو تا دستور داره که می شه با استفاده از اونها یک میکروکنترلر رو در ارتباطهای I2C و TWI به شکل Slave درآورد. البته از حالت I2C زیاد خوشم نیومد ولی مثالی رو که با TWI پیاده سازی کرده به طور دقیق همونیه که شما می خوای. این دو تادستور اینه:

                    کد:
                    CONFIG I2CSLAVE
                    
                    CONFIG TWISLAVE
                    مشکل اینجاست که برخی از میکروکنترلرهای AVR ماژول سخت افزاری TWI رو ندارند. در میکروکنترلرهای با امکانات بیشتر این ماژول وجود داره. در میکروکنترلرهای نوع اول باید این ماژول به صورت نرم افزاری شبیه سازی بشه. فکر می کنم این کار با دستور اول انجام بشه. در این حالت تو بسکام باید از یک فایل کتابخانه ای استفاده بشه (i2cslave.lib). در حالت دوم از سخت افزار داخلی میکروکنترلر استفاده می شه که با کنترل چند تا برچسب (Label) می شه تمام انتقالهای این پروتکل رو کنترل کرد.
                    حتی این کار رو می تونیم خودمون هم انجام بدیم. البته باید با اینتراپت و تایمر کار کرد که همین کار رو دستور اول هم انجام می ده.
                    به هر حال فکر می کنم کسی از دوستان که با این روش میکروکنترلرها رو شبکه کرده بهتر بتونه راهنمایی کنه. اگر مشکلی پیدا شد باز هم مطرح کن.
                    موفق باشی

                    دیدگاه


                      #25
                      پاسخ : شبکه ای از میکروکنترلرها

                      نوشته اصلی توسط حسام الدین
                      با I2C کار کردم اگه سوالی بود و خواستید با اون میکرو هاتون رو شبکه کنین می تونم کمک کنم (تا اونجایی که بلد باشم)



                      با سلام
                      لطف کنید و اگر امکان داره نحوه ارتباط سخت افزاری برای دوATMEGA 16 را توضیح بدید I2Cیا TWI
                      + بر نامه ای به زبان سی در محیط CODEVISIONAVR نوشته شده یاشد
                      لطفا توضیح بدهید و نگو یید این مطلب قبلا توضیح داده شده است :applause:
                      با تشکر :job:

                      دیدگاه


                        #26
                        پاسخ : شبکه ای از میکروکنترلرها

                        سلام
                        من هم دقیقا همین مشکل رو دارم. همه ی مطالب و سوالاتی رو که در باره ی i2c ، تو سایت بود رو هم خوندم، کتاب مرجع کامل AVRهم خوندم ولی هنوز مشکلم با i2c حل نشده یعنی هنوز نتونستم برنامشو بنویسم . اینطور که معلومه خیلی ها باهاش مشکل دارن. خواهش میکنم اگه کسی نمونه برنامه ای تو codevision داره بزاره . :angry:
                        تو بیهوده از کوهساران حقیقت بالا نمی روی ، یا همین امروز فراتر می روی ، یا توانت را می پرورانی تا بتوانی فردا فراتر روی!

                        دیدگاه


                          #27
                          پاسخ : شبکه ای از میکروکنترلرها

                          سلام ..............

                          لینک برنامه ....

                          http://www.4shared.com/file/62884281/ef11aad0/I2C.html


                          لینک توضیحات بیشتر .....

                          http://www.eca.ir/forum2/index.php?topic=18689.15

                          موفق باشید .

                          دوستان! مدتی کمتر به سایت میام ..

                          دیدگاه


                            #28
                            پاسخ : شبکه ای از میکروکنترلرها

                            سلام
                            من یک ماژول قطب نما دارم که با i2cکار می کنه .و من نمی دونم که چطور باید باهاش ارتباط برقرار کنم البته یه pdf جمع وجور داره اما مفهوم نیست :angry:
                            من باید هر طوری هست تا صبح با هاش رفیق شم(ارتباط برقرار کنم) در ضمنbascom کار می کنم .help بسکامو خوندم اما از مراحل کارش سر در نیاوردم :sad:
                            تا اونجایی که من فهمیدم 1- start و اخرش stop .تو pdf ادرس رایت 43hو رید42h بو د و کلی کد دیگه :cry2:
                            من این ماژول رو برای ربات می خوام و باید تا 2 روز دیگه بریم مسابقه و اگه نتونم امادهش کنم ....... :cry:
                            لطفا اگه براتون امکان داره منو راهنمایی کنید -راستی تو پروتوس یه شبیه ساز i2cهست برای تست گرفتن برنامه چطوری ازش استفاده کنم؟؟ oo:
                            تشکر فراوان :bye

                            دیدگاه


                              #29
                              پاسخ : شبکه ای از میکروکنترلرها

                              سلام
                              اطلاعات بیشتری از ماژول لازمه تا فرد دیگه هم بتونه بره دنبالش.
                              موفق باشی

                              دیدگاه


                                #30
                                پاسخ : شبکه ای از میکروکنترلرها

                                سلام rs232 ,rs485 بدلیل اینکه فاصلتون کمه اصلا لزومی نداره
                                ارتباط سریال معمولی هم یک اشکال داره اینکه حتما باید فرستنده و گیرنده معلوم باشه یا یکی مستر باشه و بقیه SLAVE و تمام اطلاعات از طریق مستر جابجا بشه
                                I2C کر کنم روش خوبی باشه من روش اول رو امتحان کردم و جواب هم گرفتم البتهنیاز به یک پروتکل ارتباطی نسبتا قوی داره ولی شما اگه از روش دوم استفاده کنی فکر کنم دردسر کمتری داشته باشی

                                دیدگاه

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