Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[LPC1114 + ADXL345] - brak odczytów

_kermit 28 Cze 2013 22:54 981 0
  • #1 28 Cze 2013 22:54
    _kermit
    Poziom 7  

    witam!
    Od jakiegoś czasu bawię się modułem IMU gy-80:

    [LPC1114 + ADXL345] - brak odczytów



    schemat:
    [LPC1114 + ADXL345] - brak odczytów

    podłączam go do płytki z mikrokontrolerem lpc1114 , a dokładniej:

    [LPC1114 + ADXL345] - brak odczytów

    moduł IMU jak i płytka z mikrokontrolerem zasilane są z portu USB napięciem 5V ponieważ posiadają one własne stabilizatory 3,3V, moduł posiada również translator napięć I2C z 3,3V na 5V teoretycznie mogło by to sprawiać problemy, ponieważ mikrokontroler chodzi pod napięciem 3,3v lecz komunikacja z magnetometrem oraz barometrem działa bez problemu.
    Problematyczne okazało się uruchomienie akcelerometru, ponieważ odczytywana wartośći z reejstrów w których powinny znajdować się wyniku pomiarów ciągle równe są zero.Wszystkie odczyty wysyłam przez przejsciówke UART-USB do aplikacji stworzonej w labview lub ostatnio do terminala (Hercules)ale w obu wypadkach odczytywane wyniki równe są 0.Odczytywanie sygnatury działa bez problemu, więc połączenia jak i sam układ wydaje się sprawny.Męczę się już z tym akcelerometrem od 4 dni niestety nie mogę nic wskurać. Konfiguracja układu też wydaje sie poprawna chociaż w takim stopniu aby można było odczytać jakiekolwiek wyniki. Może ktoś miał już doczynienia z tym akcelerometrem i byłby w stanie mi pomóc.

    oto kod częśc kodu odpowiedzialna za konfigurację akcelerometru oraz odczyty wyników:

    Code:


    //definicje dla akcelerometru
    #define adxl_adr 0xA6
    #define data_format_reg 0x31
    #define range_2g 0
    #define range_4g (1<<0)
    #define range_8g (1<<1)
    #define range_16g (1<<0)|(1<<1)
    #define power_reg 0x2D
    #define data_rate_reg 0x2C
    #define x_lsb_data 0x32
    #define ID_reg 0

    void accel_config(uint8_t range);
    void accel_read(uint8_t *buffer);
    uint8_t accel_read_id(void);

    // ciała funkcji
    void accel_config(uint8_t range)
    {
      I2CWriteLength = 7;
      I2CMasterBuffer[0]=adxl_adr;




      I2CMasterBuffer[1]=data_rate_reg;
      I2CMasterBuffer[2]=((1<<0)|(1<<1)|(1<<2));    //data rate 12,5hz
      I2CMasterBuffer[3]=data_format_reg;           
      I2CMasterBuffer[4]=range;
      I2CMasterBuffer[5]=power_reg;
      I2CMasterBuffer[6]=(1<<3);                    //włączenie pomiarów


      I2CEngine();
    }

    void accel_read(uint8_t *buffer)
    {
      uint8_t i;
      I2CWriteLength = 2;
      I2CReadLength = 6;
      I2CMasterBuffer[0]=adxl_adr;
      I2CMasterBuffer[1]=x_lsb_data;
      I2CMasterBuffer[2]=adxl_adr+1;
      I2CEngine();
      for(i=0;i<=5;i++)
         {
           *buffer++ = I2CSlaveBuffer[i];
         }

    }

    uint8_t accel_read_id(void)
    {
      I2CWriteLength = 2;
      I2CReadLength = 1;
      I2CMasterBuffer[0]=adxl_adr;
      I2CMasterBuffer[1]=ID_reg;
      I2CMasterBuffer[2]=adxl_adr+1;
      I2CEngine();

      return I2CSlaveBuffer[0];
    }



    w funkcji main dane wysyłane są na port szeregowy do terminala:
    Code:

    /*
    ===============================================================================
     Name        : main.c
     Author      :
     Version     :
     Copyright   : Copyright (C)
     Description : main definition
    ===============================================================================
    */

    #ifdef __USE_CMSIS
    #include "LPC11xx.h"
    #endif

    #include <cr_section_macros.h>
    #include <NXP/crp.h>

    // Variable to store CRP value in. Will be placed automatically
    // by the linker when "Enable Code Read Protect" selected.
    // See crp.h header for more information
    __CRP const unsigned int CRP_WORD = CRP_NO_CRP ;

    // TODO: insert other include files here
    #include "drivers/uart.h"
    #include "drivers/gy80.h"
    #include "redlib/stdlib.h"

      uint8_t hmc[5];
      uint8_t bmp_p[3];
      uint8_t bmp_t[3];
      uint8_t accel[5];
      int16_t data;

      char itoa_buf[10];

    int main(void)
    {
      uart_init();

      while(1)
        {
          if(uart_get_data() == 97)
            {
              uart_put_data(170);
              break;
            }
        }
      SysTick_Config(48000);
      I2CInit(0);
      //HMC_config(avg_4|datarate_70hz,gain_7,cont_mode);
      //bmp_init();
      accel_config(range_16g);
      while(global_timer<=25);

    while(1)
      {

        accel_read(accel);
        //uart_put_data(accel_read_id());
        uart_put_string("\n");
        uart_put_string("-------------");
        //put x data
        data=(accel[0]<<8 | accel[1]);
        itoa(data,itoa_buf,10);
        uart_put_string("data x");
        uart_put_string(itoa_buf);
        uart_put_string("\n");

        //put y data
        data=(accel[2]<<8 | accel[3]);
        itoa(data,itoa_buf,10);
        uart_put_string("data y: ");
        uart_put_string(itoa_buf);
        uart_put_string("\n");

        //put z data
        data=(accel[4]<<8 | accel[5]);
        itoa(data,itoa_buf,10);
        uart_put_string("data z: ");
        uart_put_string(itoa_buf);
        uart_put_string("\n");
        uart_put_string("-------------");

        global_timer=0;
        while(global_timer<=200);
      }
    }


    pozdrawiam!!!

    0 0
  Szukaj w 5mln produktów