реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Нет ответа от ADXL345
Sanchello
сообщение May 17 2011, 14:49
Сообщение #1





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



Добрый день. Решил освоить акселерометр ADXL345

подключил 1 и 6 ноги на +2.5в
ноги 2, 4 и 5 к GND
подал питание.
надеялся что без конфигурации датчика по умолчанию сработают прерывания от перемещения датчика. Но на линиях int, int2 нуль.

Если кто то работал с данным датчиком, подскажите пожалуйста, надо ли проводить инициализацию датчика или нет для выдачи прерываний?
Спасибо
Go to the top of the page
 
+Quote Post
ilya-m
сообщение May 17 2011, 15:56
Сообщение #2


Частый гость
**

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



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.
Go to the top of the page
 
+Quote Post
Sanchello
сообщение May 18 2011, 07:02
Сообщение #3





Группа: Новичок
Сообщений: 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 для управления датчиком
Go to the top of the page
 
+Quote Post
Sanchello
сообщение Jun 23 2011, 08:12
Сообщение #4





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



Пытаюсь общатсья с adxl
Не могу уловить назначение бита мультипл байт который ставиться в посылку адреса.
Кто либо мог бы пролить свет на это тёмное для меня пятно?

При необходимости скинуть могу код и фото диаграмм обмена.

Пробую считать дивайс айди. При первых 8 клоках кстати не зависимо от команды всегда на SDO выдаётся девайди.
Если первая команда чтения , то в следующиее 8 клоков за адресом выдаётся данные регистра. Считываю те в котоых по дефаулту есть какое то валеу отличное от нуля. А вот при последующий транзакциях "ч/з+мульт.байт+адрес регситра(8 клоков) (8 клоков)" выдаётся нуль.

Непонятная логика работы мульт.байт. И как чипселект влияет на передачу. Пок адля меня загадка. )-:

Сообщение отредактировал Sanchello - Jun 23 2011, 08:16
Go to the top of the page
 
+Quote Post
ilya-m
сообщение Jun 23 2011, 08:53
Сообщение #5


Частый гость
**

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



Бит Multi-Byte предназначен для выполнения конвейерных операций чтения/записи, то есть в команде Вы указываете адрес первого байта, с которым будете производить действие чтения/записи, вслед за посылкой команды продолжаете тактировать ADXL по линии CLK за первые 8-мь тактов выполняется выбранное действие с регистром, адрес которого Вы указали в команде, затем ADXL выполняет автоинкремент адреса и за каждые следующие 8 тактов выполняет аналогичное действие (запись или чтение) с регистром по вычисленному адресу. Действие команды завершается переводом CS в высокое состояние.
Go to the top of the page
 
+Quote Post
Sanchello
сообщение Jun 23 2011, 09:49
Сообщение #6





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



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

Я правильно понял?
Go to the top of the page
 
+Quote Post
ilya-m
сообщение Jun 23 2011, 10:23
Сообщение #7


Частый гость
**

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



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

Я правильно понял?


Да, именно так.
Go to the top of the page
 
+Quote Post
Sanchello
сообщение Jul 10 2011, 09:11
Сообщение #8





Группа: Новичок
Сообщений: 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
Go to the top of the page
 
+Quote Post
Sanchello
сообщение Jul 23 2011, 13:06
Сообщение #9





Группа: Новичок
Сообщений: 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
Go to the top of the page
 
+Quote Post
ilya-m
сообщение Jul 23 2011, 13:39
Сообщение #10


Частый гость
**

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



Мой Скайп login - ilya-1m; ICQ: 414241764.

Сообщение отредактировал ilya-m - Jul 23 2011, 13:42
Go to the top of the page
 
+Quote Post
Толян 21
сообщение Sep 21 2012, 03:19
Сообщение #11





Группа: Новичок
Сообщений: 6
Регистрация: 14-12-07
Пользователь №: 33 300



Как успехи с spi? Не могу с этим датчиком по spi вообще ничего сделать. Даже deviceid считать не получается выдает FF. Пробовал законектится по i2c как только подтягивающие резисторы припаял датчик отозвался. По spi никак. Тщательно изучил даташит настроил spi как надо. Не отвечает и все. Пробовал перевести в режим трехпроводного spi тоже самое только ответ 00
Go to the top of the page
 
+Quote Post
Толян 21
сообщение Sep 22 2012, 08:53
Сообщение #12





Группа: Новичок
Сообщений: 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
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 08:54
Рейтинг@Mail.ru


Страница сгенерированна за 0.01439 секунд с 7
ELECTRONIX ©2004-2016