VLADONix | Дата: Воскресенье, 06.10.2013, 03:24 | Сообщение # 1 |
 1.5 Вольт
Группа: Пользователи
Сообщений: 4
Репутация: 0
Статус: Offline
| Всем привет. Понадобился акселерометр для проекта, ну а я покупать втридорога готовые модули не привык. Решил спаять своими руками. ПРЕДУПРЕЖДАЮ тема для тех, кто умеет работать паяльником. Что понадобится: 1. микросхема LIS302DL (купил у себя в городе за 50р. , но кое где цена превышает 200 р. и получается не очень выгодно); 2. конденсатор 0.1 мкф
Микросхема имеет 14 ног. Ножки 8, 9, 12 я не использовал. Пользуемся статьей http://easystm32.ru/sensors/49-lis302dl , узнаём обозначение ножек.
I. Пайка контактов на LIS302DL Т. к. микросхема имеет неудобный корпус (LGA14) и я не имел при себе фена для пайки, пришлось удлинять контакты: Сделать это на самом деле не сложно : 1. Лудим ножки чипа; 2. Зажимаем чип каким-нибудь удобным образом; 3. Лудим жало паяльника( будет удобно, если получится так олово образует "сосульку"); 4. Прикладываем тонкий проводок к ножке и быстро касаемся кончиком олова; 6. Не забываем убрать флюс (я не парюсь и растворяю обычным бензином); 7. Прозваниваем каждую ножку (некоторые могут "пищать", например, ножки 2 и 5, т.к обозначают одно и то же GND-GND).
II. Изготовление печатной платы (для удобства в подключении) У меня получилось так : Вот кому надо в формате .lay
III. Пайка чипа на плату Ну тут ни чего хитрого нет. Конденсатор припаян внизу.
IV. Программа
Не забудьте подтянуть линии I2C резисторами по 10к Ом к питанию.
Код #include <Wire.h>
#define i2cID 0x1D
//TWI (I2C) sketch to communicate with the LIS302DL accelerometer - Modified and tested Ben Gatti - 6/9/2008 //http://www.st.com/stonline/products/literature/ds/12726.pdf //Note 5.6K pullup resister on data lines. //Device is 3 volt was tested at 5 volts no level shifting. //Reference claims 6 volts is pin max.
//Modified from // TWI (I2C) sketch to communicate with the LIS3LV02DQ accelerometer //http://www.nearfuturelaboratory.com/2007/01/11/arduino-and-twi/ //Modified code from http://research.techkwondo.com/blog/julian/279 //Thanks Julian.
// Using the Wire library (created by Nicholas Zambetti) // http://wiring.org.co/reference/libraries/Wire/index.html // On the Arduino board, Analog In 4 is SDA, Analog In 5 is SCL // These correspond to pin 27 (PC4/ADC4/SDA) and pin 28 (PC5/ADC5/SCL) on the Atmega8 // The Wire class handles the TWI transactions, abstracting the nitty-gritty to make // prototyping easy. void setup()
{ Wire.begin(); // join i2c bus (address optional for master) Serial.begin(57600); Serial.println("Wire.begin"); Wire.beginTransmission(i2cID); Wire.send(0x21); // CTRL_REG2 (21h) Wire.send(B01000000); //SPI 4/3 wire //1=ReBoot - reset chip defaults //n/a //filter off/on //filter for freefall 2 //filter for freefall 1 //filter freq MSB //filter freq LSB - Hipass filter (at 400hz) 00=8hz, 01=4hz, 10=2hz, 11=1hz (lower by 4x if sample rate is 100hz) Wire.endTransmission();
Wire.beginTransmission(i2cID); Wire.send(0x20); // CTRL_REG1 (20h) Wire.send(B01000111); //sample rate 100/400hz //power off/on //2g/8g //self test //self test //z enable //y enable //x enable Wire.endTransmission();
}
void loop() {
#define outXhigh 0x29 #define outYhigh 0x2B #define outZhigh 0x2D #define statusReg 0x27
boolean goodRead; goodRead = false;
//----------Status Register----------------------- byte status; status = B00000000; //
//------------------------------- Wire.beginTransmission(i2cID); Wire.send(statusReg); Wire.endTransmission(); Wire.requestFrom(i2cID, 1); if(Wire.available()) { status = Wire.receive(); }
//----------X Values----------------------- byte x_val;
//------------------------------- Wire.beginTransmission(i2cID); Wire.send(outXhigh); Wire.endTransmission(); Wire.requestFrom(i2cID, 1); if(Wire.available()) { x_val = Wire.receive(); }
//----------Y Values----------------------- byte y_val;
//------------------------------- Wire.beginTransmission(i2cID); Wire.send(outYhigh); Wire.endTransmission(); Wire.requestFrom(i2cID, 1); if(Wire.available()) { y_val = Wire.receive(); } //----------Z Values----------------------- byte z_val;
//------------------------------- Wire.beginTransmission(i2cID); Wire.send(outZhigh); Wire.endTransmission(); Wire.requestFrom(i2cID, 1); if(Wire.available()) { z_val = Wire.receive(); goodRead=true; } //------------------------------- if (goodRead==true) {
//Serial.print("x_val_l= "); Serial.println(x_val_l, DEC); //Serial.print("x_val_h= "); Serial.println(x_val_h, DEC); //Serial.print("x_val= "); Serial.println(x_val, DEC);
//Serial.print("y_val_l= "); Serial.println(y_val_l, DEC); //Serial.print("y_val_h= "); Serial.println(y_val_h, DEC); //Serial.print("y_val= "); Serial.println(y_val, DEC);
//Serial.print("z_val_l= "); Serial.println(z_val_l, DEC); //Serial.print("z_val_h= "); Serial.println(z_val_h, DEC); Serial.print("status "); Serial.println(status, BIN); Serial.print(" val= "); Serial.print(x_val, DEC); Serial.print(":"); Serial.print(y_val, DEC); Serial.print(":"); Serial.println(z_val, DEC); } else Serial.print("no data"); delay(100); }
Спасибо. Кому что не понятно спрашивайте.
Добавлено (06.10.2013, 03:24) --------------------------------------------- Не судите строго - первая тема.
|
|
| |