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


Technologie End of Life i bezpieczeństwo sieci – wyzwania Europy związane z tzw. długiem technologicznym
Najczęstsze błędy firm przy wyborze dostawcy energii i jak ich uniknąć
Fotorezystor, czyli czujnik światła dwojakiego działania. Przykład innowacji w automatyce i elektronice możliwej dzięki technologii fotooporników 



