اطلاعیه

Collapse
No announcement yet.

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

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

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

    برای من هم این مشکل پیش اومده بود.
    این مشکل به خاطر مقدار دهی نامناسب ماژول هست. از برنامه من استفاد کن و ترتیب مقدار دهی رجیسترها حتما باید اون شکلی باشه و گرنه مقدار خروجی هر 20 یا 30 ثانیه یک بار تغییر میکنه

    دیدگاه


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

      نوشته اصلی توسط Homayon
      برای من هم این مشکل پیش اومده بود.
      این مشکل به خاطر مقدار دهی نامناسب ماژول هست. از برنامه من استفاد کن و ترتیب مقدار دهی رجیسترها حتما باید اون شکلی باشه و گرنه مقدار خروجی هر 20 یا 30 ثانیه یک بار تغییر میکنه
      طبق دستور شما عمل کردم چند ثانیه خوبه بعد دوباره کند میشه؟
      کدمن به اینصورته
      کد:
      Const Adxl_write = &HA6
        Const Adxl_read = &HA7
        I2cinit
      
        I2cstart
           I2cwbyte Adxl_write                'DATA_FORMAT
           I2cwbyte &H31
           I2cwbyte &H0B
           I2cstop
      
           I2cstart                      'POWER_CTL
           I2cwbyte Adxl_write
           I2cwbyte &H2D
           I2cwbyte &B00001000
           I2cstop
      
           I2cstart                      'INT_ENABLE
           I2cwbyte Adxl_write
           I2cwbyte &H2E
           I2cwbyte &H80
           I2cstop
           Waitms 100
      
           I2cstart
           I2cwbyte Adxl_write
           I2cwbyte &H31
           I2cwbyte &H8B
           I2cstop
           Waitms 100
      
           I2cstart
           I2cwbyte Adxl_write                'DATA_FORMAT
           I2cwbyte &H31
           I2cwbyte &H0B
           I2cstop
           Waitms 100
      
      Do
        Resetcounter = 0
        'Check for reset here
        While _usb_pin._usb_dminus = 0
         Incr Resetcounter
         If Resetcounter = 1000 Then
           Call Usb_reset()
         End If
        Wend
      
        'Check for received data
        If _usb_status._usb_rxc = 1 Then
         If _usb_status._usb_setup = 1 Then
           'Process a setup packet/Control message
           Call Usb_processsetup(_usb_tx_status)
         Elseif _usb_status._usb_endp1 = 1 Then
           'Input data endpoints
           Leds_status = _usb_rx_buffer(2)
         End If
         'Reset the RXC bit and set the RTR bit (ready to receive a new packet)
         _usb_status._usb_rtr = 1
         _usb_status._usb_rxc = 0
        End If
      
      
        If Leds_status = 1 Then
         Portb.1 = 1
        Else
        If Leds_status = 0 Then
           Portb.1 = 0
        End If
        End If
      
      
        If Device_configured = 1 Then
      
           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
      
        End If

      دیدگاه


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

        دقیقا مشکل شما از مقدار دهی اولیه سنسور هست
        برو فایل AN-1057 مال AD رو بخون صفحه 5 دقیقا باید مثل اون عمل کنی تا سنسور درست کار کنه
        https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=we b&cd=1&ved=0CBwQFjAA&url=http%3A%2F%2F www.analog.com%2Fstatic%2Fimported-files%2Fapplication_notes%2FAN-1057.pdf&ei=w3K1U7qYFqve7AaX-IDQCA&usg=AFQjCNFT8p-PbMbb_oEc3yQAmjZndQ4OEw&sig2=Bt6QPSqXUaNzCCAKo d97qQ&bvm=bv.70138588,d.bGE&cad=rja

        دیدگاه


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

          نوشته اصلی توسط Homayon
          دقیقا مشکل شما از مقدار دهی اولیه سنسور هست
          برو فایل AN-1057 مال AD رو بخون صفحه 5 دقیقا باید مثل اون عمل کنی تا سنسور درست کار کنه
          https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=we b&cd=1&ved=0CBwQFjAA&url=http%3A%2F%2F www.analog.com%2Fstatic%2Fimported-files%2Fapplication_notes%2FAN-1057.pdf&ei=w3K1U7qYFqve7AaX-IDQCA&usg=AFQjCNFT8p-PbMbb_oEc3yQAmjZndQ4OEw&sig2=Bt6QPSqXUaNzCCAKo d97qQ&bvm=bv.70138588,d.bGE&cad=rja
          صفحه 5 رو مطالعه کردم اما بازم چیزی دستگیرم نشد این کدهارو از پروژه خودتون استخراج کردم یعنی مال شماهم کند بود؟

          دیدگاه


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

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

            دیدگاه


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

              نوشته اصلی توسط Homayon
              نه من قبلا از کتابخونه ای که در سایت برای راه اندازی این ماژول قرار داده بودند استفاده می کردم این اتفاق می افتاد. بعد این برنامه رو خودم نوشتم و درست کار کرد
              ممنون واقعا این دیگه خیلی کنده البته یه چیزی رو متوجه شدم زمانی که سیم اتصال scl رو با دست لمس میکنم سرعتش زیاد میشه

              دیدگاه


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

                دقیقا این هم برای من هم پیش اومده بود ولی زمانی که دست میزنید اطلاعات درست نیست و فقط تند تند تغییر میکرد.

                دیدگاه


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

                  بحث بسیار جالبی بود ، واقعا لذت بردم :applause: :job:
                  فقط اگه امکانش هست یه شماتیک هم از مدار برای افراد مبتدی مثل بنده قرار بدید
                  خیلی ممنون :smile:

                  دیدگاه


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

                    از دوستانی که تونستن این ماژول رو راه اندازی کنن کسی میتونه نحوه ارسال اطلاعات محورها توسط این ماژول رو توضیح بده ..و این که چطوری میشه این اطلاعات رو استخراج کرد و زاویه خوند

                    دیدگاه


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

                      #ifndef _ADXL345_INCLUDED_
                      #define _ADXL345_INCLUDED_
                      /// Slave add+write=0xA6 , Slaveadd+Read=0xA7
                      // I2C Bus functions
                      #asm
                      .equ __i2c_port=0x15 //PORTC
                      .equ __sda_bit=4
                      .equ __scl_bit=5
                      #endasm
                      #include <i2c.h>
                      //////// Read ADXL345 on address add
                      unsigned char read345reg(unsigned char add)
                      {
                      unsigned char regvalue=0;
                      while(!i2c_start()) //wait here to free bus
                      {#asm ("wdr")}
                      i2c_write(0xA6); //slave adress+write
                      i2c_write(add); //set register address
                      i2c_stop(); //restart (stoP followed by Start)
                      i2c_start();
                      i2c_write(0xA7); //slave adress+Read
                      regvalue=i2c_read(0x00);
                      i2c_stop();
                      return(regvalue);
                      }



                      //////// Read ADXL345 data X=0x32L,0x33H Y=0x34L,0x35H Z=0x36L,0x37H
                      int read345data(unsigned char add)
                      {
                      unsigned char low=0,high=0;
                      int acc;

                      low= read345reg(add);
                      high=read345reg(add+1);
                      acc=(int)( (high<<8) | low);

                      return(acc);
                      }


                      ///////// if we can read ADXL345 DEVID=0xE5
                      char is345ok(void)
                      {
                      if(read345reg(0x00)!=0xE5) // read DEVID register on address 0x00
                      return (0);
                      return (1);
                      }

                      /////// initilize ADXL345
                      void init_345(void)
                      {
                      while(!i2c_start()) //wait here to free bus
                      {#asm ("wdr")}
                      i2c_write(0xA6); //slave adress+write
                      i2c_write(0x31); //DATA_FORMAT register
                      i2c_write(0x0B); //±16g, 13-BIT MODE
                      i2c_stop();
                      delay_ms(5);


                      while(!i2c_start()) //wait here to free bus
                      {#asm ("wdr")}
                      i2c_write(0xA6); //slave adress+write
                      i2c_write(0x2C); //BW_RATE register
                      i2c_write(0x09); //output rate=50Hz(BW=25Hz)
                      i2c_stop();
                      delay_ms(5);


                      while(!i2c_start()) //wait here to free bus
                      {#asm ("wdr")}
                      i2c_write(0xA6); //slave adress+write
                      i2c_write(0x2D); //POWER_CTL register
                      i2c_write(0x08); //START MEASUREMENT
                      i2c_stop();
                      delay_ms(5);
                      #asm ("wdr");// Reset WDT
                      }




                      #endif

                      دیدگاه

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