1 (09-04-2018 17:45:20 отредактировано TrialZuki)

Тема: I2C адрес устройства 0b10010000

Помогите разобраться с особенностями указания адреса i2c устройства из canny. Зачем нужно сдвигать на << 1?

Использую  PCF8591 с адресом фактическим адресом 0b10010000 - какое значение я должен указать как адрес устройства?

2

Re: I2C адрес устройства 0b10010000

Вопрос адреса i2c немного обсуждался тут: http://forum.canny.ru/viewtopic.php?pid=5645#p5645

Особенность нашего регистра. Адрес устройства i2c начинает задаваться с бита 1 (а еще есть бит 0 - R/W). По этому нужно сдвигать на << 1.

3

Re: I2C адрес устройства 0b10010000

Да - про это и вопрос, получается 0b00100001 единичка переползает на r/w и кроме того получается нечетное число. По вики написано что числа должны быть четные. В двойне непонятно как быть с адресом.

Пожалуйста уточните какое именно число нужно указывать для canny в качестве адреса если чистый адрес устройства 0b1001000x?

4

Re: I2C адрес устройства 0b10010000

Фактический адрес PCF8591 состоит из 7 бит и выглядит 0b01001000=0x48 (посмотрите внимательнее на рисунок). Именно это значение, обычно, указывается в документации в качестве адреса устройства. 8й, младший бит - R/W.
В данном конкретном случае, в регистр адреса i2c нужно записать значение 0b10010000=0x90.

Вложений в сообщении

i2c_address.PNG, 8.08 кб, 663 x 145
i2c_address.PNG 8.08 кб, скачивался 322 раз, последний раз 2018-04-10 

5

Re: I2C адрес устройства 0b10010000

Вот теперь с адресом и сдвигом все понятно - спасибо за разъяснение!

Есть еще вопрос - как должна выглядит диаграмма чтобы получить данные в буфер чтения для PCF8591

Для конфигурации PCF8591 нужно послать
10010000
01000000

Для чтения из него
10010001

После того как PCF8591 будет сконфигурировано - канни самостоятельно начнет посылать 10010001?
Достаточно включить "регистр начала передачи I2C" и ждать готовности буфера приема?

6

Re: I2C адрес устройства 0b10010000

Все низкоуровневые действия берет на себя драйвер контроллера.
Особенности отправки и приема данных по i2c кратко описаны в wiki.
Также, похожий пример работы с i2c-устройством был рассмотрен здесь.