|
|
  |
Нет ответа от ADXL345 |
|
|
|
May 17 2011, 14:49
|
Группа: Новичок
Сообщений: 8
Регистрация: 19-01-07
Пользователь №: 24 603

|
Добрый день. Решил освоить акселерометр ADXL345  подключил 1 и 6 ноги на +2.5в ноги 2, 4 и 5 к GND подал питание. надеялся что без конфигурации датчика по умолчанию сработают прерывания от перемещения датчика. Но на линиях int, int2 нуль. Если кто то работал с данным датчиком, подскажите пожалуйста, надо ли проводить инициализацию датчика или нет для выдачи прерываний? Спасибо
|
|
|
|
|
May 18 2011, 07:02
|
Группа: Новичок
Сообщений: 8
Регистрация: 19-01-07
Пользователь №: 24 603

|
Цитата(ilya-m @ May 17 2011, 18:56)  1. Вы забыли подключить вывод 10 на GND (или не указали это в Вашем сообщении); 2. При подаче питания регистр 0x2D POWER_CTL содержит 0x00 (см. Таблицу 12, стр. 13 Datasheet), следовательно бит MEASURE=0 - датчик находится в Standby Mode, а не в режиме измерения. Подробное описание Standby Mode см на стр.8 Datasheet. 3. Включить режим измерения можно только загрузкой требуемых значений в соответствующие регистры. 4. Кроме того, при подаче питания 0x2E INT_ENABLE содержит 0x00 (см. Таблицу 12, стр. 13 Datasheet), следовательно генерация прерываний запрещена, для настройки прерваний так же требуется соответствующим образом загрузить регистр INT_ENABLE. спасибо за информацию. подозревал подобное )-: когда читал описание регистров. Буду осваивать 2313 по части реализации SPI для управления датчиком
|
|
|
|
|
Jun 23 2011, 08:12
|
Группа: Новичок
Сообщений: 8
Регистрация: 19-01-07
Пользователь №: 24 603

|
Пытаюсь общатсья с adxl Не могу уловить назначение бита мультипл байт который ставиться в посылку адреса. Кто либо мог бы пролить свет на это тёмное для меня пятно?
При необходимости скинуть могу код и фото диаграмм обмена.
Пробую считать дивайс айди. При первых 8 клоках кстати не зависимо от команды всегда на SDO выдаётся девайди. Если первая команда чтения , то в следующиее 8 клоков за адресом выдаётся данные регистра. Считываю те в котоых по дефаулту есть какое то валеу отличное от нуля. А вот при последующий транзакциях "ч/з+мульт.байт+адрес регситра(8 клоков) (8 клоков)" выдаётся нуль.
Непонятная логика работы мульт.байт. И как чипселект влияет на передачу. Пок адля меня загадка. )-:
Сообщение отредактировал Sanchello - Jun 23 2011, 08:16
|
|
|
|
|
Jun 23 2011, 09:49
|
Группа: Новичок
Сообщений: 8
Регистрация: 19-01-07
Пользователь №: 24 603

|
Тоесть при выставленном адресе с флагом мультипл байт при чтении из регистра 0х00, в первый раз выдаётся значение регистра (девайди), а при следующих 8 клоках и не выставленным чипселектом (тобишь он всё ещё в нуле) выдаётся содержимое 0х01 и тд. Касательно записи тоже самое.
Я правильно понял?
|
|
|
|
|
Jun 23 2011, 10:23
|

Частый гость
 
Группа: Свой
Сообщений: 165
Регистрация: 30-06-08
Из: С.-Петербург
Пользователь №: 38 642

|
Цитата(Sanchello @ Jun 23 2011, 13:49)  Тоесть при выставленном адресе с флагом мультипл байт при чтении из регистра 0х00, в первый раз выдаётся значение регистра (девайди), а при следующих 8 клоках и не выставленным чипселектом (тобишь он всё ещё в нуле) выдаётся содержимое 0х01 и тд. Касательно записи тоже самое.
Я правильно понял? Да, именно так.
|
|
|
|
|
Jul 10 2011, 09:11
|
Группа: Новичок
Сообщений: 8
Регистрация: 19-01-07
Пользователь №: 24 603

|
Как то не понятно работает моя прошивка. Код для передачи 1 байта по SPI: Код SPITransfer: out USIDR, temp ldi temp, (1<<USIOIF) out USISR, temp ldi temp, (1<<USIWM0)|(1<<USICS1)|(1<<USICLK)|(1<<USITC)
SPITransfer_loop: out USICR, temp sbis USISR, USIOIF rjmp SPITransfer_loop
in temp, USIDR ret Читаю так: Код rcall CSLow
ldi temp, 0x00 ori temp, 0b10000000 rcall SPITransfer
rcall SPITransfer
rcall CSHigh В ответ должно прийти DevID. Но когда шлю одну и туже команду несколько раз то датчик перестаёт понимать команды. В понедельник выложу полный код с скринами времянок. ilya-m, Вы бы могли посказать по коду. Может сама процедура передачи не корректная? Или дать рабочий примерчик. С Вами можно связаться по icq или email? Через личку мне пока нельзя писать.
Сообщение отредактировал Sanchello - Jul 10 2011, 09:15
|
|
|
|
|
Jul 23 2011, 13:06
|
Группа: Новичок
Сообщений: 8
Регистрация: 19-01-07
Пользователь №: 24 603

|
Получается считать по очереди 3 регистра в которых есть информация отличная от нуля после подачи питания Код ;-- 1.0 ----------------------------------------------------- rcall CSLow ldi temp, 0x2c ori temp, 0b11000000 rcall SPITransfer ldi temp, 0x00 rcall SPITransfer rcall CSHigh ;-- 1.1 ----------------------------------------------------- rcall CSLow ldi temp, 0x00 ori temp, 0b11000000 rcall SPITransfer ldi temp, 0x00 rcall SPITransfer rcall CSHigh ;-- 1.2 ----------------------------------------------------- rcall CSLow ldi temp, 0x30 ori temp, 0b11000000 rcall SPITransfer ldi temp, 0x00 rcall SPITransfer rcall CSHigh  сигналы МК 1 CLK 2 DataO 3 DataIn 4 CS 0x2C 00001010 Data rate and power mode control 0x00 11100101 Device ID 0x30 00000010 Source of interrupts считывается корректно если я выставляю при чтении мультипл байт. Если выставлю МБ в нуль то достоверных данных нет. Пытаюсь проделать чтение-запись-чтение беру регистр: 0x2A 00000000 Axis control for tap/double tap. по умолчанию в нём нуль. Код ;-- 1.3 ----------------------------------------------------- rcall CSLow ldi temp, 0x2a ori temp, 0b11000000 rcall SPITransfer ldi temp, 0x00 rcall SPITransfer rcall CSHigh ;-- 1.4 ----------------------------------------------------- запись в 0x2a значения 0x01 rcall CSLow ldi temp, 0x2a ori temp, 0b01000000 rcall SPITransfer ldi temp, 0x01 rcall SPITransfer rcall CSHigh ;-- 1.5 ----------------------------------------------------- rcall CSLow ldi temp, 0x2a ori temp, 0b11000000 rcall SPITransfer ldi temp, 0x00 rcall SPITransfer rcall CSHigh при такой процедуре на линии DataIn всегда нуль. Хотя пишу единичку в младшем разряде. регистр доступен для чтения и записи. руки опускаются )-:
Сообщение отредактировал Sanchello - Jul 23 2011, 13:08
|
|
|
|
|
Sep 21 2012, 03:19
|
Группа: Новичок
Сообщений: 6
Регистрация: 14-12-07
Пользователь №: 33 300

|
Как успехи с spi? Не могу с этим датчиком по spi вообще ничего сделать. Даже deviceid считать не получается выдает FF. Пробовал законектится по i2c как только подтягивающие резисторы припаял датчик отозвался. По spi никак. Тщательно изучил даташит настроил spi как надо. Не отвечает и все. Пробовал перевести в режим трехпроводного spi тоже самое только ответ 00
|
|
|
|
|
Sep 22 2012, 08:53
|
Группа: Новичок
Сообщений: 6
Регистрация: 14-12-07
Пользователь №: 33 300

|
Видимо чип плохо припаян был. Так или иначе сегодня отвечает нормально. Вот что удалось выяснить 1. После подачи питания датчик находиться в режиме сна, чтобы его разбудить нужно отправить команду 0x2D 0x08 (запись в регистр 2D значения 08). Данные ускорения на примере оси Х по умолчания после запуска диапазон +-2g разрешение 10бит в 0x32 младшие 8 байт в 0x33 старшие 8 байт (2 младших значащие) учтите значение -10 будет выглядеть как в 0x32 =F6 в 0x33 =FF значение 10 будет выглядеть как в 0x32 =10 в 0x33 =00
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|