• Внешний USB-ЦАП-Аудиопроцессор CDD-010 можно купить

управление ADAU1701 с помощью RaspberryPi по i2c

Efremoff

New member
Ок. В данном примере я управляю включением-выключением светодиода, подключенного в GPIO адау. Управление осуществлялось через DC Source, и адрес управляющего элемента в адау был - 0x0014.

Block Write
Time: 12:36:40 - 251ms
IC: IC 1
Cell Name: DC1
Param Name: DCInpAlg145X1value
Param Address: 0x0014
Bytes: 4
Param Data:
0x00, 0x00, 0x00, 0x01
Time: 12:36:40 - 251ms

IC: IC 1
Cell Name: DC1
Param Name: DCInpAlg145X1value
Param Address: 0x0014
Bytes: 4
Param Data:
0x00, 0x00, 0x00, 0x01

Данный пример включает и выключает DC-source (и соответсвенно светодиод подключенный к одной из ног MP) c интервалом раз в секунду.

i2c_msg.write(0x38, [0x00, 0x14, 1, 0, 0, 0]) - где 0x38 - это адрес адау со смещением (в сигмастудии этот адрес виден как 0x70), и потом идет массив где первые два элемента это смещение (регистр) записанный в виде двух отдельных байтов, и потом 4 байта, которые отвечают за управление регистра. от младшего байта к старшему.

А читать я не пробовал, мне это не зачем.

Код:
import smbus2
import time
 
i2c=smbus2.SMBus(1)
while True:
    msg = smbus2.i2c_msg.write(0x38, [0x00, 0x14, 0, 0, 0, 0])
    i2c.i2c_rdwr(msg)
    time.sleep(1)
    msg = smbus2.i2c_msg.write(0x38, [0x00, 0x14, 1, 0, 0, 0])
    i2c.i2c_rdwr(msg)
    time.sleep(1)
 

igrushkin

Well-known member
один и тот же запрос регистра всегда выдаёт разные результаты.
на ардуине это означает, что нет связи. Никаикх ошибок не бует, просто фигня в "содержании" регистров
Возьмите ардуинокод AD и перепишите его под питон
 

alexander_v

Member
на ардуине это означает, что нет связи. Никаикх ошибок не бует, просто фигня в "содержании" регистров
Возьмите ардуинокод AD и перепишите его под питон
что вы имеете ввиду по AD переписать не сложно понять бы как отправлять и главное что.
 

alexander_v

Member
Ок. В данном примере я управляю включением-выключением светодиода, подключенного в GPIO адау. Управление осуществлялось через DC Source, и адрес управляющего элемента в адау был - 0x0014.

Block Write
Time: 12:36:40 - 251ms
IC: IC 1
Cell Name: DC1
Param Name: DCInpAlg145X1value
Param Address: 0x0014
Bytes: 4
Param Data:
0x00, 0x00, 0x00, 0x01
Time: 12:36:40 - 251ms

IC: IC 1
Cell Name: DC1
Param Name: DCInpAlg145X1value
Param Address: 0x0014
Bytes: 4
Param Data:
0x00, 0x00, 0x00, 0x01

Данный пример включает и выключает DC-source (и соответсвенно светодиод подключенный к одной из ног MP) c интервалом раз в секунду.

i2c_msg.write(0x38, [0x00, 0x14, 1, 0, 0, 0]) - где 0x38 - это адрес адау со смещением (в сигмастудии этот адрес виден как 0x70), и потом идет массив где первые два элемента это смещение (регистр) записанный в виде двух отдельных байтов, и потом 4 байта, которые отвечают за управление регистра. от младшего байта к старшему.

А читать я не пробовал, мне это не зачем.

Код:
import smbus2
import time

i2c=smbus2.SMBus(1)
while True:
    msg = smbus2.i2c_msg.write(0x38, [0x00, 0x14, 0, 0, 0, 0])
    i2c.i2c_rdwr(msg)
    time.sleep(1)
    msg = smbus2.i2c_msg.write(0x38, [0x00, 0x14, 1, 0, 0, 0])
    i2c.i2c_rdwr(msg)
    time.sleep(1)
File "test2.py", line 7
msg = smbus2.i2c_msg.write(0x3b, [0x00, 0x14, 0, 0, 0, 0])
^
IndentationError: unexpected indent

вот такую ошибку выдаёт питон. как понимаю ругается на msg
 

alexander_v

Member
на ардуине это означает, что нет связи. Никаикх ошибок не бует, просто фигня в "содержании" регистров
Возьмите ардуинокод AD и перепишите его под питон
Я на малине это делаю, и если поменять адрес устройства то тогда будет ошибка.
 

igrushkin

Well-known member
File "test2.py", line 7
msg = smbus2.i2c_msg.write(0x3b, [0x00, 0x14, 0, 0, 0, 0])
^
IndentationError: unexpected indent

вот такую ошибку выдаёт питон. как понимаю ругается на msg

слово indent как бы намекает, что проблема в отступе. Как вы знаете, они критически важны в Питоне.

вот мой код


Вам дали ключевую функцию на питоне, а регистры можно у меня глянуть. Адреса регистров динамические и меняются в каждом проекте. На гитхабе лежит и проект под СигмаСтудио и код для управления по i2c

ps папку PythonScript не трогайте, там питон, но не для управления, а для форматирования текста
 

alexander_v

Member
слово indent как бы намекает, что проблема в отступе. Как вы знаете, они критически важны в Питоне.

вот мой код


Вам дали ключевую функцию на питоне, а регистры можно у меня глянуть. Адреса регистров динамические и меняются в каждом проекте. На гитхабе лежит и проект под СигмаСтудио и код для управления по i2c

ps папку PythonScript не трогайте, там питон, но не для управления, а для форматирования текста

спасибо разобрался. работает


Вопрос такой . можно ли из кода Питона загрузить то что лежит в энергонезависимой памяти, ? что бы из кода происходила загрузка первоначальной конфигурации
 

alexander_v

Member
Ок. В данном примере я управляю включением-выключением светодиода, подключенного в GPIO адау. Управление осуществлялось через DC Source, и адрес управляющего элемента в адау был - 0x0014.

Block Write
Time: 12:36:40 - 251ms
IC: IC 1
Cell Name: DC1
Param Name: DCInpAlg145X1value
Param Address: 0x0014
Bytes: 4
Param Data:
0x00, 0x00, 0x00, 0x01
Time: 12:36:40 - 251ms

IC: IC 1
Cell Name: DC1
Param Name: DCInpAlg145X1value
Param Address: 0x0014
Bytes: 4
Param Data:
0x00, 0x00, 0x00, 0x01

Данный пример включает и выключает DC-source (и соответсвенно светодиод подключенный к одной из ног MP) c интервалом раз в секунду.

i2c_msg.write(0x38, [0x00, 0x14, 1, 0, 0, 0]) - где 0x38 - это адрес адау со смещением (в сигмастудии этот адрес виден как 0x70), и потом идет массив где первые два элемента это смещение (регистр) записанный в виде двух отдельных байтов, и потом 4 байта, которые отвечают за управление регистра. от младшего байта к старшему.

А читать я не пробовал, мне это не зачем.

Код:
import smbus2
import time

i2c=smbus2.SMBus(1)
while True:
    msg = smbus2.i2c_msg.write(0x38, [0x00, 0x14, 0, 0, 0, 0])
    i2c.i2c_rdwr(msg)
    time.sleep(1)
    msg = smbus2.i2c_msg.write(0x38, [0x00, 0x14, 1, 0, 0, 0])
    i2c.i2c_rdwr(msg)
    time.sleep(1)

Спасибо
 

igrushkin

Well-known member
спасибо разобрался. работает


Вопрос такой . можно ли из кода Питона загрузить то что лежит в энергонезависимой памяти, ? что бы из кода происходила загрузка первоначальной конфигурации
можно. Из Студии экспортируется проект и там есть все нужные байты, которые можно по i2с залить в виде начальной конфигурации.
или можно сделать дамп еепром и его заливать.
 

alexander_v

Member
можно. Из Студии экспортируется проект и там есть все нужные байты, которые можно по i2с залить в виде начальной конфигурации.
или можно сделать дамп еепром и его заливать.
Доброго дня могли бы вы подсказать как ? пример кода на питоне
 

alexander_v

Member
Ок. В данном примере я управляю включением-выключением светодиода, подключенного в GPIO адау. Управление осуществлялось через DC Source, и адрес управляющего элемента в адау был - 0x0014.

Block Write
Time: 12:36:40 - 251ms
IC: IC 1
Cell Name: DC1
Param Name: DCInpAlg145X1value
Param Address: 0x0014
Bytes: 4
Param Data:
0x00, 0x00, 0x00, 0x01
Time: 12:36:40 - 251ms

IC: IC 1
Cell Name: DC1
Param Name: DCInpAlg145X1value
Param Address: 0x0014
Bytes: 4
Param Data:
0x00, 0x00, 0x00, 0x01

Данный пример включает и выключает DC-source (и соответсвенно светодиод подключенный к одной из ног MP) c интервалом раз в секунду.

i2c_msg.write(0x38, [0x00, 0x14, 1, 0, 0, 0]) - где 0x38 - это адрес адау со смещением (в сигмастудии этот адрес виден как 0x70), и потом идет массив где первые два элемента это смещение (регистр) записанный в виде двух отдельных байтов, и потом 4 байта, которые отвечают за управление регистра. от младшего байта к старшему.

А читать я не пробовал, мне это не зачем.

Код:
import smbus2
import time

i2c=smbus2.SMBus(1)
while True:
    msg = smbus2.i2c_msg.write(0x38, [0x00, 0x14, 0, 0, 0, 0])
    i2c.i2c_rdwr(msg)
    time.sleep(1)
    msg = smbus2.i2c_msg.write(0x38, [0x00, 0x14, 1, 0, 0, 0])
    i2c.i2c_rdwr(msg)
    time.sleep(1)
Подскажите пожалуйста как прочесть правильно если адрес Адау 0x3b а адрес в цепочке приборов 0x0479 как по такому адресу обращаться?
 
Верх