اطلاعیه

Collapse
No announcement yet.

راه اندازی ساده سنسور adxl345

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

    راه اندازی ساده سنسور adxl345

    سلام کسی از دوستان با این سنسور کار کرده؟
    من میخوام فقط یه محور x رو روی ال سی دی نشون بدم
    با بسکام کار میکنم
    در مورد رجیستری ها راهنمایی می خواستم که کدوم ها رو باید ست کنم
    برای شروع هم این رو نوشتم اما جواب نداد
    کد:
    $regfile = "m8def.dat"
    $crystal = 8000000
    
    
    
    
    Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.3 , _
    Db6 = Portb.2 , Db7 = Portb.1 , E = Portd.3 , Rs = Portd.2
    Cursor Off
    
    
    Dim X As Word
    Dim Fif As Word
    Dim Dat As Word
    Dim Y2 As Byte
    
     Cls
    
    
    
    
    Config Sda = Portd.6
    Config Scl = Portd.7
    Config I2cdelay = 10
    
    
     Const Senw = &H3A
    Const Senr = &H3B
    
    
    
    I2cstart                         ' Generate start code
    I2cwbyte Senw                        ' send address
    I2cwbyte &H31                        ' starting address in 1307
    I2cwbyte &H05                        ' Send Data to SECONDS
    I2cstop
    
    I2cstart                         ' Generate start code
    I2cwbyte Senw                        ' send address
    I2cwbyte &H2D                        ' starting address in 1307
    I2cwbyte &H08                        ' Send Data to SECONDS
    I2cstop
    
    
    
    
    
    Do
    
    
    
    
    I2cstart                          ' start address in 1307                          ' Generate start code
    I2cwbyte Senr                        ' send address
    I2crbyte Dat , Nack
    I2cstop
    Locate 1 , 5
    Lcd Dat
    
    
    
    
    
    I2cstart                         ' Generate start code
    I2cwbyte Senw                        ' send address
    I2cwbyte 57
    I2cstart                          ' start address in 1307                          ' Generate start code
    I2cwbyte Senr
    I2crbyte Fif , Nack
    I2cstop
    
    Locate 2 , 5
    Lcd Fif
    
    
    
    
    
    
    I2cstart                         ' Generate start code
    I2cwbyte Senw                        ' send address
    I2cwbyte &H32
    I2cstart                          ' start address in 1307                          ' Generate start code
    I2cwbyte Senr                        ' send address
    I2crbyte X , Nack
    I2cstop
    
    Cls
     Locate 1 , 1
     Lcd X
    
    
     Loop
     End

    #2
    پاسخ : راه اندازی ساده سنسور adxl345

    در مورد این سنسور با C قبلا تو سایت نمونه کد وجود داره سرچ کن

    دیدگاه


      #3
      پاسخ : راه اندازی ساده سنسور adxl345

      سلام دوستان من نیاز دارم با بسکام این ماژول رو راه اندازی کنم میدونم که قبلا با C راه اندازی شده اما من بسکام نیازمه کسی هست در این باره کمک کنه؟؟؟

      دیدگاه


        #4
        پاسخ : راه اندازی ساده سنسور adxl345

        سلام منم میخوام این ماژول رو با بسکام راه بندازم کسی هست راهنمایی کنه؟

        دیدگاه


          #5
          پاسخ : راه اندازی ساده سنسور adxl345

          من قبلا این سنسور رو با بسکام راه اندازی کردم. میتونید از این کد استفاده کنید:
          اگر سوالی دارید میتونید بپرسید

          کد:
          $regfile = "m32def.dat"                   'Define your own
          $crystal = 8000000
          '-------------------------- lcd -----------------------------------------------
          Config Porta.1 = Output
          Porta.1 = 0
          Config Lcd = 20 * 4
          Config Lcdpin = Pin , Rs = Pina.0 , E = Pina.2 , Db4 = Pina.4 , Db5 = Pina.5 , _
          Db6 = Pina.6 , Db7 = Pina.7
          Cursor Off
          Cls
          Cls
          '-------------------------------------------------------------------------------
          Config Scl = Portc.0
          Config Sda = Portc.1
          
          Const Adxl345write = &HA6
          Const Adxl345read = &HA7
          '\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/
          Dim Iby As Byte
          Dim Jby As Byte
          Dim Lby As Byte , Mby As Byte , Xby As Byte , Yby As Byte , Zby As Byte
          Dim Buff(6) As Byte
          Dim Acc(3) As Integer
          Dim An(6) As Integer
          Dim Accel_x As Integer
          Dim Accel_y As Integer
          Dim Accel_z As Integer
          Dim Sensor_sign(9) As Integer
          Dim An_offset(6) As Integer
          Dim A As Byte
          Dim Average_x As Integer
          Dim Average_y As Integer
          Dim Average_z As Integer
          
          '/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
          
          Waitms 2
          I2cinit
          '--------------------------------------------------------------------------
          I2cstart
            I2cwbyte Adxl345write                  'DATA_FORMAT
            I2cwbyte &H31
            I2cwbyte &H0B
          I2cstop
          
          I2cstart                          'POWER_CTL
            I2cwbyte Adxl345write
            I2cwbyte &H2D
            I2cwbyte &B00001000
          I2cstop
          
          I2cstart                          'INT_ENABLE
            I2cwbyte Adxl345write
            I2cwbyte &H2E
            I2cwbyte &H80
          I2cstop
          '--------------------------------------------------------------------------
          Waitms 100
          
          
          
          I2cstart
            I2cwbyte Adxl345write
            I2cwbyte &H31
            I2cwbyte &H8B
          I2cstop
          Waitms 100
          
          
          I2cstart
            I2cwbyte Adxl345write                  'DATA_FORMAT
            I2cwbyte &H31
            I2cwbyte &H0B
          I2cstop
          Waitms 100
          
          '++++++++++++++++++++++++++++++ Calibratoin +++++++++++++++++++++++++++++++
          For A = 1 To 100
           For Iby = 1 To 6
            I2cstart
              I2cwbyte &HA6
              Jby = &H31 + Iby
              I2cwbyte Jby
            I2cstart
              I2cwbyte &HA7
              I2crbyte Xby
              I2crbyte Yby , Nack
              Buff(iby) = Yby
            I2cstop
           Next Iby
            Accel_x = Makeint(buff(1) , Buff(2))
            Accel_y = Makeint(buff(3) , Buff(4))
            Accel_z = Makeint(buff(5) , Buff(6))
          
            Average_x = Average_x + Accel_x
            Average_y = Average_y + Accel_y
            Average_z = Average_z + Accel_z
          Next A
            Average_x = Average_x / 100
            Average_y = Average_y / 100
            Average_z = Average_z / 100
          
            Average_x = Average_x / 4
            Average_x = Average_x * -1
          
            Average_y = Average_y / 4
            Average_y = Average_y * -1
          
            Average_z = Average_z - 256
            Average_z = Average_z / 4
            Average_z = Average_z * -1
          
            Cls
            Locate 1 , 1 : Lcd "AVERAGE X:" ; Average_x
            Locate 2 , 1 : Lcd "AVERAGE Y:" ; Average_y
            Locate 3 , 1 : Lcd "AVERAGE Z:" ; Average_z
            Wait 5
            Cls
            A = Average_x
            I2cstart
             I2cwbyte Adxl345write
             I2cwbyte &H1E
             I2cwbyte A
            I2cstop
            A = Average_y
            I2cstart
             I2cwbyte Adxl345write
             I2cwbyte &H1F
             I2cwbyte A
            I2cstop
            A = Average_z
            I2cstart
             I2cwbyte Adxl345write
             I2cwbyte &H20
             I2cwbyte A
            I2cstop
          
          '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
          Do
           For Iby = 1 To 6
            I2cstart
              I2cwbyte &HA6
              Jby = &H31 + Iby
              I2cwbyte Jby
            I2cstart
              I2cwbyte &HA7
              I2crbyte Xby
              I2crbyte Yby , Nack
              Buff(iby) = Yby
            I2cstop
           Next Iby
            Accel_x = Makeint(buff(1) , Buff(2))
            Accel_y = Makeint(buff(3) , Buff(4))
            Accel_z = Makeint(buff(5) , Buff(6))
          
            Locate 1 , 1 : Lcd "Accel X: " ; Accel_x ; "   "
            Locate 2 , 1 : Lcd "Accel Y: " ; Accel_y ; "   "
            Locate 3 , 1 : Lcd "Accel Z: " ; Accel_z ; "   "
           Waitms 50
          Loop
          
          End

          دیدگاه


            #6
            پاسخ : راه اندازی ساده سنسور adxl345

            نوشته اصلی توسط Homayon
            من قبلا این سنسور رو با بسکام راه اندازی کردم. میتونید از این کد استفاده کنید:
            اگر سوالی دارید میتونید بپرسید

            کد:
            $regfile = "m32def.dat"                   'Define your own
            $crystal = 8000000
            '-------------------------- lcd -----------------------------------------------
            Config Porta.1 = Output
            Porta.1 = 0
            Config Lcd = 20 * 4
            Config Lcdpin = Pin , Rs = Pina.0 , E = Pina.2 , Db4 = Pina.4 , Db5 = Pina.5 , _
            Db6 = Pina.6 , Db7 = Pina.7
            Cursor Off
            Cls
            Cls
            '-------------------------------------------------------------------------------
            Config Scl = Portc.0
            Config Sda = Portc.1
            
            Const Adxl345write = &HA6
            Const Adxl345read = &HA7
            '\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/
            Dim Iby As Byte
            Dim Jby As Byte
            Dim Lby As Byte , Mby As Byte , Xby As Byte , Yby As Byte , Zby As Byte
            Dim Buff(6) As Byte
            Dim Acc(3) As Integer
            Dim An(6) As Integer
            Dim Accel_x As Integer
            Dim Accel_y As Integer
            Dim Accel_z As Integer
            Dim Sensor_sign(9) As Integer
            Dim An_offset(6) As Integer
            Dim A As Byte
            Dim Average_x As Integer
            Dim Average_y As Integer
            Dim Average_z As Integer
            
            '/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
            
            Waitms 2
            I2cinit
            '--------------------------------------------------------------------------
            I2cstart
              I2cwbyte Adxl345write                  'DATA_FORMAT
              I2cwbyte &H31
              I2cwbyte &H0B
            I2cstop
            
            I2cstart                          'POWER_CTL
              I2cwbyte Adxl345write
              I2cwbyte &H2D
              I2cwbyte &B00001000
            I2cstop
            
            I2cstart                          'INT_ENABLE
              I2cwbyte Adxl345write
              I2cwbyte &H2E
              I2cwbyte &H80
            I2cstop
            '--------------------------------------------------------------------------
            Waitms 100
            
            
            
            I2cstart
              I2cwbyte Adxl345write
              I2cwbyte &H31
              I2cwbyte &H8B
            I2cstop
            Waitms 100
            
            
            I2cstart
              I2cwbyte Adxl345write                  'DATA_FORMAT
              I2cwbyte &H31
              I2cwbyte &H0B
            I2cstop
            Waitms 100
            
            '++++++++++++++++++++++++++++++ Calibratoin +++++++++++++++++++++++++++++++
            For A = 1 To 100
             For Iby = 1 To 6
              I2cstart
                I2cwbyte &HA6
                Jby = &H31 + Iby
                I2cwbyte Jby
              I2cstart
                I2cwbyte &HA7
                I2crbyte Xby
                I2crbyte Yby , Nack
                Buff(iby) = Yby
              I2cstop
             Next Iby
              Accel_x = Makeint(buff(1) , Buff(2))
              Accel_y = Makeint(buff(3) , Buff(4))
              Accel_z = Makeint(buff(5) , Buff(6))
            
              Average_x = Average_x + Accel_x
              Average_y = Average_y + Accel_y
              Average_z = Average_z + Accel_z
            Next A
              Average_x = Average_x / 100
              Average_y = Average_y / 100
              Average_z = Average_z / 100
            
              Average_x = Average_x / 4
              Average_x = Average_x * -1
            
              Average_y = Average_y / 4
              Average_y = Average_y * -1
            
              Average_z = Average_z - 256
              Average_z = Average_z / 4
              Average_z = Average_z * -1
            
              Cls
              Locate 1 , 1 : Lcd "AVERAGE X:" ; Average_x
              Locate 2 , 1 : Lcd "AVERAGE Y:" ; Average_y
              Locate 3 , 1 : Lcd "AVERAGE Z:" ; Average_z
              Wait 5
              Cls
              A = Average_x
              I2cstart
               I2cwbyte Adxl345write
               I2cwbyte &H1E
               I2cwbyte A
              I2cstop
              A = Average_y
              I2cstart
               I2cwbyte Adxl345write
               I2cwbyte &H1F
               I2cwbyte A
              I2cstop
              A = Average_z
              I2cstart
               I2cwbyte Adxl345write
               I2cwbyte &H20
               I2cwbyte A
              I2cstop
            
            '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
            Do
             For Iby = 1 To 6
              I2cstart
                I2cwbyte &HA6
                Jby = &H31 + Iby
                I2cwbyte Jby
              I2cstart
                I2cwbyte &HA7
                I2crbyte Xby
                I2crbyte Yby , Nack
                Buff(iby) = Yby
              I2cstop
             Next Iby
              Accel_x = Makeint(buff(1) , Buff(2))
              Accel_y = Makeint(buff(3) , Buff(4))
              Accel_z = Makeint(buff(5) , Buff(6))
            
              Locate 1 , 1 : Lcd "Accel X: " ; Accel_x ; "   "
              Locate 2 , 1 : Lcd "Accel Y: " ; Accel_y ; "   "
              Locate 3 , 1 : Lcd "Accel Z: " ; Accel_z ; "   "
             Waitms 50
            Loop
            
            End
            ممنون دوست عزیز من در مرحله اول می خوام چک کنم که ببینم آیا ماژول به میکرو متصل هست یا نه یه کد تو اینترنت دیدم اما هر کاری میکنم جواب نمیده من میخوام اگر ماژول کانکت شد یه Led روشن بشه من این کد رو نوشتم اما کار نمی کنه ممنون میشم راهنمایی بفرمایید از میکرو 8 استفاده میکنم.
            کد:
            I2cinit
              Waitms 500
            
              Const Adxl_add_write = &HA6
              Const Adxl_add_read = &HA7
              Dim A As Byte
              I2cstart
              I2cwbyte Adxl_add_write
              I2cwbyte &H00
              I2cstart
              I2cwbyte Adxl_add_read
              I2crbyte A , Nack
              I2cstop
            
              If A = 229 Then
               Portb.1 = 1
              End If

            دیدگاه


              #7
              پاسخ : راه اندازی ساده سنسور adxl345

              موفق شدم کدم رو اجرا کنم و مشکلم رو رفع کنم از همه دوستان سپاس گذارم.
              حالا سوال بعدی اینه چون من اطلاعاتم رو با Usb به سمت کامپیوتر میفرستم نمیخوام این همه محاسبه رو توی میکرو انجام بدم لطفا توضیح بدید که خروجی مثلا محور X به چه شکل هست ؟منظورم خروجی خام محور X هست.

              دیدگاه


                #8
                پاسخ : راه اندازی ساده سنسور adxl345

                خوشحالم که جواب گرفتی. اگر یک نگاه به اون کدهایی که من گذاشتم بندازی میبینی که من اطلاعات خام مربوط به محور X,Y,Z رو از سنسور میخونمو روی LCD نمایش میدم.

                دیدگاه


                  #9
                  پاسخ : راه اندازی ساده سنسور adxl345

                  ممنون نگاهش کردم اما نمیتونم بفهمم چرا از حلقه استفاده کردی نمیشه مستقیم مثلا x رو استخراج کرد اون حلقه 100 برای نمونه گیری هستش درسته حلقه بعدیش چیه؟چرا باید باشه نمیشه مستقیم خروجی گرفت؟

                  دیدگاه


                    #10
                    پاسخ : راه اندازی ساده سنسور adxl345

                    اون حلقه ای که 100 تا نمونه میگیرم , برای کالیبره کردن سنسور هست. بعد از کالیبره کردن سنسور میکرو وارد حلقه میشه و مقدار X,Y,Z رو از سنسور میخونه و روی LCD نمایش میده و این کار رو تا بی نهایت انجام میده . حالا شما میگی که نیشه مستقیم خروجی گرفت , من معنی مستقیم رو دقیق نفهمیدم

                    دیدگاه


                      #11
                      پاسخ : راه اندازی ساده سنسور adxl345

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

                      دیدگاه


                        #12
                        پاسخ : راه اندازی ساده سنسور adxl345

                        اون حلقه برای اینه که از رجیسترهای 32 تا 37 که محتوی مقادیر X,Y,Z هست رو بخونه. اگر با دقت نگاه کنی میبینی متغییر Iby داره با 31 جمع میشه.
                        درنهایت مقادیر در یک آرایه Buff قرار میگیره.
                        من فکر میکنم شما دیتاشیت رو دقیق نخوندی.
                        توی سایت AD برو یک عالمه PDF خوب هست که بدردت میخوره

                        دیدگاه


                          #13
                          پاسخ : راه اندازی ساده سنسور adxl345

                          نوشته اصلی توسط Homayon
                          اون حلقه برای اینه که از رجیسترهای 32 تا 37 که محتوی مقادیر X,Y,Z هست رو بخونه. اگر با دقت نگاه کنی میبینی متغییر Iby داره با 31 جمع میشه.
                          درنهایت مقادیر در یک آرایه Buff قرار میگیره.
                          من فکر میکنم شما دیتاشیت رو دقیق نخوندی.
                          توی سایت AD برو یک عالمه PDF خوب هست که بدردت میخوره
                          ممنون راستش وقت نداشتم مطالعه کنم اما حتما میخونم.
                          الان من اطلاعاتم رو به کامپیوتر که میفرستم توی سه تا کادر متن نمایشش میدم اما یکم کنده به نظر شما علت چیه؟

                          دیدگاه


                            #14
                            پاسخ : راه اندازی ساده سنسور adxl345

                            درچه حد کند هست یعنی بیشتر از چند ثانیه طول میکشه تا اطلاعات خروجی تغییر کنه؟

                            دیدگاه


                              #15
                              پاسخ : راه اندازی ساده سنسور adxl345

                              نوشته اصلی توسط Homayon
                              درچه حد کند هست یعنی بیشتر از چند ثانیه طول میکشه تا اطلاعات خروجی تغییر کنه؟
                              آره خیلی کنده

                              دیدگاه

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