اطلاعیه

Collapse
No announcement yet.

مشکل در ارتباط دو میکرو توسط i2c

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

    مشکل در ارتباط دو میکرو توسط i2c

    سلام

    من یه ارتباط i2c بین دو میکرو مگا32 و مگا8 بوجود آوردم و میخوام یه اطلاعاتی بین این دو میکرو رد و بدل کنم

    برای تست یه مدار ساده بستم که سمت مگا 32 یه کیپد رو میخونه و اطلاعات کیپد رو از طریق i2c به مگا8 فرستاده میشه و مگا8 هم این اطلاعات رو روی lcd نشون میده

    مشکلی که دارم اینه که اعداد درستی نشون داده نمیشه ، مثلا اگه روی کیپد عدد 5 رو بزنی روی السیدی هر عددی نشون میده غیر از 5

    این کل فایلای مدار
    http://cld.persiangig.com/dl/pILLK/TuGNQuTI6v/New%20folder.rar
    این شماتیکم


    این برنامه فرستنده
    [code=vb]$regfile = "m32def.dat"
    $crystal = 1000000

    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5 , Rs = Portb.0 , E = Portb.1
    Cursor Off
    Cls

    Config Kbd = Porta

    Config I2cdelay = 5
    Config Sda = Portc.1
    Config Scl = Portc.0

    Dim A As Byte , B As Byte

    I2cstart


    Do

    W:
    A = Getkbd()
    If A > 15 Then Jmp W

    Home : Lcd ; A ; " "

    I2csend &H40 , A

    Loop


    End[/code]


    اینم برنامه گیرنده
    [code=vb]$regfile = "m8def.dat"
    $crystal = 1000000

    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5 , Rs = Portb.0 , E = Portb.1
    Cursor Off
    Cls

    Config I2cdelay = 5
    Config Sda = Portc.4
    Config Scl = Portc.5

    Dim A As Byte

    I2cstart

    Do

    I2creceive &H40 , A

    If A < 16 Then
    Home : Lcd ; A ; " "
    End If

    Loop


    End[/code]

    اضافه شده در تاریخ :
    یه چی یادم رفته بود بگم
    اونم اینه که مدار رو توی عمل هم که میبندم باز وضعیت همون طوری هست که توی پست بالایی گفتم
    یعنی عددی که میکروی slave نشون میده چرت و پرت هست

    #2
    پاسخ : مشکل در ارتباط دو میکرو توسط i2c

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

    دیدگاه


      #3
      پاسخ : مشکل در ارتباط دو میکرو توسط i2c

      با بسکام آشنایی ندارم و فایل پروتئوس هم خیلی چیزا رو نداره. مثلا GND میکروها دیده نمیشه(در واقع نداره). کاش یه عکس از سخت افزار می ذاشتید تا ببینیم. اگه فرض کنیم که برنامه نوشته شده شما درسته پس من یه سوالی در مورد سخت افزار می پرسم؟
      آیا GND هر دو میکرو به هم وصله؟(اطلاع دارید که واسه I2C باید GNDهای همه میکرو ها به هم وصل باشن؟ حتی در بعضی موارد Vccها هم باید بهم وصل بشن؟)

      دیدگاه


        #4
        پاسخ : مشکل در ارتباط دو میکرو توسط i2c

        نوشته اصلی توسط Rohalamin
        با بسکام آشنایی ندارم و فایل پروتئوس هم خیلی چیزا رو نداره. مثلا GND میکروها دیده نمیشه(در واقع نداره). کاش یه عکس از سخت افزار می ذاشتید تا ببینیم. اگه فرض کنیم که برنامه نوشته شده شما درسته پس من یه سوالی در مورد سخت افزار می پرسم؟
        آیا GND هر دو میکرو به هم وصله؟(اطلاع دارید که واسه I2C باید GNDهای همه میکرو ها به هم وصل باشن؟ حتی در بعضی موارد Vccها هم باید بهم وصل بشن؟)
        داخل پروتئوس بصورت پیش فرض همه vccها و gndهای آیسی ها به هم وصل هستن و اینو قسمت help میگه و در هنگام تبدیل شماتیک به pcb میشه مشاهده کرد که همه vccها و gnd به هم وصل میشن

        اگه به هم وصل نبودن پس مدار ساعت با ds1307 هم نباید توی پروتئوس جواب میداد
        بگذریم

        درضمن ذکر کردم که مدار رو توی عمل هم تست کردم
        تاحتی چند بار میکرو ها رو عوض کردم و از یه میکرو دیگه استفاده کردم

        دیدگاه


          #5
          پاسخ : مشکل در ارتباط دو میکرو توسط i2c

          نوشته اصلی توسط اشکان غفارزاده.
          داخل پروتئوس بصورت پیش فرض همه vccها و gndهای آیسی ها به هم وصل هستن و اینو قسمت help میگه و در هنگام تبدیل شماتیک به pcb میشه مشاهده کرد که همه vccها و gnd به هم وصل میشن

          اگه به هم وصل نبودن پس مدار ساعت با ds1307 هم نباید توی پروتئوس جواب میداد
          بگذریم

          درضمن ذکر کردم که مدار رو توی عمل هم تست کردم
          تاحتی چند بار میکرو ها رو عوض کردم و از یه میکرو دیگه استفاده کردم
          عذرخواهی میکنم بابت سوالم. بهرحال جزء موراد مبهم بود.
          لاجیک آنالیزر داری که تبادلات خطوط I2C رو ببینیم؟
          همون طور که گفتم با AVR خیلی وقته که فاصله گرفتم و بسکام بلد نیستم ولی انگار هم توی Slave و هم Master یه Start رو داری انجام میدی. این به نظر درست نیست. هست؟(فقط توی مثال شما فکر کنم باید فقط مستر انجام بده) بسکام مثال واسه I2C نداره که ببینی درسته یا نه؟ توی نت گیر نیوردی تا حالا که ببینی برنامه ات درسته؟ به I2C تسلط دارید؟

          دیدگاه


            #6
            پاسخ : مشکل در ارتباط دو میکرو توسط i2c

            من در عمل جواب گرفتم البته با تغییراتی که در برنامه دادم

            برنامه فرستنده :
            کد:
            $regfile = "m32def.dat"
            $crystal = 8000000
            
            Config Kbd = Portd , Debounce = 50 , Delay = 100
            
            Config Sda = Portc.1
            Config Scl = Portc.0
            Config I2cdelay = 10
            Dim A As Byte , B As Byte
            I2cinit
            
            Do
            W:
            A = Getkbd()
            If A > 15 Then Goto W
            
            I2cstart
            I2csend &HEA , A
            I2cstop
            Waitms 100
            Loop
            
            End
            برنامه گیرنده :
            کد:
            $regfile = "m32def.dat"
            $crystal = 8000000
            
            Config Lcdpin = Pin , Db4 = Pb.0 , Db5 = Pb.1 , Db6 = Pb.2 , Db7 = _
             Pb.3 , E = Pb.5 , Rs = Pb.4
            
            Config Lcd = 16 * 2
            Cursor Off
            Cls
            
            Config Sda = Portc.1
            Config Scl = Portc.0
            Config I2cdelay = 10
            Dim A As Byte
            I2cinit
            
            Do
            Bitwait Pinc.0 , Reset
            I2cstart
            I2creceive &HEA , A
            I2cstop
            If A < 16 Then
            Home : Lcd ; A ; "  "
            End If
            
            Loop
            
            
            End
            دقت کنید که هر دو میکرو مگا32 هستند و پایه های sda و scl شون متناظرا بهم وصل شده (مقاومت pullup 10k انتخاب شده) و صفحه کلید به پورت d میکرو فرستنده وصل شده
            من نمىآ‌توانم فرضیه «بىآ‌اخلاقى انسان» را بپذیرم، و من اخلاق را منحصرا امرى انسانى و متعلق به انسان مىآ‌دانم که هیچ نوع قدرت مافوق انسانى در پشت آن وجود ندارد
            آلبرت اینشتین
            منبع: http://fa.wikiquote.org

            دیدگاه


              #7
              پاسخ : مشکل در ارتباط دو میکرو توسط i2c

              نوشته اصلی توسط Rohalamin
              عذرخواهی میکنم بابت سوالم. بهرحال جزء موراد مبهم بود.
              لاجیک آنالیزر داری که تبادلات خطوط I2C رو ببینیم؟
              همون طور که گفتم با AVR خیلی وقته که فاصله گرفتم و بسکام بلد نیستم ولی انگار هم توی Slave و هم Master یه Start رو داری انجام میدی. این به نظر درست نیست. هست؟(فقط توی مثال شما فکر کنم باید فقط مستر انجام بده) بسکام مثال واسه I2C نداره که ببینی درسته یا نه؟ توی نت گیر نیوردی تا حالا که ببینی برنامه ات درسته؟ به I2C تسلط دارید؟
              قبلا i2c با ایپیرام و ساعت کار کردم ولی برای ارتباط بین دومیکرو اوین بارمه

              اسکپروم ندارم ولی با اسکوپ که چک میکنم سیگنال های کلاک و دیتا رو دارم

              اون دستور استارت i2c برای همزمان کردن ارتباط بین دومیکرو هست

              اضافه شده در تاریخ :
              نوشته اصلی توسط S i l i c o n
              من در عمل جواب گرفتم البته با تغییراتی که در برنامه دادم

              ....
              .
              .

              دقت کنید که هر دو میکرو مگا32 هستند و پایه های sda و scl شون متناظرا بهم وصل شده (مقاومت pullup 10k انتخاب شده) و صفحه کلید به پورت d میکرو فرستنده وصل شده
              خیلی خیلی خیلی خیلی خیلی خیلی ممنون و متشکر :job: :job: :applause: :applause: :applause: :applause: :wow: :wow: :wow: :wow:
              برنامه جواب میده و عالی کار میکنه

              دیدگاه


                #8
                پاسخ : مشکل در ارتباط دو میکرو توسط i2c

                دوستان سلام
                من یه سوال دیگه دارم و اونم اینه که چطور میشه با یه ds1307 به چندتا میکرو ساعت داد؟ میخوام یه میکرو قابلیت تنظیم ساعت رو داشته باشه و باقی میکرو ها فقط ساعت رو بتونن ببینن و داشته باشنش. البته ناگفته نمونه که همینطوری ساده sda و scl ها رو با مقاومت 10 کیلو پول پ کردم و از یه مدار دوتا کپی گرفتم، اما تو پروتئوس چند دقیقه یه بار ds1307 قاطی میکرد و ساعتو عوض میکرد. :angry: ممکنه کسی کمکم بکنه؟ من با بسکام کار میکنم.
                مرسی از راهنماییتون.
                تشكر نكن، صلوات بفرست:

                [img width=165 height=100]http://www.askdin.com/gallery/images/29839/1___________5.png[/img]

                دیدگاه


                  #9
                  پاسخ : مشکل در ارتباط دو میکرو توسط i2c

                  نوشته اصلی توسط نعمت الهیان
                  دوستان سلام
                  من یه سوال دیگه دارم و اونم اینه که چطور میشه با یه ds1307 به چندتا میکرو ساعت داد؟ میخوام یه میکرو قابلیت تنظیم ساعت رو داشته باشه و باقی میکرو ها فقط ساعت رو بتونن ببینن و داشته باشنش. البته ناگفته نمونه که همینطوری ساده sda و scl ها رو با مقاومت 10 کیلو پول پ کردم و از یه مدار دوتا کپی گرفتم، اما تو پروتئوس چند دقیقه یه بار ds1307 قاطی میکرد و ساعتو عوض میکرد. :angry: ممکنه کسی کمکم بکنه؟ من با بسکام کار میکنم.
                  مرسی از راهنماییتون.
                  شما یه کار دیگه بکن ساعت ds1307 رو بده به میکرو اولی و از میکرو اولی مثلا با ارتباط سریال بفرست به میکروهای دیگه
                  من نمىآ‌توانم فرضیه «بىآ‌اخلاقى انسان» را بپذیرم، و من اخلاق را منحصرا امرى انسانى و متعلق به انسان مىآ‌دانم که هیچ نوع قدرت مافوق انسانى در پشت آن وجود ندارد
                  آلبرت اینشتین
                  منبع: http://fa.wikiquote.org

                  دیدگاه


                    #10
                    پاسخ : مشکل در ارتباط دو میکرو توسط i2c

                    نوشته اصلی توسط S i l i c o n
                    شما یه کار دیگه بکن ساعت ds1307 رو بده به میکرو اولی و از میکرو اولی مثلا با ارتباط سریال بفرست به میکروهای دیگه
                    سلام دوست عزیز
                    متاسفانه نمیشه، به دو دلیل:
                    1- بلد نیستم رشته بفرستم و بگیرم
                    2- واسه یه کار دیگه که مهمتره پورت سریال هر دو میکرو اشغاله و مدام داده های دیگه ای رد و بدل میشه
                    تشكر نكن، صلوات بفرست:

                    [img width=165 height=100]http://www.askdin.com/gallery/images/29839/1___________5.png[/img]

                    دیدگاه


                      #11
                      پاسخ : مشکل در ارتباط دو میکرو توسط i2c

                      نوشته اصلی توسط نعمت الهیان
                      سلام دوست عزیز
                      متاسفانه نمیشه، به دو دلیل:
                      1- بلد نیستم رشته بفرستم و بگیرم
                      2- واسه یه کار دیگه که مهمتره پورت سریال هر دو میکرو اشغاله و مدام داده های دیگه ای رد و بدل میشه
                      فکر کنم این روشی که میگم باید درست جواب بده
                      شما پایه sqw/out رو روی یک هرتز تنظیم کنید و به پایه اینتراپت میکرو ها وصل کنید و هر وقت یک شد میکرو اولی ساعت رو از ds1307 بخونه و میکرو دومی 30 میلی ثانیه صبر کنه و ساعت رو بخونه و میکرو سومی 60 میلی ثانیه صبر کنه و ساعت رو بخونه (باید ببینید که خوندن از ds1307 چقدر زمان میبره همونقدر منظور کنید)
                      برای جلوگیری از تداخل احتمالی هم پایه scl رو چک کنید اگه یک بود یعنی دیتا جابجا نمیشه و میکرو مجاز به خواندن هست
                      من نمىآ‌توانم فرضیه «بىآ‌اخلاقى انسان» را بپذیرم، و من اخلاق را منحصرا امرى انسانى و متعلق به انسان مىآ‌دانم که هیچ نوع قدرت مافوق انسانى در پشت آن وجود ندارد
                      آلبرت اینشتین
                      منبع: http://fa.wikiquote.org

                      دیدگاه


                        #12
                        پاسخ : مشکل در ارتباط دو میکرو توسط i2c

                        نوشته اصلی توسط S i l i c o n
                        فکر کنم این روشی که میگم باید درست جواب بده
                        شما پایه sqw/out رو روی یک هرتز تنظیم کنید و به پایه اینتراپت میکرو ها وصل کنید و هر وقت یک شد میکرو اولی ساعت رو از ds1307 بخونه و میکرو دومی 30 میلی ثانیه صبر کنه و ساعت رو بخونه و میکرو سومی 60 میلی ثانیه صبر کنه و ساعت رو بخونه (باید ببینید که خوندن از ds1307 چقدر زمان میبره همونقدر منظور کنید)
                        برای جلوگیری از تداخل احتمالی هم پایه scl رو چک کنید اگه یک بود یعنی دیتا جابجا نمیشه و میکرو مجاز به خواندن هست
                        سلام مجدد
                        فکر میکنم روشی که گفتین جواب بده، اما متاسفانه من نمیتونم از اینتراپت و تاخیر استفاده کنم واسه اینکه یکی از میکروهام باید مدام یه پورتو چک کنه و با تغییر وضعیتش عکس العمل نشون بده، برای همین اینتراپت و تاخیر اصلا در برنامه مجاز نیست.
                        ضمنا، تمامی میکرو ها باید فقط اطلاعات رو از ds1307 بگیرن، اما یکی از میکرو ها هم میتونه بگیره و هم برای تنظیم کردنش باید بتونه بهش داده بفرسته.
                        کسی راه حلی سراغ داره که بشه این معما رو به نتیجه رسوند؟ :sad:
                        مرسی
                        راستی کسی چیپی، مداری، چیزی نمیشناسه که مثلا بشه به روش ستاره ای i2c رو شبکه کرد؟! oo:
                        تشكر نكن، صلوات بفرست:

                        [img width=165 height=100]http://www.askdin.com/gallery/images/29839/1___________5.png[/img]

                        دیدگاه


                          #13
                          پاسخ : مشکل در ارتباط دو میکرو توسط i2c

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

                          دیدگاه

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