ZL31ARM: wskaźnik przyspieszenia 3D z czujnikiem MEMS LIS35
Konfiguracja interfejsu SPI:
void SPI_Configuration(void){
SPI_InitTypeDef SPI_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
// Enable SPI1 and GPIO clocks
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1 | RCC_APB2Periph_GPIOA, ENABLE);
// Configure SPI1 pins: SCK, MISO and MOSI
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
// Configure I/O for Flash Chip select
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_CS;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIO_CS, &GPIO_InitStructure);
// SPI1 configuration
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial = 7;
SPI_Init(SPI1, &SPI_InitStructure);
// Enable SPI1
SPI_Cmd(SPI1, ENABLE);
}
Po wykonaniu powyższych czynności można przetestować poprawność działania prostego programu wyświetlającego 3 ramki w różnych kolorach:
#include "board.h"
#include "main.h"
#include "lis35.h"
#include "stm32f10x.h"
int main(void){
RCC_Configuration();
GPIO_Configuration();
NVIC_Configuration();
// Inicjalizacja wyswietlacza LCD
InitLcdNokia();
// Czysc ekran
LCDClearScreen(0x0);
// Konfiguracja SPI i inicjalizacja MEMS
SPI_Configuration();
if (InitializeLIS35() == LIS35_ERROR)
{
LCDClearScreen(0xF);
while(1);
}
// Rysuj ramki w 3 kolorach
drawRectangle(-40, -50, -20, 50, RED, 0);
drawRectangle(-10, -50, 10, 50, BLUE, 0);
drawRectangle( 20, -50, 40, 50,GREEN, 0);
//Wyswietlenie oznaczen osi
LCDPutChar('X',120, 35, 0, 0xFFF, 0x00);
LCDPutChar('Y',120, 65, 0, 0xFFF, 0x00);
LCDPutChar('Z',120, 95, 0, 0xFFF, 0x00);
// Regulacja kontrastu
adjustContrast();
return 0;
}
Wskaźnik przyśpieszenia 3D
Do poprawnego zaimplementowania programowej obsługi układu MEMS należy wiedzieć jak wygląda rozkład osi pomiarowych i na jakim mniej więcej poziomie utrzymują się wartości w odniesieniu do przyśpieszenia ziemskiego (g = 9,81 m/s2). W celu ułatwienia zapoznania się z wyżej określonym został zrealizowany podprogram rysujący słupki, których wysokość jest proporcjonalna do mierzonych wartości, a pod spodem wyświetlane są surowe wartości typu signed char, tzn. odczytane bezpośrednio z rejestrów OutX..Z bez jakiegokolwiek przeliczenia (fotografia 6). Kierunek osi układu OXYZ przedstawiono na fotografii 7.
Fot. 6. Efekt działania przykładowego programu


Koniec ery defiladowej. Cykl życia technologii na froncie skrócił się do kilku tygodni
Czym jest czytnik e-booków i jak działa?
O suwerenności Europy mówią gen. Sławomir Żakowski, gen. Paweł Bielawny, dr. Jacek Pawlak, Adam Cudny i dr Daniel Więzik 




