Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Arduino Lab Akcelerometr MMA7455

Podobne prezentacje


Prezentacja na temat: "Arduino Lab Akcelerometr MMA7455"— Zapis prezentacji:

1 Arduino Lab Akcelerometr MMA7455
Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska

2 Akcelerometr cyfrowy MMA7455
Trzy osie XYZ ±2g/±4g/±8g Wyjście cyfrowe (10-bitowe) I²C/SPI Obudowa LGA-14 3mm x 5mm x 1mm Zygmunt Kubiak

3 Akcelerometr cyfrowy MMA7455
Autotest dla osi Z Zasilanie 2,4V – 3,6V Wykrywanie przekroczenia zadanego poziomu przyspieszenia i swobodnego spadania Zygmunt Kubiak

4 Akcelerometr cyfrowy MMA7455
Uproszczony model fizyczny sensora przyspieszeń Sensor zbudowany jest z elementów stałych i ruchomych Od strony elektrycznej sensor tworzy układ zmiennych pojemności (półmostek) Zygmunt Kubiak

5 Akcelerometr cyfrowy MMA7455
Uproszczony model fizyczny sensora przyspieszeń Sensor zbudowany jest z elementów stałych i ruchomych Od strony elektrycznej sensor tworzy układ zmiennych pojemności (półmostek) Zygmunt Kubiak

6 Akcelerometr cyfrowy MMA7455
Wykonanie Sensor zbudowany jest z Od strony elektrycznej sensor Zygmunt Kubiak

7 Akcelerometr cyfrowy MMA7455
Interfejs I²C Sensor zbudowany jest z Od strony elektrycznej sensor Zygmunt Kubiak

8 Akcelerometr cyfrowy MMA7455
Interfejs I²C (adres układu 0x1D) Sensor zbudowany jest z Od strony elektrycznej sensor Zygmunt Kubiak

9 Akcelerometr cyfrowy MMA7455
Interfejs I²C (adres układu 0x1D) Sensor zbudowany jest z Od strony elektrycznej sensor Zygmunt Kubiak

10 Akcelerometr cyfrowy MMA7455
Interfejs SPI Sensor zbudowany jest z Od strony elektrycznej sensor Zygmunt Kubiak

11 Akcelerometr cyfrowy MMA7455
Interfejs SPI Zygmunt Kubiak

12 Akcelerometr cyfrowy MMA7455
Interfejs SPI Sensor zbudowany jest z Od strony elektrycznej sensor Zygmunt Kubiak

13 Akcelerometr cyfrowy MMA7455
Moduł z układem MMA7455 Sensor zbudowany jest z Od strony elektrycznej sensor Zygmunt Kubiak

14 Akcelerometr cyfrowy MMA7455
Połączenie z Arduino (I²C) Sensor zbudowany jest z !!! Uwaga rezystory podciągające są już na płytce Zygmunt Kubiak

15 Akcelerometr cyfrowy MMA7455
Sensor zbudowany jest z Od strony elektrycznej sensor Zygmunt Kubiak

16 Akcelerometr cyfrowy MMA7455
Program 1 (interfejs I²C) // MMA7455 Accelerometer // // // By arduino.cc user "Krodal". // May // Open Source / Public Domain // // Fixes to union and type conversions by Arduino.cc user "Afroviking" // August // // Using Arduino // It will not work with an older version, since Wire.endTransmission()  // uses a parameter to hold or release the I2C bus. // Zygmunt Kubiak

17 Akcelerometr cyfrowy MMA7455
Program 1 (interfejs I²C) cd // Documentation: //     - The Freescale MMA7455L datasheet  //     - The AN3468 Application Note (programming). //     - The AN3728 Application Note (calibrating offset). //  // The MMA7455 can be used by writing and reading a single byte,  // but it is also capable to read and write multiple bytes. // // The accuracy is 10-bits. //  Zygmunt Kubiak

18 Akcelerometr cyfrowy MMA7455
Program 1 (interfejs I²C) cd #include <Wire.h> // Nazwy rejestrów zgodne z dokumentacją // Rejestr 0x1C czasami nazywany jest 'PW', a czasami 'PD'. // The two reserved registers can not be used. #define MMA7455_XOUTL 0x00      // Read only, Output Value X LSB #define MMA7455_XOUTH 0x01     // Read only, Output Value X MSB #define MMA7455_YOUTL 0x02      // Read only, Output Value Y LSB #define MMA7455_YOUTH 0x03     // Read only, Output Value Y MSB #define MMA7455_ZOUTL 0x04      // Read only, Output Value Z LSB #define MMA7455_ZOUTH 0x05     // Read only, Output Value Z MSB Zygmunt Kubiak

19 Akcelerometr cyfrowy MMA7455
Program 1 (interfejs I²C) cd #define MMA7455_XOUT8 0x06       // Read only, Output Value X 8 bits #define MMA7455_YOUT8 0x07       // Read only, Output Value Y 8 bits #define MMA7455_ZOUT8 0x08       // Read only, Output Value Z 8 bits #define MMA7455_STATUS 0x09     // Read only, Status Register #define MMA7455_DETSRC 0x0A     // Read only, Detection Source Register #define MMA7455_TOUT 0x0B       // Temperature Output Value (Optional) #define MMA7455_RESERVED1 0x0C   // Reserved #define MMA7455_I2CAD 0x0D       // Read/Write, I2C Device Address #define MMA7455_USRINF 0x0E     // Read only, User Information (Optional) #define MMA7455_WHOAMI 0x0F     // Read only, "Who am I" value (Optional) #define MMA7455_XOUT8 0x06       // Read only, Output Value X 8 bits #define MMA7455_YOUT8 0x07       // Read only, Output Value Y 8 bits #define MMA7455_ZOUT8 0x08       // Read only, Output Value Z 8 bits #define MMA7455_STATUS 0x09     // Read only, Status Register #define MMA7455_DETSRC 0x0A     // Read only, Detection Source Register #define MMA7455_TOUT 0x0B       // Temperature Output Value (Optional) #define MMA7455_RESERVED1 0x0C  // Reserved #define MMA7455_I2CAD 0x0D       // Read/Write, I2C Device Address #define MMA7455_USRINF 0x0E     // Read only, User Information (Optional) #define MMA7455_WHOAMI 0x0F     // Read only, "Who am I" value (Optional) Zygmunt Kubiak

20 Akcelerometr cyfrowy MMA7455
#define MMA7455_XOFFL 0x10       // Read/Write, Offset Drift X LSB #define MMA7455_XOFFH 0x11      // Read/Write, Offset Drift X MSB #define MMA7455_YOFFL 0x12      // Read/Write, Offset Drift Y LSB #define MMA7455_YOFFH 0x13      // Read/Write, Offset Drift Y MSB #define MMA7455_ZOFFL 0x14      // Read/Write, Offset Drift Z LSB #define MMA7455_ZOFFH 0x15      // Read/Write, Offset Drift Z MSB #define MMA7455_MCTL 0x16       // Read/Write, Mode Control Register  #define MMA7455_INTRST 0x17     // Read/Write, Interrupt Latch Reset #define MMA7455_CTL1 0x18       // Read/Write, Control 1 Register #define MMA7455_CTL2 0x19       // Read/Write, Control 2 Register #define MMA7455_LDTH 0x1A       // Read/Write, Level Detection Threshold Limit Value #define MMA7455_PDTH 0x1B      // Read/Write, Pulse Detection Threshold Limit Value #define MMA7455_PD 0x1C         // Read/Write, Pulse Duration Value #define MMA7455_LT 0x1D         // Read/Write, Latency Time Value (between pulses) #define MMA7455_TW 0x1E         // Read/Write, Time Window for Second Pulse Value #define MMA7455_RESERVED2 0x1F  // Reserved Program 1 (interfejs I²C) cd Zygmunt Kubiak

21 Akcelerometr cyfrowy MMA7455
Program 1 (interfejs I²C) cd // Definicje bitów, wprowadzają zmianę  // numeru bitu w definicję binarną. // Używając numer bitu, programowanie MMA7455  // przypomina mikrokontroler AVR. // Użycie "(1<<X)", lub "_BV(X)",  // w Arduino powoduje ustawienie "bit(X)”. #define MMA7455_D #define MMA7455_D #define MMA7455_D #define MMA7455_D #define MMA7455_D #define MMA7455_D #define MMA7455_D #define MMA7455_D7 7 Zygmunt Kubiak

22 Akcelerometr cyfrowy MMA7455
Program 1 (interfejs I²C) cd // Rejestr stanu #define MMA7455_DRDY MMA7455_D0 #define MMA7455_DOVR MMA7455_D1 #define MMA7455_PERR MMA7455_D2 // Rejestr sterowania trybem #define MMA7455_MODE0 MMA7455_D0 #define MMA7455_MODE1 MMA7455_D1 #define MMA7455_GLVL0 MMA7455_D2 #define MMA7455_GLVL1 MMA7455_D3 #define MMA7455_STON MMA7455_D4 #define MMA7455_SPI3W MMA7455_D5 #define MMA7455_DRPD MMA7455_D6 Zygmunt Kubiak

23 Akcelerometr cyfrowy MMA7455
Program 1 (interfejs I²C) cd // Rejestr sterujący 1 #define MMA7455_INTPIN MMA7455_D0 #define MMA7455_INTREG0 MMA7455_D1 #define MMA7455_INTREG1 MMA7455_D2 #define MMA7455_XDA MMA7455_D3 #define MMA7455_YDA MMA7455_D4 #define MMA7455_ZDA MMA7455_D5 #define MMA7455_THOPT MMA7455_D6 #define MMA7455_DFBW MMA7455_D7 // Rejestr sterujący 2 #define MMA7455_LDPL MMA7455_D0 #define MMA7455_PDPL MMA7455_D1 #define MMA7455_DRVO MMA7455_D2 Zygmunt Kubiak

24 Akcelerometr cyfrowy MMA7455
Program 1 (interfejs I²C) cd // Interrupt Latch Reset Register #define MMA7455_CLR_INT1 MMA7455_D0 #define MMA7455_CLR_INT2 MMA7455_D1 // Detection Source Register #define MMA7455_INT1 MMA7455_D0 #define MMA7455_INT2 MMA7455_D1 #define MMA7455_PDZ MMA7455_D2 #define MMA7455_PDY MMA7455_D3 #define MMA7455_PDX MMA7455_D4 #define MMA7455_LDZ MMA7455_D5 #define MMA7455_LDY MMA7455_D6 #define MMA7455_LDX MMA7455_D7 // I2C Device Address Register #define MMA7455_I2CDIS MMA7455_D7 // Default I2C address for the MMA7455 #define MMA7455_I2C_ADDRESS x1D Zygmunt Kubiak

25 Akcelerometr cyfrowy MMA7455
Program 1 (interfejs I²C) cd // When using an union for the registers and  // the axis values, the byte order of the accelerometer // should match the byte order of the compiler and AVR chip. // Both have the lower byte at the lower address,  // so they match. // This union is only used by the low level functions. typedef union xyz_union {   struct   {     uint8_t x_lsb;     uint8_t x_msb;     uint8_t y_lsb;     uint8_t y_msb;     uint8_t z_lsb;     uint8_t z_msb;   } reg;   struct    {     uint16_t x;     uint16_t y;     uint16_t z;   } value; }; Zygmunt Kubiak

26 Akcelerometr cyfrowy MMA7455
Program 1 (interfejs I²C) cd   int led = 13; void setup() {         int error;   uint8_t c;   Serial.begin(9600);   Serial.println("Freescale MMA7455 accelerometer");   Serial.println("May 2012");    // Initialize the 'Wire' class for I2C-bus communication.   Wire.begin();   // Initialize the MMA7455, and set the offset.   error = MMA7455_init();   if (error == 0)     Serial.println("The MMA7455 is okay");   else     Serial.println("Check your wiring !"); Zygmunt Kubiak

27 Akcelerometr cyfrowy MMA7455
Program 1 (interfejs I²C) cd   // Read the Status Register   MMA7455_read(MMA7455_STATUS, &c, 1);   Serial.print("STATUS : ");   Serial.println(c,HEX);   // Read the "Who am I" value   MMA7455_read(MMA7455_WHOAMI, &c, 1);   Serial.print("WHOAMI : ");   Serial.println(c,HEX);   // Read the optional temperature output value (I always read zero)   MMA7455_read(MMA7455_TOUT, &c, 1);   Serial.print("TOUT : ");   Serial.println(c,DEC);     pinMode(led, OUTPUT);  } Zygmunt Kubiak

28 Akcelerometr cyfrowy MMA7455
Program 1 (interfejs I²C) cd void loop() {   uint16_t x,y,z, error;   double dX,dY,dZ;   // The function MMA7455_xyz returns the 'g'-force    // as an integer in 64 per 'g'.   // set x,y,z to zero (they are not written in case of an error).   x = y = z = 0;   error = MMA7455_xyz(&x, &y, &z); // get the accelerometer values.   dX = (int16_t) x / 64.0;          // calculate the 'g' values.   dY = (int16_t) y / 64.0;   dZ = (int16_t) z / 64.0; Zygmunt Kubiak

29 Akcelerometr cyfrowy MMA7455
Program 1 (interfejs I²C) cd   Serial.print("error = ");   Serial.print(error, DEC);   Serial.print(", xyz g-forces = ");   Serial.print(dX, 3);   Serial.print(", ");   Serial.print(dY, 3);   Serial.print(", ");   Serial.print(dZ, 3);   Serial.println(""); Zygmunt Kubiak

30 Akcelerometr cyfrowy MMA7455
Program 1 (interfejs I²C) cd   if (dZ < 0.8)   {       digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)   }   else   {     digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW   }   delay(100); } Zygmunt Kubiak

31 Dziękuję Zygmunt Kubiak


Pobierz ppt "Arduino Lab Akcelerometr MMA7455"

Podobne prezentacje


Reklamy Google