LinkedIn YouTube Facebook
Szukaj

Newsletter

Proszę czekać.

Dziękujemy za zgłoszenie!

Wstecz
Artykuły

STM32Butterfly2 i akcelerometr LIS35D

 

 

W ostatnim czasie bardzo dużą popularność zdobyły układy MEMS. Szczególnie widoczne są one w postaci akcelerometrów montowanych w telefonach komórkowych, umożliwiając automatyczną zmianę orientacji, obrazu i wykrywanie gestów w sterowaniu aplikacjami. Układy te można także zastosować we własnych aplikacjach.

Poniższy projekt przedstawia obsługę akcelerometru LIS35DE, jest on dostępny także w postaci modułu KAmodMEMS2 (fotografia 1). Działanie aplikacji polega na pomiarze pozycji w osiach X, Y i Z oraz prezentacji jej na wyświetlaczu pochodzącego z telefonu Nokia 3310 (w tym przypadku moduł KAmodLCD1). Komunikacja z układem LIS35DE może być realizowana przez magistrale I2C lub SPI, w przedstawionej aplikacji została wykorzystana ta pierwsza.

 

Fot. 1. Wygląd modułu KAmodMEMS2

Fot. 1. Wygląd modułu KAmodMEMS2

 

 

Rys. 2. Schemat elektryczny modułu KAmodMEMS2

Rys. 2. Schemat elektryczny modułu KAmodMEMS2

 

 

Projekt został przygotowany dla zestawu STM32Butterfly2 oraz STM32Butterfly. W obu przypadkach używane elementy są w identycznej konfiguracji, w związku z tym aplikacja nie wymaga wprowadzania dodatkowych zmian przy przejściu na drugą platformę. Projekt do poprawnego działania wymaga modułów: KAmodeMEMS2 i KAmodLCD1. Połączenie ich do zestawu ewaluacyjnego zostało przedstawione na rysunku 3. Układ LIS35D wymaga zasilania z zakresu 2,16V do 3,6V, w związku z tym zasilanie modułu nie powinno być pobierane ze złącza magistrali I2C, tylko ze złącza z wyprowadzonymi liniami portów.

 

Rys. 3. Zalecany sposób podłączenia modułu KAmodMEMS2 (z układem LIS35D) do STM32Butterfly2

Rys. 3. Zalecany sposób podłączenia modułu KAmodMEMS2 (z układem LIS35D) do STM32Butterfly2

 

 

Poniżej przedstawiono program główny aplikacji prezentującej pozycję modułu KAmodMEMS2.

int main(void)
{

    //Initialize system timer
    time_init();
    //Initialize nokia display
    nlcd_init();
    //Initialize the i2c module
    i2cm_init(I2C_SPEED);
    //Initialize temp controller
    int res = lis35_init();
    if(res<0)
    {
        print_error(res);
        for(;;);    //Fail never end loop
    }
    else
    {
        nlcd_put_string( "www.boff.pl", 0, 0 );
    }
    for(pos_t x=0,y=0,z=0;;)
    {        
	res = lis35_get(&x,&y,&z);
        if(res%gt;=0)
        {
           print_value(x,y,z);
        }
        else
        {
          print_error(res);
          for(;;);      //Failed infinite loop
        }
        wait_ms(MEASURE_DELAY_TIME);
    }
    return 0;
}