اطلاعیه

Collapse
No announcement yet.

شتاب سنج ADXL345 فروشگاه [فیلم+توضیحات+سوالات]

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

    #31
    پاسخ : شتاب سنج ADXL345 فروشگاه [فیلم+توضیحات+سوالات]

    من دستورات LCD رو تغییر دادم ولی وقتی برنامه وارد تابع main میشه هر بار برای طی کردن کامل حلقه و نمایش اعداد جدید حدود سه ثانیه ظول میکشه.
    ولی اون جوری که توی فیلم نشون میده اعداد روی LCD خیلی زود تغییر میکنه. بعدش اعداد نمایش داده شده روی LCD اصلا شبیه اعداد داخل فیلم نیست.
    به نظر شکا مشکل کار کجاست؟

    کد:
    #include <mega32.h>
    #include <math.h>
    #include <i2c.h>
    #include <delay.h>
    #include <stdio.h>
    #include <alcd.h>
    #include <ADXL345.h>
    char lcd1[20],lcd2[20],lcd3[20],lcd4[20]; 
    
    void main(void)
    {
    delay_ms(100);
    // Declare your local variables here
    PORTA=0x00;
    DDRA=0x00;
    PORTB=0x00;
    DDRB=0x00;
    PORTC=0x00;
    DDRC=0x00;
    PORTD=0x00;
    DDRD=0x00;
    
    // I2C Bus initialization
    // I2C Port: PORTC
    // I2C SDA bit: 1
    // I2C SCL bit: 0
    // Bit Rate: 100 kHz
    // Note: I2C settings are specified in the
    // Project|Configure|C Compiler|Libraries|I2C menu.
    i2c_init();
    lcd_init(20);
    
    ADXL345_Regs_Reset();
    ADXL345_SelfTest();
    ADXL345_Offset_Calib();
    ADXL345_Init();
    
    delay_ms(1000);
    
    Get_Offset_Values();
    //val2lcd(Offset_X_Val,2,1,Dec,5,on);
    //val2lcd(Offset_Y_Val,2,2,Dec,5,on);
    //val2lcd(Offset_Z_Val,2,3,Dec,5,on);
    delay_ms(2000);
    
    while (1)
       {
        Get_Accel_Angles();
        sprintf(lcd1,"X:%6d%6d%6d",Accel_Xout_Val,Accel_Xout_Normalized_Val,Accel_XAngle);
        sprintf(lcd2,"Y:%6d%6d%6d",Accel_Yout_Val,Accel_Yout_Normalized_Val,Accel_YAngle);
        sprintf(lcd3,"Z:%6d%6d%6d",Accel_Zout_Val,Accel_Zout_Normalized_Val,Accel_ZAngle);
        lcd_gotoxy(0,0);
        lcd_putsf("Accel AcceIN Angle");
        lcd_gotoxy(0,1);
        lcd_puts(lcd1);
        lcd_gotoxy(0,2);
        lcd_puts(lcd2); 
        lcd_gotoxy(0,3);
        lcd_puts(lcd3);    
        delay_ms(70);
       }           
    }

    دیدگاه


      #32
      پاسخ : شتاب سنج ADXL345 فروشگاه [فیلم+توضیحات+سوالات]

      دوستانی که از این هدر استفاده کردن در پست های قبل تر از من گفته بودند که تغییر اعداد برگشتی از تابع Get_Accel_Angles(); بسیار کند هست؟
      دوستان این مشکل رو چه جوری حل کردید؟ :angry: :angry: :angry: :angry:
      بعدش اعداد Accel_ZAngle و Accel_YAngle و Accel_XAngle اصلا درست نیست. در ضمن از تابع ریست رجیسترها هم استفاده کرم.

      دیدگاه


        #33
        پاسخ : شتاب سنج ADXL345 فروشگاه [فیلم+توضیحات+سوالات]

        سلام. برای راه اندازی ADXL345 ابتدا باید رجیسترهای زیر تنظیم بشند:

        DATA FORMAT=0X0B // +-16g, 13-BIT MODE
        POWER CTL=0X08 // Start Measurement

        بعدش باید رجیسترهای دیتا در حالت خواندن پیوسته (Continues Mode) خونده بشند. بعد از خوندن رجیسترهای دیتا، برای بدست آوردن مقادیر شتاب هر محور باید رجیستر دیتای آن محور را در ضریب مقیاس(Scale Factor) آن محور ضرب کرد. توجه داشته باشید که ضریب مقیاس با تغییر ولتاژ تغذیه اعمالی به سنسور فرق میکنه. در زیر ضریب مقیاس مربوط به ولتاژ 3.3V نوشته شده:
        read data registers in Continues Mode
        a=DATAX*0.00377 // Refer to "OPERATION AT VOLTAGES OTHER THAN 2.5 V" section in datasheet
        a=DATAY*0.00377 // Refer to "OPERATION AT VOLTAGES OTHER THAN 2.5 V" section in datasheet
        a=DATAZ*0.00390 // Refer to "OPERATION AT VOLTAGES OTHER THAN 2.5 V" section in datasheet

        دیدگاه


          #34
          پاسخ : شتاب سنج ADXL345 فروشگاه [فیلم+توضیحات+سوالات]

          دوستان من این برنامه رو نوشتم مشکلش کجاست ؟

          کد:
          $regfile = "m8def.dat"
          $crystal = 8000000
          
          
          Config Lcd = 16 * 2
          Config Lcdpin = Pin , Db4 = Portb.3 , Db5 = Portb.2 , Db6 = Portb.1 , Db7 = Portb.0 , Rs = Portb.5 , E = Portb.4
          Cursor Off
          
          
          Config Scl = Portc.5
          Config Sda = Portc.4
          
          
          Const Adxl_write = &HA6
          Const Adxl_read = &HA7
          
          Dim A As Byte
          Dim X As Byte
          Dim Y As Byte
          Dim Z As Byte
          Dim X_high As Byte
          Dim X_low As Byte
          Dim Y_high As Byte
          Dim Y_low As Byte
          Dim Z_high As Byte
          Dim Z_low As Byte
          
          
          I2cstart
          I2cwbyte Adxl_write
          I2cwbyte &H1D
          I2cwbyte &H00
          Waitms 50
          I2cstart
          I2cwbyte Adxl_write
          I2cwbyte &H1E
          I2cwbyte &H00
          Waitms 50
          I2cstart
          I2cwbyte Adxl_write
          I2cwbyte &H1F
          I2cwbyte &H00
          Waitms 50
          I2cstart
          I2cwbyte Adxl_write
          I2cwbyte &H20
          I2cwbyte &H00
          Waitms 50
          I2cstart
          I2cwbyte Adxl_write
          I2cwbyte &H21
          I2cwbyte &H00
          Waitms 50
          I2cstart
          I2cwbyte Adxl_write
          I2cwbyte &H22
          I2cwbyte &H00
          Waitms 50
          I2cstart
          I2cwbyte Adxl_write
          I2cwbyte &H23
          I2cwbyte &H00
          Waitms 50
          I2cstart
          I2cwbyte Adxl_write
          I2cwbyte &H24
          I2cwbyte &H00
          Waitms 50
          I2cstart
          I2cwbyte Adxl_write
          I2cwbyte &H25
          I2cwbyte &H00
          Waitms 50
          I2cstart
          I2cwbyte Adxl_write
          I2cwbyte &H26
          I2cwbyte &H00
          Waitms 50
          I2cstart
          I2cwbyte Adxl_write
          I2cwbyte &H27
          I2cwbyte &H00
          Waitms 50
          I2cstart
          I2cwbyte Adxl_write
          I2cwbyte &H28
          I2cwbyte &H00
          Waitms 50
          I2cstart
          I2cwbyte Adxl_write
          I2cwbyte &H29
          I2cwbyte &H00
          Waitms 50
          I2cstart
          I2cwbyte Adxl_write
          I2cwbyte &H2A
          I2cwbyte &H00
          Waitms 50
          I2cstart
          I2cwbyte Adxl_write
          I2cwbyte &H2C
          I2cwbyte &HA0
          Waitms 50
          I2cstart
          I2cwbyte Adxl_write
          I2cwbyte &H2D
          I2cwbyte &H00
          Waitms 50
          I2cstart
          I2cwbyte Adxl_write
          I2cwbyte &H2E
          I2cwbyte &H00
          Waitms 50
          I2cstart
          I2cwbyte Adxl_write
          I2cwbyte &H2F
          I2cwbyte &H00
          Waitms 50
          I2cstart
          I2cwbyte Adxl_write
          I2cwbyte &H31
          I2cwbyte &H00
          Waitms 50
          I2cstart
          I2cwbyte Adxl_write
          I2cwbyte &H38
          I2cwbyte &H00
          Waitms 50
          
          
          
          Main:
          
             I2cstart
             I2cwbyte Adxl_write
             I2cwbyte &H00
             I2cstart
             I2cwbyte Adxl_read
             I2crbyte A , Nack
             Waitms 10
             I2cstart
             I2cwbyte Adxl_write
             I2cwbyte &H1E
             I2cstart
             I2cwbyte Adxl_read
             I2crbyte X , Ack
             I2crbyte Y , Ack
             I2crbyte Z , Nack
             Waitms 10
             I2cstart
             I2cwbyte Adxl_write
             I2cwbyte &H32
             I2cstart
             I2cwbyte Adxl_read
             I2crbyte X_high , Ack
             I2crbyte X_low , Ack
             I2crbyte Y_high , Ack
             I2crbyte Y_low , Ack
             I2crbyte Z_high , Ack
             I2crbyte Z_low , Nack
             I2cstop
             Waitms 10
             Home : Cls : Lcd A
             Locate 1 , 8 : Lcd "X=" ; X
             Locate 2 , 1 : Lcd "Y=" ; Y
             Locate 2 , 8 : Lcd "Z=" ; Z
             Waitms 200
             Goto Main
             End
          کوروش کبیر :
          در روزگاری که خنده مردم از زمین خوردن توست ، برخیز تا بگریانی...

          آلبرت انیشتین:
          ترجیح می دهم روی کفشانم بوده و به یاد خدا باشم تا اینکه در مسجد بوده و به یاد کفشانم باشم.

          دیدگاه


            #35
            پاسخ : شتاب سنج ADXL345 فروشگاه [فیلم+توضیحات+سوالات]

            سلام. چرا اصلا از i2c_stop استفاده نکردید؟

            دیدگاه


              #36
              پاسخ : شتاب سنج ADXL345 فروشگاه [فیلم+توضیحات+سوالات]

              سلام

              استفاده کرده بودم گفتم حذف کنم شاید جواب بگیرم
              آخه این I2C ها هر کدومش واسه خودش یه استاندارد داره
              کوروش کبیر :
              در روزگاری که خنده مردم از زمین خوردن توست ، برخیز تا بگریانی...

              آلبرت انیشتین:
              ترجیح می دهم روی کفشانم بوده و به یاد خدا باشم تا اینکه در مسجد بوده و به یاد کفشانم باشم.

              دیدگاه


                #37
                پاسخ : شتاب سنج ADXL345 فروشگاه [فیلم+توضیحات+سوالات]

                آقا کسی نبود

                مشکل من فقط تو رایت مقادیر اولیه هست کسی کمک نمی کنه؟؟؟؟؟
                کوروش کبیر :
                در روزگاری که خنده مردم از زمین خوردن توست ، برخیز تا بگریانی...

                آلبرت انیشتین:
                ترجیح می دهم روی کفشانم بوده و به یاد خدا باشم تا اینکه در مسجد بوده و به یاد کفشانم باشم.

                دیدگاه


                  #38
                  پاسخ : شتاب سنج 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

                  دیدگاه


                    #39
                    پاسخ : شتاب سنج ADXL345 فروشگاه [فیلم+توضیحات+سوالات]

                    ممنون دوست عزیز
                    فقط یه سوال؟

                    هنگام خواندن مقادیر دیتای بردارهاب x,y,z چرا فقط مقادیر بردار Y تو متغیرهای Buff ذخیره میشه ؟

                    کد:
                    Do
                     For Iby = 1 To 6
                      I2cstart
                        I2cwbyte &HA6
                        Jby = &H31 + Iby
                        I2cwbyte Jby
                      I2cstart
                        I2cwbyte &HA7
                        I2crbyte Xby , Ack
                        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
                    کوروش کبیر :
                    در روزگاری که خنده مردم از زمین خوردن توست ، برخیز تا بگریانی...

                    آلبرت انیشتین:
                    ترجیح می دهم روی کفشانم بوده و به یاد خدا باشم تا اینکه در مسجد بوده و به یاد کفشانم باشم.

                    دیدگاه


                      #40
                      پاسخ : شتاب سنج ADXL345 فروشگاه [فیلم+توضیحات+سوالات]

                      Buff یک آرایه هست و تمام مقادیر X,Y,Z در این متغییر قرار میگیره

                      دیدگاه


                        #41
                        پاسخ : شتاب سنج ADXL345 فروشگاه [فیلم+توضیحات+سوالات]

                        ببخشید دیر جواب دادم

                        ببینید مثلا شما وقتی آدرس خواندن قسمت X رو میدید بایت اول در متغیر Xby و بایت دوم در متغیر Yby ذخیره میشه درسته ؟

                        ولی شما فقط مقادیر بایت دوم رو در متغیر Buff ذخیره می کنید چرا؟

                        میشه بگید متغیر Xby چکارست؟
                        کوروش کبیر :
                        در روزگاری که خنده مردم از زمین خوردن توست ، برخیز تا بگریانی...

                        آلبرت انیشتین:
                        ترجیح می دهم روی کفشانم بوده و به یاد خدا باشم تا اینکه در مسجد بوده و به یاد کفشانم باشم.

                        دیدگاه


                          #42
                          پاسخ : شتاب سنج ADXL345 فروشگاه [فیلم+توضیحات+سوالات]

                          برای من دقت 8 بیت کافی بود به خاطر همین من 8 بیت با ارزش بیشتر رو استفاده نمی کردم.
                          البته اول می خواستم از 10 بیت استفاده کنم به خاطر همین این برنامه یکم بد نوشتم :rolleyes:

                          دیدگاه


                            #43
                            پاسخ : شتاب سنج ADXL345 فروشگاه [فیلم+توضیحات+سوالات]

                            مرسی دوست عزیز

                            پس من اگه مقدار متغیر Xby رو با Yby جمع کنم نتیجه درست میشه و مقدار دقیق تر میشه درست میگم

                            ضمنا دوست عزیز اگه فقط بایت با ارزش تر واستون مهمتره باید مقدار بایت آدرس های 33 و 35 و 37 رو بخونی پس فقط 3 بار کافیه بخونی نه 6 بار درست میگم
                            کوروش کبیر :
                            در روزگاری که خنده مردم از زمین خوردن توست ، برخیز تا بگریانی...

                            آلبرت انیشتین:
                            ترجیح می دهم روی کفشانم بوده و به یاد خدا باشم تا اینکه در مسجد بوده و به یاد کفشانم باشم.

                            دیدگاه


                              #44
                              پاسخ : شتاب سنج ADXL345 فروشگاه [فیلم+توضیحات+سوالات]

                              نوشته اصلی توسط feri_ir
                              مرسی دوست عزیز

                              پس من اگه مقدار متغیر Xby رو با Yby جمع کنم نتیجه درست میشه و مقدار دقیق تر میشه درست میگم

                              ضمنا دوست عزیز اگه فقط بایت با ارزش تر واستون مهمتره باید مقدار بایت آدرس های 33 و 35 و 37 رو بخونی پس فقط 3 بار کافیه بخونی نه 6 بار درست میگم
                              ببین آدرس های X,Y,Zآ‌ رو تو دیتاشیت نگاه کن. میبینی که یکی درمیون هست پس مجبورید همرو بخونید و ازسه تا استفاده نکنید

                              دیدگاه


                                #45
                                پاسخ : شتاب سنج 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

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

                                دیدگاه

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