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

 
 
> Проблемы с MAX44009
kreker
сообщение Apr 9 2016, 13:22
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 45
Регистрация: 20-09-14
Пользователь №: 82 877



Доброго дня.

Мне надо получить разовые показания освещённости с дачтика MAX44009.
Седлал всё, как описано тут.

Проблема в том, что прерывание происходит только один раз, после чего уровень на пине INT остаётся высоким постоянно (см. прикреплённые файлы i2c сессии логического анализатора и скриншоты).
И с описанием в статье не очень-то сходится: после изменения регистра конфигурации уровень на пине INT должен смениться пару раз, но этого не происходит.
Код
void setupMax44009(void)
{
  i2c_write(MAX44009_INTERRUPT_ENA_REG, 0x01); // Set ADDR: 0x01, VAL: [b7]...[b0] = 0000 0001, after RESET
  i2c_write(MAX44009_CONFIG_REG, 0xC7); // Set ADDR: 0x02, VAL: [b7]...[b0] = 1100 0111, after RESET
  i2c_write(MAX44009_THRESH_LOW_REG, 0xFF); // Set ADDR: 0x06, VAL: [b7]...[b0] = 1111 1111, after RESET
  i2c_write(MAX44009_THRESH_HIGH_REG, 0x00); // Set ADDR: 0x05, VAL: [b7]...[b0] = 0000 0000, after RESET
  i2c_write(MAX44009_THRESH_TIMER_REG, 0x00); // Set ADDR: 0x07, VAL: [b7]...[b0] = 0000 0000, after RESET
}

Прикрепленное изображение

Прикрепленное изображение

Прикрепленное изображение


Прикрепленный файл  MAX44009_i2c_session.zip ( 8.84 килобайт ) Кол-во скачиваний: 24


Может кто подсказать, что сделано не так?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
x893
сообщение Apr 9 2016, 16:53
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 333
Регистрация: 27-10-08
Из: Планета Земля
Пользователь №: 41 226



А разве не достаточно сделать ?

If the INTE bit is set to 1, then the INTS status bit is asserted if the light intensity exceeds either upper or lower threshold
limits (as specified by registers 0x05 and 0x06, respectively) for a period longer than that defined by the Threshold
Timer register (0x07). This bit resets to 0 after the host reads this register. See Table 2.
This bit is also reflected on the INT pin. When the INTS bit is set, the INT pin is asserted low, and when the INTS bit is
set to 0, the INT pin is pulled high by an external resistor.

Once this bit is set, it can be cleared either by reading the Interrupt Status register 0x00 or by writing a 0 to the Interrupt
Enable register 0x01.


и там же далее

When alerted by the INT pin going low, the master
reads the Interrupt Status register 0x00 to confirm
the source of interrupt was the IC. The master takes
appropriate action.
Go to the top of the page
 
+Quote Post
kreker
сообщение Apr 10 2016, 00:50
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 45
Регистрация: 20-09-14
Пользователь №: 82 877



Цитата(Сега @ Apr 9 2016, 21:45) *
После возникновения INT прерывания Вы выполняете чтение Interrupt Status Register?

Да, это видно на последнем скриншоте.
Цитата(x893 @ Apr 9 2016, 21:53) *
А разве не достаточно сделать ?

Извиняюсь, сделать что?
Прерывания разрешены. Когда происходит прерывание, то в регистре 0х00 значение 1. При чтении он очищается, и уровень становится высоким. Но на этом всё, прерываний больше нет.
П.С. Записанные уровни целиком не вмещаются на скриншотах. Если надо более детально - скажите. Запись I2C сессии целиком - в архиве.

Сообщение отредактировал Herz - Apr 10 2016, 07:35
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 20th August 2025 - 11:02
Рейтинг@Mail.ru


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