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

 
 
> Проблемы с 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
Ответов (1 - 6)
segment
сообщение Apr 9 2016, 16:45
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 352
Регистрация: 10-08-06
Из: Санкт-Петербург
Пользователь №: 19 471



После возникновения INT прерывания Вы выполняете чтение Interrupt Status Register?
Go to the top of the page
 
+Quote Post
x893
сообщение Apr 9 2016, 16:53
Сообщение #3


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

Группа: Свой
Сообщений: 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
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 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
RabidRabbit
сообщение Apr 10 2016, 10:25
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 397
Регистрация: 3-12-09
Из: Россия, Москва
Пользователь №: 54 040



Вас не смущает вот это:
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.

При том, что в Вашем коде:
i2c_write(MAX44009_THRESH_TIMER_REG, 0x00); // Set ADDR: 0x07, VAL: [b7]...[b0] = 0000 0000, after RESET

И при том, что в даташите:
POWER-ON RESET STATE для регистра Threshold Timer = 0xFF

И далее:
The value in this register sets the time used to control this delay. A value of 0x00 in this register (with INTE bit = 1 in the
Interrupt Enable register) configures the IC to assert the interrupt pin as soon as the light level exceeds either threshold
.
Time delay = (128xT7 + 64xT6 + 32xT5 + 16xT4 + 8xT3 + 4xT2 + 2xT1 + T0) x 100ms.

По-моему, чип всё делает в соответствии с документацией sm.gif
Go to the top of the page
 
+Quote Post
kreker
сообщение Apr 10 2016, 11:25
Сообщение #6


Участник
*

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



@RabidRabbit
Из статьи.
Step 2. Configure the part for an instantaneous and forced interrupt trigger at the end of conversion.
Write lower threshold high byte = 1111 1111.
Write higher threshold high byte = 0000 0000.
Write threshold timer = 0000 0000.

Цитата
По-моему, чип всё делает в соответствии с документацией.

А для не понимающих как это объясняет проблему с только одним прерыванием можно, пожалуйста, яснее?
Прерываний нет, потому что значение одно и тоже или что?
Go to the top of the page
 
+Quote Post
RabidRabbit
сообщение Apr 10 2016, 14:11
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 397
Регистрация: 3-12-09
Из: Россия, Москва
Пользователь №: 54 040



Я Вас неправильно понял, подумал, что постоянно выставлен сигнал прерывания.
В таком случае, я бы попробовал использовать автоматический режим, и придерживаться диаграммы со страницы 14 даташита.
Go to the top of the page
 
+Quote Post

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

 


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


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