اطلاعیه

Collapse
No announcement yet.

امکان ارتباط I2C دو ماژول با AVR در BASCOM

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

    امکان ارتباط I2C دو ماژول با AVR در BASCOM

    سلام به اساتید محترم
    آیا امکان دارد دو ماژول شبیه هم که دستوراتش یکی است به صورت I2C به AVR وصل کرد (در BASCOM)
    در ارتباط سریال هر اندازه که بخواییم به صورت نرم افزاری امکان ارتباط است.آیا در I2C هم این امکان وجود دارد؟

    #2
    پاسخ : امکان ارتباط I2C دو ماژول با AVR در BASCOM

    نوشته اصلی توسط ali_elect62
    سلام به اساتید محترم
    آیا امکان دارد دو ماژول شبیه هم که دستوراتش یکی است به صورت I2C به AVR وصل کرد (در BASCOM)
    در ارتباط سریال هر اندازه که بخواییم به صورت نرم افزاری امکان ارتباط است.آیا در I2C هم این امکان وجود دارد؟
    سلام
    منظورتون دقیقا چی هست؟
    یعنی می تونین چندین دستگاه رو به یک سیم ارسال و دریافت وصل کنین؟ برای سریال ؟چه پروتکل سریالی؟

    برای I2c می تونین چندین دستگاه با آدرسهای مختلف رو روی یک ارتباط I2c وصل کنین به شرطی که آدرسها متفاوت باشن
    هیچ دانش آموزی نیست که به در خانۀ دانشمندی آمد و شد کند, مگر این که خداوند برای هر گامی که برمی دارد عبادت یک سال را برایش رقم زند.

    دیدگاه


      #3
      پاسخ : امکان ارتباط I2C دو ماژول با AVR در BASCOM

      من دو تا سنسور می خوام وصل کنم که آدرسها یکی هستند.آیا راهی هست به یک avr وصل کنیم هر دوشونو؟

      دیدگاه


        #4
        پاسخ : امکان ارتباط I2C دو ماژول با AVR در BASCOM

        سلام
        اکثر ماژول ها که با پروتکل I2c کار می کنن قابلیت تغییر ادرس رو دارن نمونه ماژول رو قرار می دین؟
        هیچ دانش آموزی نیست که به در خانۀ دانشمندی آمد و شد کند, مگر این که خداوند برای هر گامی که برمی دارد عبادت یک سال را برایش رقم زند.

        دیدگاه


          #5
          پاسخ : امکان ارتباط I2C دو ماژول با AVR در BASCOM

          ماژول قطب نمای cmps09
          اکثر ماژول ها که با پروتکل I2c کار می کنن قابلیت تغییر ادرس رو دارن نمونه ماژول رو قرار می دین؟
          درست گفتید میشه آدرس تغیر داد.ولی نتونستم این کار انجام بدم.میشه راهنماییم کنید
          Changing the I2C Bus Address
          To change the I2C address of the CMPS10 you must have only one module on the bus. Write
          the 3 sequence commands in the correct order followed by the address with 100ms between
          writes. Example; to change the address of a compass currently at 0xC0 (the default shipped
          address) to 0xC2, write the following to address 0xC0; (0xA0, 0xAA, 0xA5, 0xC2 ) with a 100ms
          delay after each of the first three bytes. These commands must be sent in the correct sequence
          to change the I2C address, additionally, No other command may be issued in the middle of the
          sequence. The sequence must be sent to the command register at location 22, which means 4
          separate write transactions on the I2C bus. When done, you should label the CMPS10 with its
          address, however if you do forget, just power it up without sending any commands. The
          CMPS10 will flash its address out on the LED. One long flash followed by a number of shorter
          flashes indicating its address. The flashing is terminated immediately on sending a command
          the CMPS10.

          دیدگاه


            #6
            پاسخ : امکان ارتباط I2C دو ماژول با AVR در BASCOM

            ایراد کارم کجاست که نمی تونم آدرس سنسور عوض کنم؟
            '$sim
            $regfile = "m16def.dat"
            $crystal = 8000000
            $hwstack = 32
            $swstack = 32
            $framesize = 48
            Config Scl = Portc.0
            Config Sda = Portc.1
            Config I2cdelay = 20
            Const Address_s = &HC0 'default shipped Write address
            Const Address_r = &HC1
            'Read address
            Deflcdchar 0 , 8 , 20 , 8 , 32 , 32 , 32 , 32 , 32 'DEG

            Config Single = Scientific , Digits = 1
            Enable Interrupts
            Waitms 500

            I2cinit
            I2cstart
            I2cwbyte Address_s
            I2cstop
            Waitms 20
            I2cstart
            I2cwbyte Address_s
            I2cwbyte &HA0
            Waitms 100
            I2cwbyte &HAA
            Waitms 100
            I2cwbyte &HA5
            Waitms 100
            I2cwbyte &HC2
            I2cstop
            Waitms 20
            I2cstart
            I2cwbyte &HC2
            I2cwbyte 22
            I2cwbyte &HA0
            I2cwbyte &HAA
            I2cwbyte &HA5
            I2cwbyte &HC2
            I2cstop
            Waitms 100
            End

            دیدگاه


              #7
              پاسخ : امکان ارتباط I2C دو ماژول با AVR در BASCOM

              سلام
              برنامه رو به شکل زیر تغییر دادم
              کد:
              $regfile = "m16def.dat"
              $crystal = 8000000
              $hwstack = 32
              $swstack = 32
              $framesize = 48
              '====================
              Config Scl = Portc.0
              Config Sda = Portc.1
              Config I2cdelay = 20
              Const Address_s = &HC0                   'default shipped Write address
              Const Address_r = &HC1
              '===========================
              Config Single = Scientific , Digits = 1
              '================
              Declare Sub Writes()
              Declare Sub Reads()
              '============
              Waitms 100
              I2cinit
              
              Do
              Call Writes()
              Waitms 500
              Loop
              
              End
              '==================
              Sub Writes()
              I2cstart
              I2cwbyte Address_s
              I2cstop
              
              I2cstart
              I2cwbyte Address_s
              I2cwbyte &HA0
              Waitms 100
              I2cwbyte &HAA
              Waitms 100
              I2cwbyte &HA5
              Waitms 100
              I2cwbyte &HC2
              I2cstop
              
              I2cstart
              I2cwbyte Address_s
              I2cwbyte 22
              I2cwbyte &HA0
              I2cwbyte &HAA
              I2cwbyte &HA5
              I2cwbyte &HC2
              I2cstop
              
              
              End Sub

              نکات:
              روی خط مقاومت های pullup قرار دادین؟
              فیوزبیت کریستال خارجی تنظیم هست؟
              از کجا می تونین مطمئن بشین که تغییر آدرس صوریت گرفته؟پیشنهادم راه اندازی یکی و سپس دریافت اطلاعات و در صورت درست بودن آخرین مرحله تغییر ادرس چون بعضی از مواقع این پروتکل I2c یه مشکلات جالبی داره
              موقع تنظیم آدرس تنها یه ماژول باید روی خط فعال باشه
              آهان الان داخل دیتاشیت این رو دیدم
              The CMPS09 will flash its address out on the LED.
              هیچ دانش آموزی نیست که به در خانۀ دانشمندی آمد و شد کند, مگر این که خداوند برای هر گامی که برمی دارد عبادت یک سال را برایش رقم زند.

              دیدگاه


                #8
                پاسخ : امکان ارتباط I2C دو ماژول با AVR در BASCOM

                برانامه شما را اجرا کردم بازم نشد.
                روی خط مقاومت های pullup قرار دادین؟
                فیوزبیت کریستال خارجی تنظیم هست؟
                از کجا می تونین مطمئن بشین که تغییر آدرس صوریت گرفته؟پیشنهادم راه اندازی یکی و سپس دریافت اطلاعات و در صورت درست بودن آخرین مرحله تغییر ادرس چون بعضی از مواقع این پروتکل I2c یه مشکلات جالبی داره
                موقع تنظیم آدرس تنها یه ماژول باید روی خط فعال باشه
                آهان الان داخل دیتاشیت این رو دیدم
                روی خط مقاومت های pullup قرار دادم.
                فیوز بیت روی 8000000 داخلی تنظیم کردم.
                و فقط یک ماژول در موقع تغییر آدرس روی خط هست.

                دیدگاه


                  #9
                  پاسخ : امکان ارتباط I2C دو ماژول با AVR در BASCOM

                  سلام
                  لطفا برنامه ای بنویسین که از ماژول بخونن تا اینجا مطمئن بشیم که مشکل از خط ارتباطی و پروتکل نیست و صرفا مربوط به مشکلات نرم افزای هست
                  هیچ دانش آموزی نیست که به در خانۀ دانشمندی آمد و شد کند, مگر این که خداوند برای هر گامی که برمی دارد عبادت یک سال را برایش رقم زند.

                  دیدگاه


                    #10
                    پاسخ : امکان ارتباط I2C دو ماژول با AVR در BASCOM

                    سلام.ممنونم که دارید کمکم می کنید.
                    لطفا برنامه ای بنویسین که از ماژول بخونن تا اینجا مطمئن بشیم که مشکل از خط ارتباطی و پروتکل نیست و صرفا مربوط به مشکلات نرم افزای هست
                    برنامه من هیچ مشکلی نداره و به خوبی داره کار میکنه.ین هم برنامم:
                    کد:
                    '$sim
                    $regfile = "m16def.dat"
                    $crystal = 8000000
                    $hwstack = 32
                    $swstack = 32
                    $framesize = 48
                    
                    'MY LCD SETUP
                    Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5 , E = Portb.1 , Rs = Portb.0
                    Config Lcd = 16 * 2
                    'Initlcd
                    Cursor Off Noblink
                    Cls
                    
                    ' To enter the I2C mode of operation leave the mode pin unconnected
                    Config Scl = Portc.0
                    Config Sda = Portc.1
                    Config I2cdelay = 20
                    
                    Const Address_s = &HC0                   'default shipped Write address
                    Const Address_r = &HC1                   'Read address
                    Deflcdchar 0 , 8 , 20 , 8 , 32 , 32 , 32 , 32 , 32     'DEG
                    
                    Config Single = Scientific , Digits = 1
                    
                    Dim Highbyte As Byte , Lowbyte As Byte , Bearing As Integer , B_out As Single
                    Dim Pitch As Byte , Roll As Byte
                    Dim Pitch_out As Integer , Roll_out As Integer       '
                    
                    Enable Interrupts
                    
                    Do
                     I2cinit
                     I2cstart
                     I2cwbyte Address_s                    'write address
                     I2cwbyte 2
                     Waitms 20
                     I2cstart
                     I2cwbyte Address_r                    'read address
                     I2crbyte Highbyte , Ack                  'Bearing high byte
                     I2crbyte Lowbyte , Ack                  'Bearing Low byte
                     I2crbyte Pitch , Ack                   'Pitch signed byte -127 to +127
                     I2crbyte Roll , Nack                   'Roll signed byte -127 to +127
                     I2cstop
                    
                     Bearing = Makeint(lowbyte , Highbyte )          'make a Integer from high/low byte be 0 - 3599
                     B_out = Bearing / 10                   'make it 1 decimal 0.0 - 359.9 single used
                    
                    'IF NEGATIV value
                     If Pitch.7 = 1 Then
                      Pitch = Pitch - 128
                      Pitch_out = 0
                      Pitch_out = Pitch_out - Pitch
                     Else                           'if positiv value
                      Pitch_out = Pitch
                     End If
                    
                    'IF NEGATIV value
                     If Roll.7 = 1 Then
                      Roll = Roll - 128
                      Roll_out = 0
                      Roll_out = Roll_out - Roll
                     Else                           'if positiv value
                      Roll_out = Roll
                     End If
                    
                    'show on lcd
                     Locate 1 , 1
                     Lcd "Bearing " ; B_out ; Chr(0)
                     Locate 2 , 1
                     Lcd "P "
                     If Pitch_out > 0 Then Lcd "+"               'if positiv / on negativ value it show -xx
                     Lcd Pitch_out ; Chr(0) ; " R "
                     If Roll_out > 0 Then Lcd "+"               'if positiv / on negativ value it show -xx
                     Lcd Roll_out ; Chr(0)
                    
                     Waitms 200
                    Loop
                    End

                    دیدگاه


                      #11
                      پاسخ : امکان ارتباط I2C دو ماژول با AVR در BASCOM

                      سلام
                      این برنامه هم چک کنین

                      کد:
                      $regfile = "m16def.dat"
                      $crystal = 8000000
                      $hwstack = 32
                      $swstack = 32
                      $framesize = 48
                      '====================
                      Config Scl = Portc.0
                      Config Sda = Portc.1
                      Config I2cdelay = 20
                      Const Address_s = &HC0                   'default shipped Write address
                      Const Address_r = &HC1
                      '===========================
                      Config Single = Scientific , Digits = 1
                      '================
                      Declare Sub Writes()
                      Declare Sub Reads()
                      '============
                      Waitms 100
                      
                      
                      Do
                      Call Writes()
                      Waitms 500
                      Loop
                      
                      End
                      '==================
                      Sub Writes()
                      
                      I2cinit
                      
                      I2cstart
                      I2cwbyte Address_s
                      I2cstop
                      
                      I2cstart
                      I2cwbyte Address_s
                      I2cwbyte &HA0
                      Waitms 100
                      I2cwbyte &HAA
                      Waitms 100
                      I2cwbyte &HA5
                      Waitms 100
                      I2cwbyte &HCE
                      I2cstop
                      
                      
                      I2cstart
                      I2cwbyte Address_s
                      I2cwbyte 22
                      I2cwbyte &HA0
                      Waitms 100
                      I2cwbyte &HAA
                      Waitms 100
                      I2cwbyte &HA5
                      Waitms 100
                      I2cwbyte &HCE
                      I2cstop
                      
                      
                      End Sub

                      بعد برد رو خاموش و تنها ماژول رو در دستگاه قرار بدین ببنین 7 تا چشمک led تون می زنه یا خیر؟
                      هیچ دانش آموزی نیست که به در خانۀ دانشمندی آمد و شد کند, مگر این که خداوند برای هر گامی که برمی دارد عبادت یک سال را برایش رقم زند.

                      دیدگاه


                        #12
                        پاسخ : امکان ارتباط I2C دو ماژول با AVR در BASCOM

                        سلام
                        این برنامه هم چک کنین
                        باز هم جواب نداد. :sad:
                        ربطی به 100ms نداره؟آیا 8000000 می تونه این زمان دقیق بده؟

                        دیدگاه


                          #13
                          پاسخ : امکان ارتباط I2C دو ماژول با AVR در BASCOM

                          سلام
                          موقعی که برنامه شما در حالت خواندن کار می کند بنابراین برای نوشتن هم نباید مشکلی ایجاد بشه.طبق دیتاشیت نوشته بود بین ارسال ها باید 100 میلی ثانیه توقف وجود داشته باشه بسکام توسط فرکانس کاری که در برنامه مشخص کردین کاری می کنه که دستور 100 میلی ثانیه در تمامی فرکانس های تعریف شده یکی باشن.
                          نمونه کد آماده به زبان C و ... ندارین تا بتونم با دقت و بررسی کارهای انجام شده برنامه رو باز نویسی و دقیقا دنبال خط بگردم احساس می کنم دیتاشیت یا کم گفته یا من بد متوجه شدم
                          هیچ دانش آموزی نیست که به در خانۀ دانشمندی آمد و شد کند, مگر این که خداوند برای هر گامی که برمی دارد عبادت یک سال را برایش رقم زند.

                          دیدگاه


                            #14
                            پاسخ : امکان ارتباط I2C دو ماژول با AVR در BASCOM

                            چند روزه که هر کاری می کنم نمی تونم تغییر آدرس بدم.
                            اگر بتونم این ماژول را در مد سریال راه بندازم مشکلم حل میشه و بد به صورت نرم افزاری هر دو ماژل به میکرو وصل می کنم.می تونید در برنامه نوسی در حالت سریال کمکم کنید؟یا راهی هست که بدون تغییر آدرس هر دو به صورت I2C راه بندازم؟

                            دیدگاه


                              #15
                              پاسخ : امکان ارتباط I2C دو ماژول با AVR در BASCOM

                              سلام
                              برای این منظور می یان chip select می کنن که با قراردادن مالتی پلکسر یا گیت و یا خاموش روشن کردن یکی از ادوات یکی از ماژول ها رو در حالت وصل و دیگری رو در حالت قطع قرار می دن.اما اصلا پیشنهاد نمی شه چون کار مهندسی دیگه نیست.
                              پیشنهاد می کنم باز وقت بزارین روی ماژول و دونبال نمونه کدها حتی به زبون های مختلف هم که شده بگردین.
                              بزارین من از چند تا دوست خارجیم می پرسم ببینم اگر تونستن مشکل رو بهم بگن خبرتون می دم شاید تا شب طول بکشه
                              هیچ دانش آموزی نیست که به در خانۀ دانشمندی آمد و شد کند, مگر این که خداوند برای هر گامی که برمی دارد عبادت یک سال را برایش رقم زند.

                              دیدگاه

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